From 7cc56998cb1e4d77cad21ebbeb977d87d9c13cb7 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 14 Jan 2024 19:13:24 +0100 Subject: [PATCH 001/505] docs: Windows 11 support --- readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 04cb426..fef0c74 100644 --- a/readme.md +++ b/readme.md @@ -29,7 +29,7 @@ services: container_name: windows image: dockurr/windows:latest environment: - VERSION: "win10x64" + VERSION: "win11x64" devices: - /dev/kvm cap_add: @@ -43,7 +43,7 @@ services: Via `docker run` ```bash -docker run -it --rm -e "VERSION=win10x64" -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/windows:latest +docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/windows:latest ``` ## FAQ @@ -54,12 +54,12 @@ docker run -it --rm -e "VERSION=win10x64" -p 8006:8006 --device=/dev/kvm --cap-a ```yaml environment: - VERSION: "win10x64" + VERSION: "win11x64" ``` Select from the values below: - - ~~```win11x64``` (Windows 11)~~ + - ```win11x64``` (Windows 11) - ```win10x64``` (Windows 10) - ```win81x64``` (Windows 8.1) - ```win7x64-ultimate``` (Windows 7 ) From 748bf5f4e7a9d21ef06bb259ecf120da1044f989 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 14 Jan 2024 20:12:08 +0100 Subject: [PATCH 002/505] docs: CPU cores --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index fef0c74..22b86a0 100644 --- a/readme.md +++ b/readme.md @@ -75,7 +75,7 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a * ### How do I increase the amount of CPU or RAM? - By default, a single core and 4 GB of RAM are allocated to the container. + By default, 2 CPU cores and 4 GB of RAM are allocated to the container. To increase this, add the following environment variables: From 131fa1379b8783beb51e424c2dc7b5df485eb96c Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 14 Jan 2024 20:32:24 +0100 Subject: [PATCH 003/505] feat: Windows 11 support (#6) --- Dockerfile | 8 +++++++- src/entry.sh | 3 +++ src/install.sh | 31 ++++++++++++++++++------------- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index 53b3a29..632a2cf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,17 +8,23 @@ RUN apt-get update \ && apt-get --no-install-recommends -y install \ curl \ novnc \ + swtpm \ + p7zip-full \ + genisoimage \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY ./src /run/ + ADD https://raw.githubusercontent.com/ElliotKillick/Mido/main/Mido.sh /run/mido.sh +ADD https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso /run/drivers.iso + RUN chmod +x /run/*.sh EXPOSE 8006 VOLUME /storage -ENV CPU_CORES "1" +ENV CPU_CORES "2" ENV RAM_SIZE "4G" ENV DISK_SIZE "64G" diff --git a/src/entry.sh b/src/entry.sh index e8a0594..7a9560a 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -24,6 +24,9 @@ if [[ "${DISPLAY,,}" == "web" ]]; then websockify -D --web /usr/share/novnc/ 8006 localhost:5900 2>/dev/null fi +mkdir -p /tmp/emulated_tpm +swtpm socket -t -d --tpmstate dir=/tmp/emulated_tpm --ctrl type=unixio,path=/tmp/emulated_tpm/swtpm-sock --log level=1 --tpm2 + info "Booting Windows using $VERS..." [[ "$DEBUG" == [Yy1]* ]] && set -x diff --git a/src/install.sh b/src/install.sh index 02ee717..0c5c436 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1,7 +1,10 @@ #!/usr/bin/env bash set -Eeuo pipefail -: "${VERSION:="win10x64"}" +: "${VERSION:="win11x64"}" + +ARGUMENTS="-chardev socket,id=chrtpm,path=/tmp/emulated_tpm/swtpm-sock $ARGUMENTS" +ARGUMENTS="-tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 $ARGUMENTS" BASE="$VERSION.iso" [ -f "$STORAGE/$BASE" ] && return 0 @@ -13,28 +16,30 @@ else PROGRESS="--progress=dot:giga" fi -SCRIPT="$STORAGE/mido.sh" +DEST="$STORAGE/drivers.img" +[ ! -f "$DEST" ] && cp /run/drivers.iso $DEST + +rm -rf "$STORAGE/tmp" +mkdir -p "$STORAGE/tmp" +SCRIPT="$STORAGE/tmp/mido.sh" -rm -f "$SCRIPT" cp /run/mido.sh "$SCRIPT" chmod +x "$SCRIPT" +cd "$STORAGE/tmp" bash "$SCRIPT" "$VERSION" rm -f "$SCRIPT" -[ ! -f "$STORAGE/$BASE" ] && error "Failed to download $VERSION.iso!" && exit 66 +[ ! -f "$STORAGE/tmp/$BASE" ] && error "Failed to download $VERSION.iso from the Microsoft servers!" && exit 66 -DEST="$STORAGE/drivers.img" +info "Modifying ISO to remove keypress requirement during boot..." -if [ ! -f "$DEST" ]; then +7z x "$BASE" -ounpack +genisoimage -b boot/etfsboot.com -no-emul-boot -c BOOT.CAT -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -v -V "Custom" -udf -boot-info-table -eltorito-alt-boot -eltorito-boot efi/microsoft/boot/efisys_noprompt.bin -no-emul-boot -o "$STORAGE/tmp/$BASE.tmp" -allow-limited-size unpack - info "Downloading VirtIO drivers for Windows..." - DRIVERS="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso" +mv "$STORAGE/tmp/$BASE.tmp" "$STORAGE/$BASE" +rm -rf "$STORAGE/tmp" - { wget "$DRIVERS" -O "$DEST" -q --no-check-certificate --show-progress "$PROGRESS"; rc=$?; } || : - - (( rc != 0 )) && info "Failed to download $DRIVERS, reason: $rc" && rm -f "$DEST" - -fi +cd /run return 0 From 0652998966ac63e44c17f08b3ab4145a8b07ccdb Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 14 Jan 2024 20:33:50 +0100 Subject: [PATCH 004/505] fix: Quotes (#7) --- src/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index 0c5c436..aab64af 100644 --- a/src/install.sh +++ b/src/install.sh @@ -17,7 +17,7 @@ else fi DEST="$STORAGE/drivers.img" -[ ! -f "$DEST" ] && cp /run/drivers.iso $DEST +[ ! -f "$DEST" ] && cp /run/drivers.iso "$DEST" rm -rf "$STORAGE/tmp" mkdir -p "$STORAGE/tmp" From 21ea7584a4a99ec46e9defc826fafb63f158cf30 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 14 Jan 2024 20:44:08 +0100 Subject: [PATCH 005/505] fix: Remove progress (#8) --- src/install.sh | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/install.sh b/src/install.sh index aab64af..39f4f51 100644 --- a/src/install.sh +++ b/src/install.sh @@ -9,13 +9,6 @@ ARGUMENTS="-tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 $ BASE="$VERSION.iso" [ -f "$STORAGE/$BASE" ] && return 0 -# Check if running with interactive TTY or redirected to docker log -if [ -t 1 ]; then - PROGRESS="--progress=bar:noscroll" -else - PROGRESS="--progress=dot:giga" -fi - DEST="$STORAGE/drivers.img" [ ! -f "$DEST" ] && cp /run/drivers.iso "$DEST" @@ -32,7 +25,7 @@ rm -f "$SCRIPT" [ ! -f "$STORAGE/tmp/$BASE" ] && error "Failed to download $VERSION.iso from the Microsoft servers!" && exit 66 -info "Modifying ISO to remove keypress requirement during boot..." +info "Customizing ISO to remove keypress requirement during boot..." 7z x "$BASE" -ounpack genisoimage -b boot/etfsboot.com -no-emul-boot -c BOOT.CAT -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -v -V "Custom" -udf -boot-info-table -eltorito-alt-boot -eltorito-boot efi/microsoft/boot/efisys_noprompt.bin -no-emul-boot -o "$STORAGE/tmp/$BASE.tmp" -allow-limited-size unpack From 9fd26e4145b79b056f6f44d44a20e5213ed59719 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 14 Jan 2024 20:52:15 +0100 Subject: [PATCH 006/505] docs: Readme (#9) --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 22b86a0..dc29d22 100644 --- a/readme.md +++ b/readme.md @@ -50,7 +50,7 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a * ### How do I specify the Windows version? - You can modify the `VERSION` environment variable to specify the version you want: + You can modify the `VERSION` environment variable to specify the version of Windows you want to download: ```yaml environment: @@ -67,11 +67,11 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a - ```win2019-eval``` (Windows Server 2019) - ```win2022-eval``` (Windows Server 2022) - * ### How do I see the screen? + * ### How can I view the screen? The container includes a web-based viewer, so you can visit [http://localhost:8006/](http://localhost:8006/) using any webbrowser to view the screen and interact with Windows via the keyboard/mouse. - Alternatively it is also possible to connect to port 5900 using a VNC client like RealVNC or many others. + Alternatively, it is also possible to connect to port 5900 using a VNC client like RealVNC or many others. * ### How do I increase the amount of CPU or RAM? From 39431810758effdc8717a316df00fbbae2b8227d Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 03:31:58 +0100 Subject: [PATCH 007/505] docs: Installation steps (#10) --- readme.md | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index dc29d22..de48482 100644 --- a/readme.md +++ b/readme.md @@ -62,17 +62,28 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a - ```win11x64``` (Windows 11) - ```win10x64``` (Windows 10) - ```win81x64``` (Windows 8.1) - - ```win7x64-ultimate``` (Windows 7 ) - - ```win2016-eval``` (Windows Server 2016) - - ```win2019-eval``` (Windows Server 2019) - ```win2022-eval``` (Windows Server 2022) - + - ```win2019-eval``` (Windows Server 2019) + - ```win2016-eval``` (Windows Server 2016) + + * ### How do I perform the installation? + + - Start the container and wait until the ISO download is completed. If needed, you can view this progress in the Docker log, wait until you see the message ```BdsDxe: starting Boot```. + - Connect to port 8006 of the container in your webbrowser. + - Start the installation by clicking ```Install now```. On the next screen, press 'OK' when prompted for ```Load driver``` and select the ```VirtIO SCSI``` driver from the list that matches your Windows version. So for Windows 11, select ```D:\amd64\w11\vioscsi.inf``` and click 'Next'. + - Accept the license agreement and select your preferred Windows edition, like Home or Pro. + - Choose ```Custom: Install Windows only (advanced)```, and click ```Load driver``` in the next screen. Select 'Browse' and navigate to the ```D:\NetKVM\w11\amd64``` folder and click 'OK'. Select the ```VirtIO Ethernet Adapter``` from the list, and click 'Next'. + - Select 'Drive 0' and click 'Next'. + - Wait until Windows finishes copying files and completes the installation. + - Once you see your desktop, open File Explorer and navigate to the CD-ROM drive (D:). Double-click on ```virtio-win-gt-x64``` and proceed to install the VirtIO drivers. + - Now your Windows installation is ready for use. Enjoy it and don't forget to star this repo! + * ### How can I view the screen? The container includes a web-based viewer, so you can visit [http://localhost:8006/](http://localhost:8006/) using any webbrowser to view the screen and interact with Windows via the keyboard/mouse. - Alternatively, it is also possible to connect to port 5900 using a VNC client like RealVNC or many others. - + This is mainly for use during installation, as afterwards you can use Remote Desktop, TeamViewer or any software you like. + * ### How do I increase the amount of CPU or RAM? By default, 2 CPU cores and 4 GB of RAM are allocated to the container. From f1bcd5a9eec4a48fddca4c64837a6a388eb5c9a0 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 03:38:24 +0100 Subject: [PATCH 008/505] docs: Minimum requirements (#11) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index de48482..f3b2995 100644 --- a/readme.md +++ b/readme.md @@ -82,11 +82,11 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a The container includes a web-based viewer, so you can visit [http://localhost:8006/](http://localhost:8006/) using any webbrowser to view the screen and interact with Windows via the keyboard/mouse. - This is mainly for use during installation, as afterwards you can use Remote Desktop, TeamViewer or any software you like. + This is mainly for use during installation, as afterwards you can use Remote Desktop, TeamViewer or any other software you prefer. * ### How do I increase the amount of CPU or RAM? - By default, 2 CPU cores and 4 GB of RAM are allocated to the container. + By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as that are the minimum requirements of Windows 11. To increase this, add the following environment variables: From ed4f6f7f7fd3761544b3c5c4c3f7610d620b81d7 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 03:58:58 +0100 Subject: [PATCH 009/505] docs: Webbased viewer (#12) --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index f3b2995..f37a73a 100644 --- a/readme.md +++ b/readme.md @@ -16,7 +16,9 @@ Windows in a docker container. ## Features - Multi-platform + - ISO downloader - KVM acceleration + - Webbased viewer ## Usage From a958bb1dcf67ce1a3f6cc5bcb552e3171a262414 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 04:01:54 +0100 Subject: [PATCH 010/505] docs: Installation (#13) --- readme.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/readme.md b/readme.md index f37a73a..ae84e8a 100644 --- a/readme.md +++ b/readme.md @@ -50,6 +50,18 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a ## FAQ + * ### How do I perform the installation? + + - Start the container and wait until the ISO download is completed. If needed, you can view this progress in the Docker log, wait until you see the message ```BdsDxe: starting Boot```. + - Connect to port 8006 of the container in your webbrowser. + - Start the installation by clicking ```Install now```. On the next screen, press 'OK' when prompted for ```Load driver``` and select the ```VirtIO SCSI``` driver from the list that matches your Windows version. So for Windows 11, select ```D:\amd64\w11\vioscsi.inf``` and click 'Next'. + - Accept the license agreement and select your preferred Windows edition, like Home or Pro. + - Choose ```Custom: Install Windows only (advanced)```, and click ```Load driver``` in the next screen. Select 'Browse' and navigate to the ```D:\NetKVM\w11\amd64``` folder and click 'OK'. Select the ```VirtIO Ethernet Adapter``` from the list, and click 'Next'. + - Select 'Drive 0' and click 'Next'. + - Wait until Windows finishes copying files and completes the installation. + - Once you see your desktop, open File Explorer and navigate to the CD-ROM drive (D:). Double-click on ```virtio-win-gt-x64``` and proceed to install the VirtIO drivers. + - Now your Windows installation is ready for use. Enjoy it and don't forget to star this repo! + * ### How do I specify the Windows version? You can modify the `VERSION` environment variable to specify the version of Windows you want to download: @@ -68,18 +80,6 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a - ```win2019-eval``` (Windows Server 2019) - ```win2016-eval``` (Windows Server 2016) - * ### How do I perform the installation? - - - Start the container and wait until the ISO download is completed. If needed, you can view this progress in the Docker log, wait until you see the message ```BdsDxe: starting Boot```. - - Connect to port 8006 of the container in your webbrowser. - - Start the installation by clicking ```Install now```. On the next screen, press 'OK' when prompted for ```Load driver``` and select the ```VirtIO SCSI``` driver from the list that matches your Windows version. So for Windows 11, select ```D:\amd64\w11\vioscsi.inf``` and click 'Next'. - - Accept the license agreement and select your preferred Windows edition, like Home or Pro. - - Choose ```Custom: Install Windows only (advanced)```, and click ```Load driver``` in the next screen. Select 'Browse' and navigate to the ```D:\NetKVM\w11\amd64``` folder and click 'OK'. Select the ```VirtIO Ethernet Adapter``` from the list, and click 'Next'. - - Select 'Drive 0' and click 'Next'. - - Wait until Windows finishes copying files and completes the installation. - - Once you see your desktop, open File Explorer and navigate to the CD-ROM drive (D:). Double-click on ```virtio-win-gt-x64``` and proceed to install the VirtIO drivers. - - Now your Windows installation is ready for use. Enjoy it and don't forget to star this repo! - * ### How can I view the screen? The container includes a web-based viewer, so you can visit [http://localhost:8006/](http://localhost:8006/) using any webbrowser to view the screen and interact with Windows via the keyboard/mouse. From 5d32e036dc6ee5130018cc52b73c62652b94d6bb Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 04:04:39 +0100 Subject: [PATCH 011/505] docs: Installation (#14) --- readme.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/readme.md b/readme.md index ae84e8a..be1a649 100644 --- a/readme.md +++ b/readme.md @@ -53,13 +53,21 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a * ### How do I perform the installation? - Start the container and wait until the ISO download is completed. If needed, you can view this progress in the Docker log, wait until you see the message ```BdsDxe: starting Boot```. + - Connect to port 8006 of the container in your webbrowser. + - Start the installation by clicking ```Install now```. On the next screen, press 'OK' when prompted for ```Load driver``` and select the ```VirtIO SCSI``` driver from the list that matches your Windows version. So for Windows 11, select ```D:\amd64\w11\vioscsi.inf``` and click 'Next'. + - Accept the license agreement and select your preferred Windows edition, like Home or Pro. + - Choose ```Custom: Install Windows only (advanced)```, and click ```Load driver``` in the next screen. Select 'Browse' and navigate to the ```D:\NetKVM\w11\amd64``` folder and click 'OK'. Select the ```VirtIO Ethernet Adapter``` from the list, and click 'Next'. + - Select 'Drive 0' and click 'Next'. + - Wait until Windows finishes copying files and completes the installation. + - Once you see your desktop, open File Explorer and navigate to the CD-ROM drive (D:). Double-click on ```virtio-win-gt-x64``` and proceed to install the VirtIO drivers. + - Now your Windows installation is ready for use. Enjoy it and don't forget to star this repo! * ### How do I specify the Windows version? From 1a08bcea4aa3f201b3dd528455f614fc7340eeb3 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 04:11:08 +0100 Subject: [PATCH 012/505] docs: Features (#15) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index be1a649..1291567 100644 --- a/readme.md +++ b/readme.md @@ -18,7 +18,7 @@ Windows in a docker container. - Multi-platform - ISO downloader - KVM acceleration - - Webbased viewer + - Web-based viewer ## Usage From cabf74a0ba25b1f8aae21509e4682b7a375bdd0a Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 04:27:57 +0100 Subject: [PATCH 013/505] fix: Web GUI before install (#16) --- src/entry.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/entry.sh b/src/entry.sh index 7a9560a..52817b4 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -7,6 +7,9 @@ echo "❯ For support visit https://github.com/dockur/windows" export DISPLAY=web export BOOT_MODE=windows +ln -sfn /usr/share/novnc/vnc_lite.html /usr/share/novnc/index.html +websockify -D --web /usr/share/novnc/ 8006 localhost:5900 2>/dev/null + cd /run . reset.sh # Initialize system @@ -20,10 +23,6 @@ cd /run trap - ERR -if [[ "${DISPLAY,,}" == "web" ]]; then - websockify -D --web /usr/share/novnc/ 8006 localhost:5900 2>/dev/null -fi - mkdir -p /tmp/emulated_tpm swtpm socket -t -d --tpmstate dir=/tmp/emulated_tpm --ctrl type=unixio,path=/tmp/emulated_tpm/swtpm-sock --log level=1 --tpm2 From 32e6b2a77e18b0fa5c409aade297bfcceed5bea9 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 05:02:12 +0100 Subject: [PATCH 014/505] docs: Title (#17) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 1291567..237ea30 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -

Windows for Docker
+

Windows in Docker
From 1bef943281e838c5f67b0b055f7e198a77e8116e Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 05:33:59 +0100 Subject: [PATCH 015/505] feat: Local drivers (#18) --- src/install.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/install.sh b/src/install.sh index 39f4f51..fafc225 100644 --- a/src/install.sh +++ b/src/install.sh @@ -9,9 +9,6 @@ ARGUMENTS="-tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 $ BASE="$VERSION.iso" [ -f "$STORAGE/$BASE" ] && return 0 -DEST="$STORAGE/drivers.img" -[ ! -f "$DEST" ] && cp /run/drivers.iso "$DEST" - rm -rf "$STORAGE/tmp" mkdir -p "$STORAGE/tmp" SCRIPT="$STORAGE/tmp/mido.sh" From 03c8336243939410ccbaf3af33625e69daf01eb9 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 13:26:33 +0100 Subject: [PATCH 016/505] docs: Grammar (#19) --- readme.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/readme.md b/readme.md index 237ea30..6acf116 100644 --- a/readme.md +++ b/readme.md @@ -52,15 +52,15 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a * ### How do I perform the installation? - - Start the container and wait until the ISO download is completed. If needed, you can view this progress in the Docker log, wait until you see the message ```BdsDxe: starting Boot```. + - Start the container and wait until the ISO download is completed. If needed, you can view this progress in the Docker log. Wait until you see the message ```BdsDxe: starting Boot```. - - Connect to port 8006 of the container in your webbrowser. + - Connect to port 8006 of the container in your web browser. - - Start the installation by clicking ```Install now```. On the next screen, press 'OK' when prompted for ```Load driver``` and select the ```VirtIO SCSI``` driver from the list that matches your Windows version. So for Windows 11, select ```D:\amd64\w11\vioscsi.inf``` and click 'Next'. + - Start the installation by clicking ```Install now```. On the next screen, press 'OK' when prompted to ```Load driver``` and select the ```VirtIO SCSI``` driver from the list that matches your Windows version. So for Windows 11, select ```D:\amd64\w11\vioscsi.inf``` and click 'Next'. - Accept the license agreement and select your preferred Windows edition, like Home or Pro. - - Choose ```Custom: Install Windows only (advanced)```, and click ```Load driver``` in the next screen. Select 'Browse' and navigate to the ```D:\NetKVM\w11\amd64``` folder and click 'OK'. Select the ```VirtIO Ethernet Adapter``` from the list, and click 'Next'. + - Choose ```Custom: Install Windows only (advanced)```, and click ```Load driver``` on the next screen. Select 'Browse' and navigate to the ```D:\NetKVM\w11\amd64``` folder, and click 'OK'. Select the ```VirtIO Ethernet Adapter``` from the list and click 'Next'. - Select 'Drive 0' and click 'Next'. @@ -68,7 +68,7 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a - Once you see your desktop, open File Explorer and navigate to the CD-ROM drive (D:). Double-click on ```virtio-win-gt-x64``` and proceed to install the VirtIO drivers. - - Now your Windows installation is ready for use. Enjoy it and don't forget to star this repo! + - Now your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! * ### How do I specify the Windows version? @@ -90,13 +90,13 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a * ### How can I view the screen? - The container includes a web-based viewer, so you can visit [http://localhost:8006/](http://localhost:8006/) using any webbrowser to view the screen and interact with Windows via the keyboard/mouse. + The container includes a web-based viewer, so you can visit [http://localhost:8006/](http://localhost:8006/) using any web browser to view the screen and interact with Windows via the keyboard or mouse. This is mainly for use during installation, as afterwards you can use Remote Desktop, TeamViewer or any other software you prefer. * ### How do I increase the amount of CPU or RAM? - By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as that are the minimum requirements of Windows 11. + By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. To increase this, add the following environment variables: From 087e1c9b7f5f3b55c11d2af8f261df041006bbf3 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 13:56:46 +0100 Subject: [PATCH 017/505] docs: Remove latest (#20) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 6acf116..bd9bd84 100644 --- a/readme.md +++ b/readme.md @@ -29,7 +29,7 @@ version: "3" services: windows: container_name: windows - image: dockurr/windows:latest + image: dockurr/windows environment: VERSION: "win11x64" devices: @@ -45,7 +45,7 @@ services: Via `docker run` ```bash -docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/windows:latest +docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/windows ``` ## FAQ From b42cf1a1f3b8e80c25aaa2c47a8a69645134c24d Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 15:15:12 +0100 Subject: [PATCH 018/505] feat: Support custom ISO (#21) --- src/install.sh | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/install.sh b/src/install.sh index fafc225..20f6960 100644 --- a/src/install.sh +++ b/src/install.sh @@ -9,27 +9,36 @@ ARGUMENTS="-tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 $ BASE="$VERSION.iso" [ -f "$STORAGE/$BASE" ] && return 0 -rm -rf "$STORAGE/tmp" -mkdir -p "$STORAGE/tmp" -SCRIPT="$STORAGE/tmp/mido.sh" +TMP="$STORAGE/tmp" +rm -rf "$TMP" +mkdir -p "$TMP" -cp /run/mido.sh "$SCRIPT" -chmod +x "$SCRIPT" +if [ -f "$STORAGE/custom.iso" ]; then + cp "$STORAGE/custom.iso" "$TMP/$BASE" +fi -cd "$STORAGE/tmp" -bash "$SCRIPT" "$VERSION" -rm -f "$SCRIPT" +if [ ! -f "$TMP/$BASE" ]; then -[ ! -f "$STORAGE/tmp/$BASE" ] && error "Failed to download $VERSION.iso from the Microsoft servers!" && exit 66 + SCRIPT="$TMP/mido.sh" + + cp /run/mido.sh "$SCRIPT" + chmod +x "$SCRIPT" + cd "$TMP" + bash "$SCRIPT" "$VERSION" + cd /run + rm -f "$SCRIPT" + + [ ! -f "$TMP/$BASE" ] && error "Failed to download $VERSION.iso from the Microsoft servers!" && exit 66 + +fi info "Customizing ISO to remove keypress requirement during boot..." -7z x "$BASE" -ounpack -genisoimage -b boot/etfsboot.com -no-emul-boot -c BOOT.CAT -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -v -V "Custom" -udf -boot-info-table -eltorito-alt-boot -eltorito-boot efi/microsoft/boot/efisys_noprompt.bin -no-emul-boot -o "$STORAGE/tmp/$BASE.tmp" -allow-limited-size unpack +DIR="$TMP/unpack" +7z x "$TMP/$BASE" -o"$DIR" +genisoimage -b boot/etfsboot.com -no-emul-boot -c BOOT.CAT -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -v -V "$VERSION" -udf -boot-info-table -eltorito-alt-boot -eltorito-boot efi/microsoft/boot/efisys_noprompt.bin -no-emul-boot -o "$TMP/$BASE.tmp" -allow-limited-size "$DIR" -mv "$STORAGE/tmp/$BASE.tmp" "$STORAGE/$BASE" -rm -rf "$STORAGE/tmp" - -cd /run +mv "$TMP/$BASE.tmp" "$STORAGE/$BASE" +rm -rf "$TMP" return 0 From f0047bd6dc9c9e61f240962ea8cac9026facb493 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 15 Jan 2024 23:45:35 +0100 Subject: [PATCH 019/505] feat: Unattended installation (#23) --- Dockerfile | 2 + assets/win10x64.xml | 283 ++++++++++++++++++++++++++++++++++++ assets/win11x64.xml | 283 ++++++++++++++++++++++++++++++++++++ assets/win2016-eval.xml | 241 ++++++++++++++++++++++++++++++ assets/win2019-eval.xml | 241 ++++++++++++++++++++++++++++++ assets/win2022-eval.xml | 241 ++++++++++++++++++++++++++++++ assets/win7x64-ultimate.xml | 204 ++++++++++++++++++++++++++ assets/win81x64.xml | 204 ++++++++++++++++++++++++++ readme.md | 65 ++++++--- src/install.sh | 17 ++- 10 files changed, 1759 insertions(+), 22 deletions(-) create mode 100644 assets/win10x64.xml create mode 100644 assets/win11x64.xml create mode 100644 assets/win2016-eval.xml create mode 100644 assets/win2019-eval.xml create mode 100644 assets/win2022-eval.xml create mode 100644 assets/win7x64-ultimate.xml create mode 100644 assets/win81x64.xml diff --git a/Dockerfile b/Dockerfile index 632a2cf..2c36463 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,12 +9,14 @@ RUN apt-get update \ curl \ novnc \ swtpm \ + wimtools \ p7zip-full \ genisoimage \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY ./src /run/ +COPY ./assets /run/assets ADD https://raw.githubusercontent.com/ElliotKillick/Mido/main/Mido.sh /run/mido.sh ADD https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso /run/drivers.iso diff --git a/assets/win10x64.xml b/assets/win10x64.xml new file mode 100644 index 0000000..4485f30 --- /dev/null +++ b/assets/win10x64.xml @@ -0,0 +1,283 @@ + + + + + + + en-US + + 0409:00000409 + en-US + en-US + en-US + + + + + 0 + true + + + + 1 + Primary + 300 + + + + 2 + EFI + 100 + + + + 3 + MSR + 128 + + + + 4 + Primary + true + + + + + + 1 + 1 + + NTFS + DE94BBA4-06D1-4D40-A16A-BFD50179D6AC + + + + 2 + 2 + + FAT32 + + + + 3 + 3 + + + + 4 + 4 + + C + NTFS + + + + + + + + 0 + 4 + + false + + + + + VK7JG-NPHTM-C97JM-9MPGT-3V66T + + true + + false + + + + + D:\viostor\w10\amd64 + + + D:\NetKVM\w10\amd64 + + + D:\Balloon\w10\amd64 + + + D:\pvpanic\w10\amd64 + + + D:\qemupciserial\w10\amd64 + + + D:\qxldod\w10\amd64 + + + D:\vioinput\w10\amd64 + + + D:\viorng\w10\amd64 + + + D:\vioscsi\w10\amd64 + + + D:\vioserial\w10\amd64 + + + + + + + + + + 1 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f + + + 2 + netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes + + + 3 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f + + + 4 + fsutil.exe behavior set disableLastAccess 1 + + + 5 + reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT" + + + 6 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f + + + 7 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f + + + 8 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f + + + 9 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f + + + 10 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f + + + 11 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f + + + 12 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f + + + 13 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f + + + 14 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f + + + 15 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f + + + 16 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f + + + 17 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f + + + 18 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f + + + 19 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f + + + 20 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f + + + 21 + reg.exe unload "HKU\mount" + + + 22 + reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f + + + + + + + + + 0409:00000409 + en-US + en-US + en-US + + + + + + Docker + Administrators + + + true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <ProtectYourPC>3</ProtectYourPC> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + </OOBE> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win11x64.xml b/assets/win11x64.xml new file mode 100644 index 0000000..92e8b46 --- /dev/null +++ b/assets/win11x64.xml @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="offlineServicing"/> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- Windows RE Tools partition --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>300</Size> + </CreatePartition> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>EFI</Type> + <Size>100</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>4</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- Windows RE Tools partition --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>WINRE</Label> + <Format>NTFS</Format> + <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> + </ModifyPartition> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>4</Order> + <PartitionID>4</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>4</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <ProductKey> + <Key>VK7JG-NPHTM-C97JM-9MPGT-3V66T</Key> + </ProductKey> + <AcceptEula>true</AcceptEula> + </UserData> + <EnableFirewall>false</EnableFirewall> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w11\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="generalize"/> + <settings pass="specialize"> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>fsutil.exe behavior set disableLastAccess 1</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>5</Order> + <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>6</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>7</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>8</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>9</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>10</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>11</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>12</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>13</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>14</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>15</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>16</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>17</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>18</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>19</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + </settings> + <settings pass="auditSystem"/> + <settings pass="auditUser"/> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <ProtectYourPC>3</ProtectYourPC> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + </OOBE> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml new file mode 100644 index 0000000..5798d01 --- /dev/null +++ b/assets/win2016-eval.xml @@ -0,0 +1,241 @@ +<?xml version="1.0" encoding="utf-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- Windows RE Tools partition --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>300</Size> + </CreatePartition> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>EFI</Type> + <Size>100</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>4</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- Windows RE Tools partition --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>WINRE</Label> + <Format>NTFS</Format> + <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> + </ModifyPartition> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>4</Order> + <PartitionID>4</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Windows Server 2016 SERVERSTANDARD</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>4</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Organization</Organization> + <ProductKey/> + </UserData> + <EnableFirewall>false</EnableFirewall> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\2k16\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>1</ProtectYourPC> + <SkipMachineOOBE>true</SkipMachineOOBE> + <SkipUserOOBE>true</SkipUserOOBE> + </OOBE> + <RegisteredOrganization>Organization</RegisteredOrganization> + <RegisteredOwner>Owner</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml new file mode 100644 index 0000000..3353ef8 --- /dev/null +++ b/assets/win2019-eval.xml @@ -0,0 +1,241 @@ +<?xml version="1.0" encoding="utf-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- Windows RE Tools partition --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>300</Size> + </CreatePartition> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>EFI</Type> + <Size>100</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>4</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- Windows RE Tools partition --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>WINRE</Label> + <Format>NTFS</Format> + <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> + </ModifyPartition> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>4</Order> + <PartitionID>4</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Windows Server 2019 SERVERSTANDARD</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>4</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Organization</Organization> + <ProductKey/> + </UserData> + <EnableFirewall>false</EnableFirewall> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\2k19\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>1</ProtectYourPC> + <SkipMachineOOBE>true</SkipMachineOOBE> + <SkipUserOOBE>true</SkipUserOOBE> + </OOBE> + <RegisteredOrganization>Organization</RegisteredOrganization> + <RegisteredOwner>Owner</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml new file mode 100644 index 0000000..dd51baa --- /dev/null +++ b/assets/win2022-eval.xml @@ -0,0 +1,241 @@ +<?xml version="1.0" encoding="utf-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- Windows RE Tools partition --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>300</Size> + </CreatePartition> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>EFI</Type> + <Size>100</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>4</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- Windows RE Tools partition --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>WINRE</Label> + <Format>NTFS</Format> + <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> + </ModifyPartition> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>4</Order> + <PartitionID>4</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Windows Server 2022 SERVERSTANDARD</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>4</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Organization</Organization> + <ProductKey/> + </UserData> + <EnableFirewall>false</EnableFirewall> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\2k22\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>1</ProtectYourPC> + <SkipMachineOOBE>true</SkipMachineOOBE> + <SkipUserOOBE>true</SkipUserOOBE> + </OOBE> + <RegisteredOrganization>Organization</RegisteredOrganization> + <RegisteredOwner>Owner</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml new file mode 100644 index 0000000..d4a555e --- /dev/null +++ b/assets/win7x64-ultimate.xml @@ -0,0 +1,204 @@ +<?xml version="1.0"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="offlineServicing"/> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- Windows RE Tools partition --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>300</Size> + </CreatePartition> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>EFI</Type> + <Size>100</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>4</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- Windows RE Tools partition --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>WINRE</Label> + <Format>NTFS</Format> + </ModifyPartition> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>4</Order> + <PartitionID>4</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>4</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <ProductKey> + <Key>FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4</Key> + <WillShowUI>Never</WillShowUI> + </ProductKey> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization/> + </UserData> + <EnableFirewall>false</EnableFirewall> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w7\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>1</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization/> + <RegisteredOwner>Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win81x64.xml b/assets/win81x64.xml new file mode 100644 index 0000000..9354c80 --- /dev/null +++ b/assets/win81x64.xml @@ -0,0 +1,204 @@ +<?xml version="1.0"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="offlineServicing"/> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- Windows RE Tools partition --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>300</Size> + </CreatePartition> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>EFI</Type> + <Size>100</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>4</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- Windows RE Tools partition --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>WINRE</Label> + <Format>NTFS</Format> + </ModifyPartition> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>4</Order> + <PartitionID>4</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>4</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <ProductKey> + <Key>GCRJD-8NW9H-F2CDX-CCM8D-9D6T9</Key> + <WillShowUI>Never</WillShowUI> + </ProductKey> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization/> + </UserData> + <EnableFirewall>false</EnableFirewall> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w8.1\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w8.1\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w8.1\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w8.1\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w8.1\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w8.1\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w8.1\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w8.1\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w8.1\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w8.1\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value/> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>1</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization/> + <RegisteredOwner>Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/readme.md b/readme.md index bd9bd84..c046097 100644 --- a/readme.md +++ b/readme.md @@ -50,29 +50,21 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a ## FAQ - * ### How do I perform the installation? + * ### How do I use it? - - Start the container and wait until the ISO download is completed. If needed, you can view this progress in the Docker log. Wait until you see the message ```BdsDxe: starting Boot```. + Very simple! These are the steps: + + - Start the container and get some coffee, it will start downloading the ISO. - - Connect to port 8006 of the container in your web browser. + - Connect to port 8006 of the container in your web browser and wait untill you see the screen. - - Start the installation by clicking ```Install now```. On the next screen, press 'OK' when prompted to ```Load driver``` and select the ```VirtIO SCSI``` driver from the list that matches your Windows version. So for Windows 11, select ```D:\amd64\w11\vioscsi.inf``` and click 'Next'. + - Sit back and relax while all the magic happens, the whole installation will be performed fully automatic. - - Accept the license agreement and select your preferred Windows edition, like Home or Pro. - - - Choose ```Custom: Install Windows only (advanced)```, and click ```Load driver``` on the next screen. Select 'Browse' and navigate to the ```D:\NetKVM\w11\amd64``` folder, and click 'OK'. Select the ```VirtIO Ethernet Adapter``` from the list and click 'Next'. - - - Select 'Drive 0' and click 'Next'. - - - Wait until Windows finishes copying files and completes the installation. - - - Once you see your desktop, open File Explorer and navigate to the CD-ROM drive (D:). Double-click on ```virtio-win-gt-x64``` and proceed to install the VirtIO drivers. - - - Now your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! + - Once you see your desktop, your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! * ### How do I specify the Windows version? - You can modify the `VERSION` environment variable to specify the version of Windows you want to download: + You can modify the `VERSION` environment variable in order to specify the version of Windows you want to download: ```yaml environment: @@ -88,11 +80,9 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a - ```win2019-eval``` (Windows Server 2019) - ```win2016-eval``` (Windows Server 2016) - * ### How can I view the screen? + * ### How do I use a custom ISO file? - The container includes a web-based viewer, so you can visit [http://localhost:8006/](http://localhost:8006/) using any web browser to view the screen and interact with Windows via the keyboard or mouse. - - This is mainly for use during installation, as afterwards you can use Remote Desktop, TeamViewer or any other software you prefer. + You can supply your own ISO file by naming it ```custom.iso``` and placing it in the ```/storage``` folder. Then follow the same steps as for [manual installation](https://github.com/dockur/windows/tree/dev?tab=readme-ov-file#how-do-i-perform-a-manual-installation). * ### How do I increase the amount of CPU or RAM? @@ -139,6 +129,41 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. + * ### How do I view the screen? + + The container includes a web-based viewer, so you can visit [http://localhost:8006/](http://localhost:8006/) using any web browser to view the screen and interact with Windows via the keyboard or mouse. + + This is mainly for use during installation, as afterwards you can use Remote Desktop, TeamViewer or any other software you prefer. + + * ### How do I perform a manual installation? + + If you prefer to perform the installation manually in order to customize some options, add the following environment variable: + + ```yaml + environment: + ATTENDED: "Y" + ``` + + Then follow these steps: + + - Start the container and wait until the ISO download is completed. If needed, you can view this progress in the Docker log. Wait until you see the message ```BdsDxe: starting Boot```. + + - Connect to port 8006 of the container in your web browser, you will see the Windows installation screen. + + - Start the installation by clicking ```Install now```. On the next screen, press 'OK' when prompted to ```Load driver``` and select the ```VirtIO SCSI``` driver from the list that matches your Windows version. So for Windows 11, select ```D:\amd64\w11\vioscsi.inf``` and click 'Next'. + + - Accept the license agreement and select your preferred Windows edition, like Home or Pro. + + - Choose ```Custom: Install Windows only (advanced)```, and click ```Load driver``` on the next screen. Select 'Browse' and navigate to the ```D:\NetKVM\w11\amd64``` folder, and click 'OK'. Select the ```VirtIO Ethernet Adapter``` from the list and click 'Next'. + + - Select 'Drive 0' and click 'Next'. + + - Wait until Windows finishes copying files and completes the installation. + + - Once you see your desktop, open File Explorer and navigate to the CD-ROM drive (D:). Double-click on ```virtio-win-gt-x64``` and proceed to install the VirtIO drivers. + + - Now your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! + * ### Is this project legal? Yes, this project contains only open-source code and does not distribute any copyrighted material. Neither does it try to circumvent any copyright protection measures. So under all applicable laws, this project would be considered legal. diff --git a/src/install.sh b/src/install.sh index 20f6960..97265eb 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${ATTENDED:="N"}" : "${VERSION:="win11x64"}" ARGUMENTS="-chardev socket,id=chrtpm,path=/tmp/emulated_tpm/swtpm-sock $ARGUMENTS" @@ -32,11 +33,23 @@ if [ ! -f "$TMP/$BASE" ]; then fi -info "Customizing ISO to remove keypress requirement during boot..." +info "Preparing ISO image for installation..." DIR="$TMP/unpack" 7z x "$TMP/$BASE" -o"$DIR" -genisoimage -b boot/etfsboot.com -no-emul-boot -c BOOT.CAT -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -v -V "$VERSION" -udf -boot-info-table -eltorito-alt-boot -eltorito-boot efi/microsoft/boot/efisys_noprompt.bin -no-emul-boot -o "$TMP/$BASE.tmp" -allow-limited-size "$DIR" + +if [[ "$ATTENDED" != [Yy1]* ]]; then + if [ -f "/run/assets/$VERSION.xml" ]; then + + wimlib-imagex update "$DIR/sources/boot.wim" 2 \ + --command "add /run/assets/$VERSION.xml /autounattend.xml" + + fi +fi + +genisoimage -b boot/etfsboot.com -no-emul-boot -c BOOT.CAT -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames \ + -v -V "$VERSION" -udf -boot-info-table -eltorito-alt-boot -eltorito-boot efi/microsoft/boot/efisys_noprompt.bin \ + -no-emul-boot -o "$TMP/$BASE.tmp" -allow-limited-size "$DIR" mv "$TMP/$BASE.tmp" "$STORAGE/$BASE" rm -rf "$TMP" From f9b2cb04112b32d67ee8bce6dbaab87f712dad53 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Jan 2024 23:47:51 +0100 Subject: [PATCH 020/505] docs: Readme (#24) --- docker-compose.yml | 2 +- readme.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 153cc82..fde81c1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,8 @@ version: "3" services: windows: + image: dockurr/windows container_name: windows - image: dockurr/windows:latest environment: VERSION: "win11x64" devices: diff --git a/readme.md b/readme.md index c046097..ed98515 100644 --- a/readme.md +++ b/readme.md @@ -28,8 +28,8 @@ Via `docker-compose.yml` version: "3" services: windows: - container_name: windows image: dockurr/windows + container_name: windows environment: VERSION: "win11x64" devices: From 8ce4857b33e72414648d8d53cd9c6f4d98f58d5d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 16 Jan 2024 00:02:46 +0100 Subject: [PATCH 021/505] docs: Fix link (#25) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index ed98515..e19028b 100644 --- a/readme.md +++ b/readme.md @@ -45,7 +45,7 @@ services: Via `docker run` ```bash -docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/windows +docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/windows ``` ## FAQ @@ -82,7 +82,7 @@ docker run -it --rm -e "VERSION=win11x64" -p 8006:8006 --device=/dev/kvm --cap-a * ### How do I use a custom ISO file? - You can supply your own ISO file by naming it ```custom.iso``` and placing it in the ```/storage``` folder. Then follow the same steps as for [manual installation](https://github.com/dockur/windows/tree/dev?tab=readme-ov-file#how-do-i-perform-a-manual-installation). + You can supply your own ISO file by naming it ```custom.iso``` and placing it in the ```/storage``` folder. Then follow the same steps as for [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation). * ### How do I increase the amount of CPU or RAM? From adb91fe3c882e435d3c34361d54fc9a9dcc12436 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 16 Jan 2024 01:18:58 +0100 Subject: [PATCH 022/505] fix: Installation configuration (#26) --- assets/win2016-eval.xml | 2 -- assets/win2019-eval.xml | 2 -- assets/win2022-eval.xml | 2 -- assets/win7x64-ultimate.xml | 4 +--- assets/win81x64.xml | 4 +--- 5 files changed, 2 insertions(+), 12 deletions(-) diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 5798d01..b0756d7 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -217,8 +217,6 @@ <SkipMachineOOBE>true</SkipMachineOOBE> <SkipUserOOBE>true</SkipUserOOBE> </OOBE> - <RegisteredOrganization>Organization</RegisteredOrganization> - <RegisteredOwner>Owner</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 3353ef8..f3025bd 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -217,8 +217,6 @@ <SkipMachineOOBE>true</SkipMachineOOBE> <SkipUserOOBE>true</SkipUserOOBE> </OOBE> - <RegisteredOrganization>Organization</RegisteredOrganization> - <RegisteredOwner>Owner</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index dd51baa..4ded85c 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -217,8 +217,6 @@ <SkipMachineOOBE>true</SkipMachineOOBE> <SkipUserOOBE>true</SkipUserOOBE> </OOBE> - <RegisteredOrganization>Organization</RegisteredOrganization> - <RegisteredOwner>Owner</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index d4a555e..322450a 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -49,6 +49,7 @@ <PartitionID>1</PartitionID> <Label>WINRE</Label> <Format>NTFS</Format> + <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> </ModifyPartition> <!-- System partition (ESP) --> <ModifyPartition wcm:action="add"> @@ -69,7 +70,6 @@ <Label>Windows</Label> <Letter>C</Letter> <Format>NTFS</Format> - <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> </ModifyPartition> </ModifyPartitions> </Disk> @@ -180,8 +180,6 @@ <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> </OOBE> - <RegisteredOrganization/> - <RegisteredOwner>Docker</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 9354c80..7e4fe1d 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -49,6 +49,7 @@ <PartitionID>1</PartitionID> <Label>WINRE</Label> <Format>NTFS</Format> + <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> </ModifyPartition> <!-- System partition (ESP) --> <ModifyPartition wcm:action="add"> @@ -69,7 +70,6 @@ <Label>Windows</Label> <Letter>C</Letter> <Format>NTFS</Format> - <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> </ModifyPartition> </ModifyPartitions> </Disk> @@ -180,8 +180,6 @@ <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> </OOBE> - <RegisteredOrganization/> - <RegisteredOwner>Docker</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> From d057b5bd06a7fa1aeb0fcca1b35751ec7823701d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 16 Jan 2024 01:20:13 +0100 Subject: [PATCH 023/505] build: Ignore .xml files (#27) --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6db1a6a..099a240 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,6 +8,7 @@ on: paths-ignore: - '**/*.md' - '**/*.yml' + - '**/*.xml' - '.gitignore' - '.dockerignore' - '.github/**' From 7c88b1e0ac36abdf37ee18aef13d70f78f2613e5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 16 Jan 2024 02:49:50 +0100 Subject: [PATCH 024/505] feat: Set custom label (#30) --- src/install.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index 97265eb..6f99947 100644 --- a/src/install.sh +++ b/src/install.sh @@ -15,11 +15,14 @@ rm -rf "$TMP" mkdir -p "$TMP" if [ -f "$STORAGE/custom.iso" ]; then + ATTENDED="Y" + LABEL="Custom" cp "$STORAGE/custom.iso" "$TMP/$BASE" fi if [ ! -f "$TMP/$BASE" ]; then + LABEL="$VERSION" SCRIPT="$TMP/mido.sh" cp /run/mido.sh "$SCRIPT" @@ -48,7 +51,7 @@ if [[ "$ATTENDED" != [Yy1]* ]]; then fi genisoimage -b boot/etfsboot.com -no-emul-boot -c BOOT.CAT -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames \ - -v -V "$VERSION" -udf -boot-info-table -eltorito-alt-boot -eltorito-boot efi/microsoft/boot/efisys_noprompt.bin \ + -v -V "$LABEL" -udf -boot-info-table -eltorito-alt-boot -eltorito-boot efi/microsoft/boot/efisys_noprompt.bin \ -no-emul-boot -o "$TMP/$BASE.tmp" -allow-limited-size "$DIR" mv "$TMP/$BASE.tmp" "$STORAGE/$BASE" From be349606f8b4b03c29ac75f6f399a678192b8fb1 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 16 Jan 2024 04:28:16 +0100 Subject: [PATCH 025/505] docs: Custom ISO (#31) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index e19028b..c4a6384 100644 --- a/readme.md +++ b/readme.md @@ -80,9 +80,9 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w - ```win2019-eval``` (Windows Server 2019) - ```win2016-eval``` (Windows Server 2016) - * ### How do I use a custom ISO file? + * ### How do I install a custom ISO file? - You can supply your own ISO file by naming it ```custom.iso``` and placing it in the ```/storage``` folder. Then follow the same steps as for [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation). + You can supply your own ISO file by naming it ```custom.iso``` and placing it in the ```/storage``` folder. Make sure to delete every other file in this folder, so that there are no leftovers from previous installations. Then follow the same steps as for [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation). * ### How do I increase the amount of CPU or RAM? From 87f26d1d7b11123ae22452f37b0b81cb611cccb6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 16 Jan 2024 05:29:56 +0100 Subject: [PATCH 026/505] docs: Readme (#32) --- readme.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/readme.md b/readme.md index c4a6384..56669b8 100644 --- a/readme.md +++ b/readme.md @@ -30,8 +30,6 @@ services: windows: image: dockurr/windows container_name: windows - environment: - VERSION: "win11x64" devices: - /dev/kvm cap_add: @@ -54,17 +52,17 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w Very simple! These are the steps: - - Start the container and get some coffee, it will start downloading the ISO. + - Start the container and get some coffee, it will begin downloading the ISO file. - - Connect to port 8006 of the container in your web browser and wait untill you see the screen. + - Connect to port 8006 of the container in your web browser and wait until you see the screen. - - Sit back and relax while all the magic happens, the whole installation will be performed fully automatic. + - Sit back and relax while the magic happens, the whole installation will be performed fully automatic. - - Once you see your desktop, your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! + - Once you see the desktop, your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! - * ### How do I specify the Windows version? + * ### How do I specify another Windows version? - You can modify the `VERSION` environment variable in order to specify the version of Windows you want to download: + You can add the `VERSION` environment variable to your compose file, in order to specify the Windows version you want to download: ```yaml environment: @@ -82,7 +80,9 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w * ### How do I install a custom ISO file? - You can supply your own ISO file by naming it ```custom.iso``` and placing it in the ```/storage``` folder. Make sure to delete every other file in this folder, so that there are no leftovers from previous installations. Then follow the same steps as for [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation). + You can supply your own ISO file by naming it ```custom.iso``` and placing it in the ```/storage``` folder. + + Make sure to delete every other file in this folder, so that there are no leftovers from previous installations. Then follow the same steps as for [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation). * ### How do I increase the amount of CPU or RAM? @@ -146,7 +146,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w Then follow these steps: - - Start the container and wait until the ISO download is completed. If needed, you can view this progress in the Docker log. Wait until you see the message ```BdsDxe: starting Boot```. + - Start the container and wait until the ISO download is finished. If needed, you can view the progress in the Docker log. - Connect to port 8006 of the container in your web browser, you will see the Windows installation screen. @@ -160,7 +160,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w - Wait until Windows finishes copying files and completes the installation. - - Once you see your desktop, open File Explorer and navigate to the CD-ROM drive (D:). Double-click on ```virtio-win-gt-x64``` and proceed to install the VirtIO drivers. + - Once you see your desktop, open File Explorer and navigate to the CD-ROM drive (E:). Double-click on ```virtio-win-gt-x64.msi``` and proceed to install the VirtIO drivers. - Now your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! From 3516206310781209d0329e04fc903c3aa6b91446 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 16 Jan 2024 05:38:04 +0100 Subject: [PATCH 027/505] docs: Readme (#33) --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 56669b8..503456a 100644 --- a/readme.md +++ b/readme.md @@ -62,7 +62,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w * ### How do I specify another Windows version? - You can add the `VERSION` environment variable to your compose file, in order to specify the Windows version you want to download: + By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to download: ```yaml environment: @@ -82,7 +82,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w You can supply your own ISO file by naming it ```custom.iso``` and placing it in the ```/storage``` folder. - Make sure to delete every other file in this folder, so that there are no leftovers from previous installations. Then follow the same steps as for [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation). + Make sure to delete any other files in this folder, so that there are no leftovers from previous installations. Then follow the same steps as for [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation). * ### How do I increase the amount of CPU or RAM? @@ -160,7 +160,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w - Wait until Windows finishes copying files and completes the installation. - - Once you see your desktop, open File Explorer and navigate to the CD-ROM drive (E:). Double-click on ```virtio-win-gt-x64.msi``` and proceed to install the VirtIO drivers. + - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (E:). Double-click on ```virtio-win-gt-x64.msi``` and proceed to install the VirtIO drivers. - Now your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! From 27bb07240196766b4abf768fffdb045eb54371cc Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 16 Jan 2024 19:58:55 +0100 Subject: [PATCH 028/505] feat: Display wait message (#37) --- src/entry.sh | 11 ++++++----- src/install.sh | 6 +++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/entry.sh b/src/entry.sh index 52817b4..e8051fc 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -7,9 +7,6 @@ echo "❯ For support visit https://github.com/dockur/windows" export DISPLAY=web export BOOT_MODE=windows -ln -sfn /usr/share/novnc/vnc_lite.html /usr/share/novnc/index.html -websockify -D --web /usr/share/novnc/ 8006 localhost:5900 2>/dev/null - cd /run . reset.sh # Initialize system @@ -23,8 +20,12 @@ cd /run trap - ERR -mkdir -p /tmp/emulated_tpm -swtpm socket -t -d --tpmstate dir=/tmp/emulated_tpm --ctrl type=unixio,path=/tmp/emulated_tpm/swtpm-sock --log level=1 --tpm2 +ln -sfn /usr/share/novnc/vnc_lite.html /usr/share/novnc/index.html +websockify -D --web /usr/share/novnc/ 8006 localhost:5900 2>/dev/null + +mkdir -p /dev/shm/emulated_tpm +swtpm socket -t -d --tpmstate dir=/dev/shm/emulated_tpm --ctrl \ + type=unixio,path=/dev/shm/emulated_tpm/swtpm-sock --log level=1 --tpm2 info "Booting Windows using $VERS..." diff --git a/src/install.sh b/src/install.sh index 6f99947..4ab4d2b 100644 --- a/src/install.sh +++ b/src/install.sh @@ -4,7 +4,11 @@ set -Eeuo pipefail : "${ATTENDED:="N"}" : "${VERSION:="win11x64"}" -ARGUMENTS="-chardev socket,id=chrtpm,path=/tmp/emulated_tpm/swtpm-sock $ARGUMENTS" +# Display wait message +MSG="Please wait while Windows is being downloaded..." +/run/server.sh "Windows" "$MSG" & + +ARGUMENTS="-chardev socket,id=chrtpm,path=/dev/shm/emulated_tpm/swtpm-sock $ARGUMENTS" ARGUMENTS="-tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 $ARGUMENTS" BASE="$VERSION.iso" From 06722236bee9ef4dba195613a572ebecb4e80f0c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Jan 2024 03:40:19 +0100 Subject: [PATCH 029/505] feat: Improved installation (#39) --- Dockerfile | 6 +- assets/win7x64-ultimate.xml | 202 ------------------------------------ assets/win81x64.xml | 26 +++-- docker-compose.yml | 4 +- readme.md | 57 +++++----- src/install.sh | 136 +++++++++++++++++++----- 6 files changed, 163 insertions(+), 268 deletions(-) delete mode 100644 assets/win7x64-ultimate.xml diff --git a/Dockerfile b/Dockerfile index 2c36463..cfc2067 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,15 +19,15 @@ COPY ./src /run/ COPY ./assets /run/assets ADD https://raw.githubusercontent.com/ElliotKillick/Mido/main/Mido.sh /run/mido.sh -ADD https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso /run/drivers.iso +ADD https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso /run/drivers.iso RUN chmod +x /run/*.sh -EXPOSE 8006 +EXPOSE 3389 8006 VOLUME /storage -ENV CPU_CORES "2" ENV RAM_SIZE "4G" +ENV CPU_CORES "2" ENV DISK_SIZE "64G" ARG VERSION_ARG "0.0" diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml deleted file mode 100644 index 322450a..0000000 --- a/assets/win7x64-ultimate.xml +++ /dev/null @@ -1,202 +0,0 @@ -<?xml version="1.0"?> -<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> - <settings pass="offlineServicing"/> - <settings pass="windowsPE"> - <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <SetupUILanguage> - <UILanguage>en-US</UILanguage> - </SetupUILanguage> - <InputLocale>0409:00000409</InputLocale> - <SystemLocale>en-US</SystemLocale> - <UILanguage>en-US</UILanguage> - <UserLocale>en-US</UserLocale> - </component> - <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DiskConfiguration> - <Disk wcm:action="add"> - <DiskID>0</DiskID> - <WillWipeDisk>true</WillWipeDisk> - <CreatePartitions> - <!-- Windows RE Tools partition --> - <CreatePartition wcm:action="add"> - <Order>1</Order> - <Type>Primary</Type> - <Size>300</Size> - </CreatePartition> - <!-- System partition (ESP) --> - <CreatePartition wcm:action="add"> - <Order>2</Order> - <Type>EFI</Type> - <Size>100</Size> - </CreatePartition> - <!-- Microsoft reserved partition (MSR) --> - <CreatePartition wcm:action="add"> - <Order>3</Order> - <Type>MSR</Type> - <Size>128</Size> - </CreatePartition> - <!-- Windows partition --> - <CreatePartition wcm:action="add"> - <Order>4</Order> - <Type>Primary</Type> - <Extend>true</Extend> - </CreatePartition> - </CreatePartitions> - <ModifyPartitions> - <!-- Windows RE Tools partition --> - <ModifyPartition wcm:action="add"> - <Order>1</Order> - <PartitionID>1</PartitionID> - <Label>WINRE</Label> - <Format>NTFS</Format> - <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> - </ModifyPartition> - <!-- System partition (ESP) --> - <ModifyPartition wcm:action="add"> - <Order>2</Order> - <PartitionID>2</PartitionID> - <Label>System</Label> - <Format>FAT32</Format> - </ModifyPartition> - <!-- MSR partition does not need to be modified --> - <ModifyPartition wcm:action="add"> - <Order>3</Order> - <PartitionID>3</PartitionID> - </ModifyPartition> - <!-- Windows partition --> - <ModifyPartition wcm:action="add"> - <Order>4</Order> - <PartitionID>4</PartitionID> - <Label>Windows</Label> - <Letter>C</Letter> - <Format>NTFS</Format> - </ModifyPartition> - </ModifyPartitions> - </Disk> - </DiskConfiguration> - <ImageInstall> - <OSImage> - <InstallTo> - <DiskID>0</DiskID> - <PartitionID>4</PartitionID> - </InstallTo> - <InstallToAvailablePartition>false</InstallToAvailablePartition> - </OSImage> - </ImageInstall> - <UserData> - <ProductKey> - <Key>FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4</Key> - <WillShowUI>Never</WillShowUI> - </ProductKey> - <AcceptEula>true</AcceptEula> - <FullName>Docker</FullName> - <Organization/> - </UserData> - <EnableFirewall>false</EnableFirewall> - </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w7\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> - </settings> - <settings pass="specialize"> - <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <InputLocale>0409:00000409</InputLocale> - <SystemLocale>en-US</SystemLocale> - <UILanguage>en-US</UILanguage> - <UserLocale>en-US</UserLocale> - </component> - <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <SkipAutoActivation>true</SkipAutoActivation> - </component> - <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <CEIPEnabled>0</CEIPEnabled> - </component> - </settings> - <settings pass="oobeSystem"> - <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <UserAccounts> - <LocalAccounts> - <LocalAccount wcm:action="add"> - <Name>Docker</Name> - <Group>Administrators</Group> - <Password> - <Value/> - <PlainText>true</PlainText> - </Password> - </LocalAccount> - </LocalAccounts> - <AdministratorPassword> - <Value>password</Value> - <PlainText>true</PlainText> - </AdministratorPassword> - </UserAccounts> - <AutoLogon> - <Username>Docker</Username> - <Enabled>true</Enabled> - <LogonCount>1</LogonCount> - <Password> - <Value/> - <PlainText>true</PlainText> - </Password> - </AutoLogon> - <OOBE> - <HideEULAPage>true</HideEULAPage> - <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> - <HideOnlineAccountScreens>true</HideOnlineAccountScreens> - <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Home</NetworkLocation> - <ProtectYourPC>1</ProtectYourPC> - <SkipUserOOBE>true</SkipUserOOBE> - <SkipMachineOOBE>true</SkipMachineOOBE> - </OOBE> - <FirstLogonCommands> - <SynchronousCommand wcm:action="add"> - <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <RequiresUserInput>false</RequiresUserInput> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> - <Description>Password Never Expires</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> - </SynchronousCommand> - </FirstLogonCommands> - </component> - </settings> -</unattend> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 7e4fe1d..e0f8857 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -1,6 +1,5 @@ <?xml version="1.0"?> <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> - <settings pass="offlineServicing"/> <settings pass="windowsPE"> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <SetupUILanguage> @@ -76,6 +75,12 @@ </DiskConfiguration> <ImageInstall> <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows 8.1 Pro</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> <InstallTo> <DiskID>0</DiskID> <PartitionID>4</PartitionID> @@ -86,18 +91,18 @@ <UserData> <ProductKey> <Key>GCRJD-8NW9H-F2CDX-CCM8D-9D6T9</Key> - <WillShowUI>Never</WillShowUI> + <WillShowUI>OnError</WillShowUI> </ProductKey> <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> - <Organization/> + <Organization>Docker</Organization> </UserData> <EnableFirewall>false</EnableFirewall> </component> <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DriverPaths> <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w8.1\amd64</Path> + <Path>D:\viostor\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="2"> <Path>D:\NetKVM\w8.1\amd64</Path> @@ -121,7 +126,7 @@ <Path>D:\viorng\w8.1\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w8.1\amd64</Path> + <Path>D:\vioscsi\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="10"> <Path>D:\vioserial\w8.1\amd64</Path> @@ -129,6 +134,11 @@ </DriverPaths> </component> </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> <settings pass="specialize"> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> @@ -187,12 +197,6 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> - <RequiresUserInput>false</RequiresUserInput> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> - <Description>Password Never Expires</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/docker-compose.yml b/docker-compose.yml index fde81c1..9315465 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,13 +3,13 @@ services: windows: image: dockurr/windows container_name: windows - environment: - VERSION: "win11x64" devices: - /dev/kvm cap_add: - NET_ADMIN ports: - 8006:8006 + - 3389:3389/tcp + - 3389:3389/udp stop_grace_period: 2m restart: unless-stopped diff --git a/readme.md b/readme.md index 503456a..b241b38 100644 --- a/readme.md +++ b/readme.md @@ -36,6 +36,8 @@ services: - NET_ADMIN ports: - 8006:8006 + - 3389:3389/tcp + - 3389:3389/udp stop_grace_period: 2m restart: unless-stopped ``` @@ -52,37 +54,31 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w Very simple! These are the steps: - - Start the container and get some coffee, it will begin downloading the ISO file. + - Start the container and get some coffee. - - Connect to port 8006 of the container in your web browser and wait until you see the screen. + - Connect to port 8006 of the container in your web browser. - Sit back and relax while the magic happens, the whole installation will be performed fully automatic. - Once you see the desktop, your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! - * ### How do I specify another Windows version? + * ### How do I select the Windows version? By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to download: ```yaml environment: - VERSION: "win11x64" + VERSION: "win11" ``` Select from the values below: - - ```win11x64``` (Windows 11) - - ```win10x64``` (Windows 10) - - ```win81x64``` (Windows 8.1) - - ```win2022-eval``` (Windows Server 2022) - - ```win2019-eval``` (Windows Server 2019) - - ```win2016-eval``` (Windows Server 2016) - - * ### How do I install a custom ISO file? - - You can supply your own ISO file by naming it ```custom.iso``` and placing it in the ```/storage``` folder. - - Make sure to delete any other files in this folder, so that there are no leftovers from previous installations. Then follow the same steps as for [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation). + - ```win11``` (Windows 11) + - ```win10``` (Windows 10) + - ```win81``` (Windows 8.1) + - ```win22``` (Windows Server 2022) + - ```win19``` (Windows Server 2019) + - ```win16``` (Windows Server 2016) * ### How do I increase the amount of CPU or RAM? @@ -96,20 +92,20 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w CPU_CORES: "4" ``` - * ### How do I change the size of the data disk? + * ### How do I change the size of the disk? To expand the default size of 64 GB, add the `DISK_SIZE` setting to your compose file and set it to your preferred capacity: ```yaml environment: - DISK_SIZE: "128G" + DISK_SIZE: "256G" ``` This can also be used to resize the existing disk to a larger capacity without any data loss. - * ### How do I change the location of the data disk? + * ### How do I change the storage location? - To change the location of the data disk, include the following bind mount in your compose file: + To change the storage location, include the following bind mount in your compose file: ```yaml volumes: @@ -131,24 +127,22 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w * ### How do I view the screen? - The container includes a web-based viewer, so you can visit [http://localhost:8006/](http://localhost:8006/) using any web browser to view the screen and interact with Windows via the keyboard or mouse. + The container includes a web-based viewer, so you can visit [http://localhost:8006/](http://localhost:8006/) using any web browser to view the screen and interact with Windows via the keyboard and mouse. This is mainly for use during installation, as afterwards you can use Remote Desktop, TeamViewer or any other software you prefer. * ### How do I perform a manual installation? - If you prefer to perform the installation manually in order to customize some options, add the following environment variable: + If you prefer to perform the installation manually in order to customize some options, such as selecting another edition, add the following environment variable: ```yaml environment: - ATTENDED: "Y" + MANUAL: "Y" ``` Then follow these steps: - - Start the container and wait until the ISO download is finished. If needed, you can view the progress in the Docker log. - - - Connect to port 8006 of the container in your web browser, you will see the Windows installation screen. + - Start the container and connect to port 8006 of the container in your web browser. After the download is finished, you will see the Windows installation screen. - Start the installation by clicking ```Install now```. On the next screen, press 'OK' when prompted to ```Load driver``` and select the ```VirtIO SCSI``` driver from the list that matches your Windows version. So for Windows 11, select ```D:\amd64\w11\vioscsi.inf``` and click 'Next'. @@ -164,6 +158,17 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w - Now your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! + * ### How do I install an unsupported version? + + You can specify an URL in the `VERSION` environment variable, in order to download a custom ISO file: + + ```yaml + environment: + VERSION: "https://example.com/win.iso" + ``` + + During the installation you will need to add some drivers as described in [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation) above. + * ### Is this project legal? Yes, this project contains only open-source code and does not distribute any copyrighted material. Neither does it try to circumvent any copyright protection measures. So under all applicable laws, this project would be considered legal. diff --git a/src/install.sh b/src/install.sh index 4ab4d2b..7761289 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1,64 +1,152 @@ #!/usr/bin/env bash set -Eeuo pipefail -: "${ATTENDED:="N"}" +: "${MANUAL:="N"}" +: "${EXTERNAL:="N"}" : "${VERSION:="win11x64"}" -# Display wait message -MSG="Please wait while Windows is being downloaded..." -/run/server.sh "Windows" "$MSG" & - ARGUMENTS="-chardev socket,id=chrtpm,path=/dev/shm/emulated_tpm/swtpm-sock $ARGUMENTS" ARGUMENTS="-tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 $ARGUMENTS" -BASE="$VERSION.iso" +[[ "${VERSION,,}" == "http"* ]] && EXTERNAL="Y" + +[[ "${VERSION,,}" == "11" ]] && VERSION="win11x64" +[[ "${VERSION,,}" == "win11" ]] && VERSION="win11x64" + +[[ "${VERSION,,}" == "10" ]] && VERSION="win10x64" +[[ "${VERSION,,}" == "win10" ]] && VERSION="win10x64" + +[[ "${VERSION,,}" == "8" ]] && VERSION="win81x64" +[[ "${VERSION,,}" == "81" ]] && VERSION="win81x64" +[[ "${VERSION,,}" == "8.1" ]] && VERSION="win81x64" +[[ "${VERSION,,}" == "win81" ]] && VERSION="win81x64" +[[ "${VERSION,,}" == "win8" ]] && VERSION="win81x64" + +[[ "${VERSION,,}" == "22" ]] && VERSION="win2022-eval" +[[ "${VERSION,,}" == "2022" ]] && VERSION="win2022-eval" +[[ "${VERSION,,}" == "win22" ]] && VERSION="win2022-eval" +[[ "${VERSION,,}" == "win2022" ]] && VERSION="win2022-eval" + +[[ "${VERSION,,}" == "19" ]] && VERSION="win2019-eval" +[[ "${VERSION,,}" == "2019" ]] && VERSION="win2019-eval" +[[ "${VERSION,,}" == "win19" ]] && VERSION="win2019-eval" +[[ "${VERSION,,}" == "win2019" ]] && VERSION="win2019-eval" + +[[ "${VERSION,,}" == "16" ]] && VERSION="win2016-eval" +[[ "${VERSION,,}" == "2016" ]] && VERSION="win2016-eval" +[[ "${VERSION,,}" == "win16" ]] && VERSION="win2016-eval" +[[ "${VERSION,,}" == "win2016" ]] && VERSION="win2016-eval" + +MSG="Please wait while Windows is being started..." + +if [ ! -f "$STORAGE/custom.iso" ]; then + if [[ "$EXTERNAL" != [Yy1]* ]]; then + + if [ ! -f "$STORAGE/$VERSION.iso" ]; then + MSG="Please wait while Windows is being downloaded..." + fi + + else + + BASE=$(basename "$VERSION") + if [ ! -f "$STORAGE/$BASE" ]; then + MSG="Please wait while '$BASE' is being downloaded..." + fi + + fi +fi + +# Display wait message +/run/server.sh "Windows" "$MSG" & + +BASE="custom.iso" +[ -f "$STORAGE/$BASE" ] && return 0 + +if [[ "$EXTERNAL" != [Yy1]* ]]; then + + BASE="$VERSION.iso" + +else + + BASE=$(basename "$VERSION") + +fi + [ -f "$STORAGE/$BASE" ] && return 0 TMP="$STORAGE/tmp" -rm -rf "$TMP" -mkdir -p "$TMP" +rm -rf "$TMP" && mkdir -p "$TMP" -if [ -f "$STORAGE/custom.iso" ]; then - ATTENDED="Y" - LABEL="Custom" - cp "$STORAGE/custom.iso" "$TMP/$BASE" -fi +ISO="$TMP/$BASE" +rm -f "$ISO" -if [ ! -f "$TMP/$BASE" ]; then +if [[ "$EXTERNAL" != [Yy1]* ]]; then - LABEL="$VERSION" SCRIPT="$TMP/mido.sh" + rm -f "$SCRIPT" cp /run/mido.sh "$SCRIPT" chmod +x "$SCRIPT" cd "$TMP" bash "$SCRIPT" "$VERSION" - cd /run rm -f "$SCRIPT" + cd /run - [ ! -f "$TMP/$BASE" ] && error "Failed to download $VERSION.iso from the Microsoft servers!" && exit 66 +else + info "Downloading $BASE as boot image..." + + # Check if running with interactive TTY or redirected to docker log + if [ -t 1 ]; then + PROGRESS="--progress=bar:noscroll" + else + PROGRESS="--progress=dot:giga" + fi + + { wget "$VERSION" -O "$ISO" -q --no-check-certificate --show-progress "$PROGRESS"; rc=$?; } || : + + (( rc != 0 )) && error "Failed to download $VERSION, reason: $rc" && exit 60 + +fi + +[ ! -f "$ISO" ] && error "Failed to download $VERSION" && exit 61 + +SIZE=$(stat -c%s "$ISO") + +if ((SIZE<10000000)); then + error "Invalid ISO file: Size is smaller than 10 MB" && exit 62 fi info "Preparing ISO image for installation..." DIR="$TMP/unpack" -7z x "$TMP/$BASE" -o"$DIR" +rm -rf "$DIR" -if [[ "$ATTENDED" != [Yy1]* ]]; then - if [ -f "/run/assets/$VERSION.xml" ]; then +7z x "$ISO" -o"$DIR" - wimlib-imagex update "$DIR/sources/boot.wim" 2 \ - --command "add /run/assets/$VERSION.xml /autounattend.xml" +if [[ "$MANUAL" != [Yy1]* ]]; then + if [[ "$EXTERNAL" != [Yy1]* ]]; then + if [ -f "/run/assets/$VERSION.xml" ]; then + wimlib-imagex update "$DIR/sources/boot.wim" 2 \ + --command "add /run/assets/$VERSION.xml /autounattend.xml" + + fi fi fi +LABEL="${BASE%.*}" +LABEL="${LABEL::32}" + +ISO="$TMP/$LABEL.tmp" +rm -f "$ISO" + genisoimage -b boot/etfsboot.com -no-emul-boot -c BOOT.CAT -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames \ -v -V "$LABEL" -udf -boot-info-table -eltorito-alt-boot -eltorito-boot efi/microsoft/boot/efisys_noprompt.bin \ - -no-emul-boot -o "$TMP/$BASE.tmp" -allow-limited-size "$DIR" + -no-emul-boot -o "$ISO" -allow-limited-size "$DIR" + +mv "$ISO" "$STORAGE/$BASE" -mv "$TMP/$BASE.tmp" "$STORAGE/$BASE" rm -rf "$TMP" return 0 From babd608a2301c4323b251b73638a8c1c06aef0c6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Jan 2024 04:01:42 +0100 Subject: [PATCH 030/505] docs: Readme (#40) --- readme.md | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/readme.md b/readme.md index b241b38..18773ef 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -<h1 align="center">Windows in Docker<br /> +<h1 align="center">Windows Container<br /> <div align="center"> <img src="https://github.com/dockur/windows/raw/master/.github/logo.png" title="Logo" style="max-width:100%;" width="128" /> </div> @@ -114,23 +114,6 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w Replace the example path `/var/win` with the desired storage folder. - * ### How do I verify if my system supports KVM? - - To verify if your system supports KVM, run the following commands: - - ```bash - sudo apt install cpu-checker - sudo kvm-ok - ``` - - If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. - - * ### How do I view the screen? - - The container includes a web-based viewer, so you can visit [http://localhost:8006/](http://localhost:8006/) using any web browser to view the screen and interact with Windows via the keyboard and mouse. - - This is mainly for use during installation, as afterwards you can use Remote Desktop, TeamViewer or any other software you prefer. - * ### How do I perform a manual installation? If you prefer to perform the installation manually in order to customize some options, such as selecting another edition, add the following environment variable: @@ -169,6 +152,17 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w During the installation you will need to add some drivers as described in [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation) above. + * ### How do I verify if my system supports KVM? + + To verify if your system supports KVM, run the following commands: + + ```bash + sudo apt install cpu-checker + sudo kvm-ok + ``` + + If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. + * ### Is this project legal? Yes, this project contains only open-source code and does not distribute any copyrighted material. Neither does it try to circumvent any copyright protection measures. So under all applicable laws, this project would be considered legal. From c8f243f3573d1006e79a23f0d72a7b1edf885f5e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Jan 2024 04:09:31 +0100 Subject: [PATCH 031/505] docs: Readme (#41) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 18773ef..2ae0ca9 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -<h1 align="center">Windows Container<br /> +<h1 align="center">Windows<br /> <div align="center"> <img src="https://github.com/dockur/windows/raw/master/.github/logo.png" title="Logo" style="max-width:100%;" width="128" /> </div> From 5bd9da2baac25465161f243cbea199a81ca51278 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Jan 2024 16:32:20 +0100 Subject: [PATCH 032/505] docs: Disk pass-through (#43) --- readme.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/readme.md b/readme.md index 2ae0ca9..96c6d7a 100644 --- a/readme.md +++ b/readme.md @@ -152,6 +152,21 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w During the installation you will need to add some drivers as described in [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation) above. + * ### How do I pass-through a disk? + + It is possible to pass-through disk devices directly by adding them to your compose file in this way: + + ```yaml + environment: + DEVICE: "/dev/sda" + DEVICE2: "/dev/sdb" + devices: + - /dev/sda + - /dev/sdb + ``` + + Use ```DEVICE``` if you want it to become your main drive, and use ```DEVICE2``` and higher to add them as secondary drives. + * ### How do I verify if my system supports KVM? To verify if your system supports KVM, run the following commands: From 447c9cf53d4569cecc84a84f1aa549d894e92a87 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Jan 2024 20:30:52 +0100 Subject: [PATCH 033/505] build: Remove Python from image (#45) --- Dockerfile | 3 +-- src/entry.sh | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index cfc2067..c4fdcc8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,6 @@ ARG DEBCONF_NONINTERACTIVE_SEEN "true" RUN apt-get update \ && apt-get --no-install-recommends -y install \ curl \ - novnc \ swtpm \ wimtools \ p7zip-full \ @@ -23,7 +22,7 @@ ADD https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virt RUN chmod +x /run/*.sh -EXPOSE 3389 8006 +EXPOSE 8006 3389 VOLUME /storage ENV RAM_SIZE "4G" diff --git a/src/entry.sh b/src/entry.sh index e8051fc..5117a20 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -4,7 +4,6 @@ set -Eeuo pipefail echo "❯ Starting Windows for Docker v$(</run/version)..." echo "❯ For support visit https://github.com/dockur/windows" -export DISPLAY=web export BOOT_MODE=windows cd /run @@ -20,8 +19,9 @@ cd /run trap - ERR -ln -sfn /usr/share/novnc/vnc_lite.html /usr/share/novnc/index.html -websockify -D --web /usr/share/novnc/ 8006 localhost:5900 2>/dev/null +if [[ "${DISPLAY,,}" == "web" ]]; then + nginx -e stderr +fi mkdir -p /dev/shm/emulated_tpm swtpm socket -t -d --tpmstate dir=/dev/shm/emulated_tpm --ctrl \ From 4a8f55ec58cb6a683aa12fdd1db863fe243dc237 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Jan 2024 22:51:29 +0100 Subject: [PATCH 034/505] fix: Allow RDP login with blank passwords (#47) --- assets/win10x64.xml | 14 ++++++++++++-- assets/win11x64.xml | 14 ++++++++++++-- assets/win2016-eval.xml | 32 +++++++++++++++++++------------- assets/win2019-eval.xml | 32 +++++++++++++++++++------------- assets/win2022-eval.xml | 8 +++++++- assets/win81x64.xml | 6 ++++++ 6 files changed, 75 insertions(+), 31 deletions(-) diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 4485f30..ba395f8 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -1,6 +1,5 @@ <?xml version="1.0"?> <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> - <settings pass="offlineServicing"/> <settings pass="windowsPE"> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <SetupUILanguage> @@ -126,6 +125,11 @@ </DriverPaths> </component> </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> <settings pass="generalize"/> <settings pass="specialize"> <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -265,15 +269,21 @@ <SynchronousCommand wcm:action="add"> <Order>1</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 92e8b46..241b12d 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -1,6 +1,5 @@ <?xml version="1.0"?> <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> - <settings pass="offlineServicing"/> <settings pass="windowsPE"> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <SetupUILanguage> @@ -126,6 +125,11 @@ </DriverPaths> </component> </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> <settings pass="generalize"/> <settings pass="specialize"> <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -265,15 +269,21 @@ <SynchronousCommand wcm:action="add"> <Order>1</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index b0756d7..0a9c193 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -101,34 +101,34 @@ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DriverPaths> <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k16\amd64</Path> + <Path>D:\viostor\2k16\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k16\amd64</Path> + <Path>D:\NetKVM\2k16\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k16\amd64</Path> + <Path>D:\Balloon\2k16\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k16\amd64</Path> + <Path>D:\pvpanic\2k16\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k16\amd64</Path> + <Path>D:\qemupciserial\2k16\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k16\amd64</Path> + <Path>D:\qxldod\2k16\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k16\amd64</Path> + <Path>D:\vioinput\2k16\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k16\amd64</Path> + <Path>D:\viorng\2k16\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k16\amd64</Path> + <Path>D:\vioscsi\2k16\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k16\amd64</Path> + <Path>D:\vioserial\2k16\amd64</Path> </PathAndCredentials> </DriverPaths> </component> @@ -162,7 +162,7 @@ </component> <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> - </component> + </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <fDenyTSConnections>false</fDenyTSConnections> </component> @@ -177,7 +177,7 @@ <Profile>all</Profile> </FirewallGroup> </FirewallGroups> - </component> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -221,15 +221,21 @@ <SynchronousCommand wcm:action="add"> <Order>1</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index f3025bd..c9e4874 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -101,34 +101,34 @@ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DriverPaths> <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k19\amd64</Path> + <Path>D:\viostor\2k19\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k19\amd64</Path> + <Path>D:\NetKVM\2k19\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k19\amd64</Path> + <Path>D:\Balloon\2k19\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k19\amd64</Path> + <Path>D:\pvpanic\2k19\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k19\amd64</Path> + <Path>D:\qemupciserial\2k19\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k19\amd64</Path> + <Path>D:\qxldod\2k19\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k19\amd64</Path> + <Path>D:\vioinput\2k19\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k19\amd64</Path> + <Path>D:\viorng\2k19\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k19\amd64</Path> + <Path>D:\vioscsi\2k19\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k19\amd64</Path> + <Path>D:\vioserial\2k19\amd64</Path> </PathAndCredentials> </DriverPaths> </component> @@ -162,7 +162,7 @@ </component> <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> - </component> + </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <fDenyTSConnections>false</fDenyTSConnections> </component> @@ -177,7 +177,7 @@ <Profile>all</Profile> </FirewallGroup> </FirewallGroups> - </component> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -221,15 +221,21 @@ <SynchronousCommand wcm:action="add"> <Order>1</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 4ded85c..7a68da3 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -221,15 +221,21 @@ <SynchronousCommand wcm:action="add"> <Order>1</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index e0f8857..db364f2 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -194,9 +194,15 @@ <SynchronousCommand wcm:action="add"> <Order>1</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> From 5a56b717c4bed72db322946845509a52537a3c00 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 18 Jan 2024 10:32:39 +0100 Subject: [PATCH 035/505] feat: Move TPM emulator (#49) --- Dockerfile | 3 +-- src/entry.sh | 4 ---- src/install.sh | 3 --- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index c4fdcc8..2da6365 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,9 +7,8 @@ ARG DEBCONF_NONINTERACTIVE_SEEN "true" RUN apt-get update \ && apt-get --no-install-recommends -y install \ curl \ - swtpm \ + 7zip \ wimtools \ - p7zip-full \ genisoimage \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/src/entry.sh b/src/entry.sh index 5117a20..9cf43cf 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -23,10 +23,6 @@ if [[ "${DISPLAY,,}" == "web" ]]; then nginx -e stderr fi -mkdir -p /dev/shm/emulated_tpm -swtpm socket -t -d --tpmstate dir=/dev/shm/emulated_tpm --ctrl \ - type=unixio,path=/dev/shm/emulated_tpm/swtpm-sock --log level=1 --tpm2 - info "Booting Windows using $VERS..." [[ "$DEBUG" == [Yy1]* ]] && set -x diff --git a/src/install.sh b/src/install.sh index 7761289..9538230 100644 --- a/src/install.sh +++ b/src/install.sh @@ -5,9 +5,6 @@ set -Eeuo pipefail : "${EXTERNAL:="N"}" : "${VERSION:="win11x64"}" -ARGUMENTS="-chardev socket,id=chrtpm,path=/dev/shm/emulated_tpm/swtpm-sock $ARGUMENTS" -ARGUMENTS="-tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 $ARGUMENTS" - [[ "${VERSION,,}" == "http"* ]] && EXTERNAL="Y" [[ "${VERSION,,}" == "11" ]] && VERSION="win11x64" From 82bccfc43de73a8e1930f8a3524e8133b8ba223a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 18 Jan 2024 19:11:59 +0100 Subject: [PATCH 036/505] feat: Disable hardware checks (#52) --- assets/win11x64.xml | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 241b12d..300496a 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -89,6 +89,24 @@ <AcceptEula>true</AcceptEula> </UserData> <EnableFirewall>false</EnableFirewall> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\MoSetup" /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> </component> <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DriverPaths> @@ -264,6 +282,7 @@ <ProtectYourPC>3</ProtectYourPC> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> </OOBE> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> @@ -278,12 +297,20 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>6</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> From 5137d513fc9fe26bf8a6ab4ee08c89754f292646 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 19 Jan 2024 01:25:39 +0100 Subject: [PATCH 037/505] feat: Support more image layouts (#54) --- readme.md | 20 +++--- src/entry.sh | 3 +- src/install.sh | 174 +++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 166 insertions(+), 31 deletions(-) diff --git a/readme.md b/readme.md index 96c6d7a..da456c8 100644 --- a/readme.md +++ b/readme.md @@ -73,13 +73,15 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w Select from the values below: - - ```win11``` (Windows 11) - - ```win10``` (Windows 10) - - ```win81``` (Windows 8.1) - - ```win22``` (Windows Server 2022) - - ```win19``` (Windows Server 2019) - - ```win16``` (Windows Server 2016) - + - ```win11``` = Windows 11 + - ```win10``` = Windows 10 + - ```win81``` = Windows 8.1 + - ```win22``` = Windows Server 2022 + - ```win19``` = Windows Server 2019 + - ```win16``` = Windows Server 2016 + - ```tiny11``` = Tiny11 (Slow download) + - ```tiny10``` = Tiny10 (Slow download) + * ### How do I increase the amount of CPU or RAM? By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. @@ -143,14 +145,14 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w * ### How do I install an unsupported version? - You can specify an URL in the `VERSION` environment variable, in order to download a custom ISO file: + You can specify an URL in the `VERSION` environment variable, in order to download a custom ISO image: ```yaml environment: VERSION: "https://example.com/win.iso" ``` - During the installation you will need to add some drivers as described in [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation) above. + During the installation you may need to add some drivers as described in [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation) above. * ### How do I pass-through a disk? diff --git a/src/entry.sh b/src/entry.sh index 9cf43cf..aa6f1ec 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -3,6 +3,7 @@ set -Eeuo pipefail echo "❯ Starting Windows for Docker v$(</run/version)..." echo "❯ For support visit https://github.com/dockur/windows" +echo export BOOT_MODE=windows @@ -23,7 +24,7 @@ if [[ "${DISPLAY,,}" == "web" ]]; then nginx -e stderr fi -info "Booting Windows using $VERS..." +echo && info "Booting Windows using $VERS..." [[ "$DEBUG" == [Yy1]* ]] && set -x exec qemu-system-x86_64 ${ARGS:+ $ARGS} diff --git a/src/install.sh b/src/install.sh index 9538230..bfbb583 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1,12 +1,10 @@ #!/usr/bin/env bash set -Eeuo pipefail -: "${MANUAL:="N"}" -: "${EXTERNAL:="N"}" +: "${MANUAL:=""}" +: "${EXTERNAL:=""}" : "${VERSION:="win11x64"}" -[[ "${VERSION,,}" == "http"* ]] && EXTERNAL="Y" - [[ "${VERSION,,}" == "11" ]] && VERSION="win11x64" [[ "${VERSION,,}" == "win11" ]] && VERSION="win11x64" @@ -34,6 +32,20 @@ set -Eeuo pipefail [[ "${VERSION,,}" == "win16" ]] && VERSION="win2016-eval" [[ "${VERSION,,}" == "win2016" ]] && VERSION="win2016-eval" +if [[ "${VERSION,,}" == "tiny10" ]]; then + VERSION="https://archive.org/download/tiny-10-23-h2/tiny10%20x64%2023h2.iso" +fi + +if [[ "${VERSION,,}" == "tiny11" ]]; then + VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" +fi + +if [[ "${VERSION,,}" == "http"* ]]; then + EXTERNAL="Y" +else + EXTERNAL="N" +fi + MSG="Please wait while Windows is being started..." if [ ! -f "$STORAGE/custom.iso" ]; then @@ -72,7 +84,8 @@ fi [ -f "$STORAGE/$BASE" ] && return 0 TMP="$STORAGE/tmp" -rm -rf "$TMP" && mkdir -p "$TMP" +rm -rf "$TMP" +mkdir -p "$TMP" ISO="$TMP/$BASE" rm -f "$ISO" @@ -102,48 +115,167 @@ else { wget "$VERSION" -O "$ISO" -q --no-check-certificate --show-progress "$PROGRESS"; rc=$?; } || : - (( rc != 0 )) && error "Failed to download $VERSION, reason: $rc" && exit 60 + (( rc != 0 )) && echo && error "Failed to download $VERSION, reason: $rc" && exit 60 fi -[ ! -f "$ISO" ] && error "Failed to download $VERSION" && exit 61 +[ ! -f "$ISO" ] && echo && error "Failed to download $VERSION" && exit 61 SIZE=$(stat -c%s "$ISO") if ((SIZE<10000000)); then - error "Invalid ISO file: Size is smaller than 10 MB" && exit 62 + echo && error "Invalid ISO file: Size is smaller than 10 MB" && exit 62 fi -info "Preparing ISO image for installation..." +echo && info "Extracting downloaded ISO image..." DIR="$TMP/unpack" rm -rf "$DIR" -7z x "$ISO" -o"$DIR" +7z x "$ISO" -o"$DIR" > /dev/null +echo + +XML="" +FB="falling back to manual installation!" + +if [ -z "$MANUAL" ]; then + + MANUAL="N" + + if [[ "$EXTERNAL" == [Yy1]* ]]; then + [[ "${BASE,,}" == "tiny10"* ]] && MANUAL="Y" + fi + +fi if [[ "$MANUAL" != [Yy1]* ]]; then if [[ "$EXTERNAL" != [Yy1]* ]]; then - if [ -f "/run/assets/$VERSION.xml" ]; then - wimlib-imagex update "$DIR/sources/boot.wim" 2 \ - --command "add /run/assets/$VERSION.xml /autounattend.xml" + XML="$VERSION.xml" + else + + info "Detecting Windows version from ISO image..." + + LOC="$DIR/sources/install.wim" + [ ! -f "$LOC" ] && LOC="$DIR/sources/install.esd" + + if [ -f "$LOC" ]; then + + DETECTED="" + TAG="DISPLAYNAME" + RESULT=$(wimlib-imagex info -xml "$LOC" | tr -d '\000') + NAME=$(sed -n "/$TAG/{s/.*<$TAG>\(.*\)<\/$TAG>.*/\1/;p}" <<< "$RESULT") + + if [ -z "$NAME" ]; then + TAG="PRODUCTNAME" + NAME=$(sed -n "/$TAG/{s/.*<$TAG>\(.*\)<\/$TAG>.*/\1/;p}" <<< "$RESULT") + fi + + [[ "${NAME,,}" == "windows 11"* ]] && DETECTED="win11x64" + [[ "${NAME,,}" == "windows 10"* ]] && DETECTED="win10x64" + [[ "${NAME,,}" == "windows 8"* ]] && DETECTED="win81x64" + [[ "${NAME,,}" == *"server 2022"* ]] && DETECTED="win2022-eval" + [[ "${NAME,,}" == *"server 2019"* ]] && DETECTED="win2019-eval" + [[ "${NAME,,}" == *"server 2016"* ]] && DETECTED="win2016-eval" + + if [ -n "$DETECTED" ]; then + + XML="$DETECTED.xml" + echo "Detected image of type '$DETECTED', will apply autounattend.xml file." + + else + if [ -z "$NAME" ]; then + error "Warning: failed to detect Windows version from image, $FB" + else + if [[ "${NAME,,}" == "windows 7" ]]; then + error "Warning: detected Windows 7 image, $FB" + else + error "Warning: failed to detect Windows version from string '$NAME', $FB" + fi + fi + fi + else + error "Warning: failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" fi + echo fi fi -LABEL="${BASE%.*}" -LABEL="${LABEL::32}" +ASSET="/run/assets/$XML" -ISO="$TMP/$LABEL.tmp" -rm -f "$ISO" +if [ -f "$ASSET" ]; then -genisoimage -b boot/etfsboot.com -no-emul-boot -c BOOT.CAT -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames \ - -v -V "$LABEL" -udf -boot-info-table -eltorito-alt-boot -eltorito-boot efi/microsoft/boot/efisys_noprompt.bin \ - -no-emul-boot -o "$ISO" -allow-limited-size "$DIR" + LOC="$DIR/sources/boot.wim" + [ ! -f "$LOC" ] && LOC="$DIR/sources/boot.esd" + + if [ -f "$LOC" ]; then + + info "Adding XML file for automatic installation..." + + RESULT=$(wimlib-imagex info -xml "$LOC" | tr -d '\000') + + if [[ "${RESULT^^}" == *"<IMAGE INDEX=\"2\">"* ]]; then + INDEX="2" + else + INDEX="1" + fi + + wimlib-imagex update "$LOC" "$INDEX" --command "add $ASSET /autounattend.xml" > /dev/null + + else + error "Warning: failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" + fi + + LOC="$DIR/autounattend.xml" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/Autounattend.xml" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/AutoUnattend.xml" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/autounattend.XML" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/Autounattend.XML" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/AutoUnattend.XML" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/AUTOUNATTEND.xml" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/AUTOUNATTEND.XML" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + + echo + +else + [ -n "$XML" ] && error "Warning: XML file '$XML' does not exist, $FB" && echo +fi + +info "Generating new ISO image for installation..." + +ETFS="boot/etfsboot.com" +EFISYS="efi/microsoft/boot/efisys_noprompt.bin" + +if [ -f "$DIR/$ETFS" ]; then + if [ -f "$DIR/$EFISYS" ]; then + + CAT="BOOT.CAT" + LABEL="${BASE%.*}" + LABEL="${LABEL::32}" + ISO="$TMP/$LABEL.tmp" + rm -f "$ISO" + + genisoimage -b "$ETFS" -no-emul-boot -c "$CAT" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -quiet -V "$LABEL" -udf \ + -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$ISO" -allow-limited-size "$DIR" + + else + error "Failed to locate file 'efisys_noprompt.bin' in ISO image, $FB" + fi +else + error "Failed to locate file 'etfsboot.com' in ISO image, $FB" +fi mv "$ISO" "$STORAGE/$BASE" - rm -rf "$TMP" +echo return 0 From 245b3fc019642f1f2b47918f67a4aa22bcf4860d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 19 Jan 2024 04:28:03 +0100 Subject: [PATCH 038/505] fix: Sanitize filename (#55) --- src/install.sh | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/install.sh b/src/install.sh index bfbb583..06f0761 100644 --- a/src/install.sh +++ b/src/install.sh @@ -48,16 +48,22 @@ fi MSG="Please wait while Windows is being started..." -if [ ! -f "$STORAGE/custom.iso" ]; then +BASE="custom.iso" +if [ ! -f "$STORAGE/$BASE" ]; then + if [[ "$EXTERNAL" != [Yy1]* ]]; then - if [ ! -f "$STORAGE/$VERSION.iso" ]; then + BASE="$VERSION.iso" + if [ ! -f "$STORAGE/$BASE" ]; then MSG="Please wait while Windows is being downloaded..." fi else - BASE=$(basename "$VERSION") + BASE=$(basename "${VERSION%%\?*}") + : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" + BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') + if [ ! -f "$STORAGE/$BASE" ]; then MSG="Please wait while '$BASE' is being downloaded..." fi @@ -68,19 +74,6 @@ fi # Display wait message /run/server.sh "Windows" "$MSG" & -BASE="custom.iso" -[ -f "$STORAGE/$BASE" ] && return 0 - -if [[ "$EXTERNAL" != [Yy1]* ]]; then - - BASE="$VERSION.iso" - -else - - BASE=$(basename "$VERSION") - -fi - [ -f "$STORAGE/$BASE" ] && return 0 TMP="$STORAGE/tmp" @@ -250,8 +243,6 @@ else [ -n "$XML" ] && error "Warning: XML file '$XML' does not exist, $FB" && echo fi -info "Generating new ISO image for installation..." - ETFS="boot/etfsboot.com" EFISYS="efi/microsoft/boot/efisys_noprompt.bin" @@ -264,6 +255,8 @@ if [ -f "$DIR/$ETFS" ]; then ISO="$TMP/$LABEL.tmp" rm -f "$ISO" + info "Generating new ISO image for installation..." + genisoimage -b "$ETFS" -no-emul-boot -c "$CAT" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -quiet -V "$LABEL" -udf \ -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$ISO" -allow-limited-size "$DIR" From 42b412704c24a85bfe976740724f3dfc11a75e1d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 19 Jan 2024 04:31:20 +0100 Subject: [PATCH 039/505] docs: Readme (#56) --- readme.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/readme.md b/readme.md index da456c8..1759c38 100644 --- a/readme.md +++ b/readme.md @@ -79,8 +79,6 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w - ```win22``` = Windows Server 2022 - ```win19``` = Windows Server 2019 - ```win16``` = Windows Server 2016 - - ```tiny11``` = Tiny11 (Slow download) - - ```tiny10``` = Tiny10 (Slow download) * ### How do I increase the amount of CPU or RAM? From 6e24a2ae511e28526aed9e0b1f50c7ea5c5abafc Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 19 Jan 2024 08:12:16 +0100 Subject: [PATCH 040/505] docs: Readme (#57) --- readme.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 1759c38..af8926d 100644 --- a/readme.md +++ b/readme.md @@ -60,7 +60,9 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w - Sit back and relax while the magic happens, the whole installation will be performed fully automatic. - - Once you see the desktop, your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! + - Once you see the desktop, your Windows installation is ready for use. + + - Enjoy your brand new machine, and don't forget to star this repo! * ### How do I select the Windows version? From a2cc998c600affe56f1e7834ba508add05747288 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 19 Jan 2024 15:18:56 +0100 Subject: [PATCH 041/505] feat: Show warnings (#58) --- src/install.sh | 63 ++++++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/src/install.sh b/src/install.sh index 06f0761..d4f76ec 100644 --- a/src/install.sh +++ b/src/install.sh @@ -128,8 +128,20 @@ rm -rf "$DIR" 7z x "$ISO" -o"$DIR" > /dev/null echo -XML="" FB="falling back to manual installation!" +ETFS="boot/etfsboot.com" +EFISYS="efi/microsoft/boot/efisys_noprompt.bin" + +if [ ! -f "$DIR/$ETFS" ] || [ ! -f "$DIR/$EFISYS" ]; then + if [ ! -f "$DIR/$ETFS" ]; then + warn "failed to locate file 'etfsboot.com' in ISO image, $FB" + else + warn "failed to locate file 'efisys_noprompt.bin' in ISO image, $FB" + fi + mv "$ISO" "$STORAGE/$BASE" + rm -rf "$TMP" + echo && return 0 +fi if [ -z "$MANUAL" ]; then @@ -141,6 +153,8 @@ if [ -z "$MANUAL" ]; then fi +XML="" + if [[ "$MANUAL" != [Yy1]* ]]; then if [[ "$EXTERNAL" != [Yy1]* ]]; then @@ -179,17 +193,17 @@ if [[ "$MANUAL" != [Yy1]* ]]; then else if [ -z "$NAME" ]; then - error "Warning: failed to detect Windows version from image, $FB" + warn "failed to detect Windows version from image, $FB" else if [[ "${NAME,,}" == "windows 7" ]]; then - error "Warning: detected Windows 7 image, $FB" + warn "detected Windows 7 image, $FB" else - error "Warning: failed to detect Windows version from string '$NAME', $FB" + warn "failed to detect Windows version from string '$NAME', $FB" fi fi fi else - error "Warning: failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" + warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" fi echo fi @@ -217,7 +231,7 @@ if [ -f "$ASSET" ]; then wimlib-imagex update "$LOC" "$INDEX" --command "add $ASSET /autounattend.xml" > /dev/null else - error "Warning: failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" + warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" fi LOC="$DIR/autounattend.xml" @@ -240,33 +254,22 @@ if [ -f "$ASSET" ]; then echo else - [ -n "$XML" ] && error "Warning: XML file '$XML' does not exist, $FB" && echo -fi - -ETFS="boot/etfsboot.com" -EFISYS="efi/microsoft/boot/efisys_noprompt.bin" - -if [ -f "$DIR/$ETFS" ]; then - if [ -f "$DIR/$EFISYS" ]; then - - CAT="BOOT.CAT" - LABEL="${BASE%.*}" - LABEL="${LABEL::32}" - ISO="$TMP/$LABEL.tmp" - rm -f "$ISO" - - info "Generating new ISO image for installation..." - - genisoimage -b "$ETFS" -no-emul-boot -c "$CAT" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -quiet -V "$LABEL" -udf \ - -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$ISO" -allow-limited-size "$DIR" - - else - error "Failed to locate file 'efisys_noprompt.bin' in ISO image, $FB" + if [ -n "$XML" ]; then + warn "XML file '$XML' does not exist, $FB" && echo fi -else - error "Failed to locate file 'etfsboot.com' in ISO image, $FB" fi +CAT="BOOT.CAT" +LABEL="${BASE%.*}" +LABEL="${LABEL::30}" +ISO="$TMP/$LABEL.tmp" +rm -f "$ISO" + +info "Generating new ISO image for installation..." + +genisoimage -b "$ETFS" -no-emul-boot -c "$CAT" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -quiet -V "$LABEL" -udf \ + -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$ISO" -allow-limited-size "$DIR" + mv "$ISO" "$STORAGE/$BASE" rm -rf "$TMP" From 6566d249fc04017f9a0007586833a213c01a9f39 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 19 Jan 2024 21:29:03 +0100 Subject: [PATCH 042/505] feat: Use Virtiso image for drivers (#59) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2da6365..df157cd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,8 +16,8 @@ RUN apt-get update \ COPY ./src /run/ COPY ./assets /run/assets +ADD https://github.com/qemus/virtiso/raw/master/virtio-win.iso /run/drivers.iso ADD https://raw.githubusercontent.com/ElliotKillick/Mido/main/Mido.sh /run/mido.sh -ADD https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso /run/drivers.iso RUN chmod +x /run/*.sh From accd1799d269582f188e0e5feb3ef791803b947f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 20 Jan 2024 17:03:59 +0100 Subject: [PATCH 043/505] feat: Display progress via web (#61) --- src/entry.sh | 12 +++--------- src/install.sh | 23 ++++++++++++++--------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/entry.sh b/src/entry.sh index aa6f1ec..17d3009 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -1,11 +1,9 @@ #!/usr/bin/env bash set -Eeuo pipefail -echo "❯ Starting Windows for Docker v$(</run/version)..." -echo "❯ For support visit https://github.com/dockur/windows" -echo - +APP="Windows" export BOOT_MODE=windows +SUPPORT="https://github.com/dockur/windows" cd /run @@ -20,11 +18,7 @@ cd /run trap - ERR -if [[ "${DISPLAY,,}" == "web" ]]; then - nginx -e stderr -fi - -echo && info "Booting Windows using $VERS..." +info "Booting $APP using $VERS..." [[ "$DEBUG" == [Yy1]* ]] && set -x exec qemu-system-x86_64 ${ARGS:+ $ARGS} diff --git a/src/install.sh b/src/install.sh index d4f76ec..2fe7e90 100644 --- a/src/install.sh +++ b/src/install.sh @@ -46,7 +46,7 @@ else EXTERNAL="N" fi -MSG="Please wait while Windows is being started..." +MSG="Windows is being started, please wait..." BASE="custom.iso" if [ ! -f "$STORAGE/$BASE" ]; then @@ -55,7 +55,7 @@ if [ ! -f "$STORAGE/$BASE" ]; then BASE="$VERSION.iso" if [ ! -f "$STORAGE/$BASE" ]; then - MSG="Please wait while Windows is being downloaded..." + MSG="Windows is being downloaded, please wait..." fi else @@ -65,14 +65,13 @@ if [ ! -f "$STORAGE/$BASE" ]; then BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') if [ ! -f "$STORAGE/$BASE" ]; then - MSG="Please wait while '$BASE' is being downloaded..." + MSG="Image '$BASE' is being downloaded, please wait..." fi fi fi -# Display wait message -/run/server.sh "Windows" "$MSG" & +html "$MSG" [ -f "$STORAGE/$BASE" ] && return 0 @@ -120,7 +119,8 @@ if ((SIZE<10000000)); then echo && error "Invalid ISO file: Size is smaller than 10 MB" && exit 62 fi -echo && info "Extracting downloaded ISO image..." +MSG="Extracting downloaded ISO image..." +echo && info "$MSG" && html "$MSG" DIR="$TMP/unpack" rm -rf "$DIR" @@ -162,7 +162,8 @@ if [[ "$MANUAL" != [Yy1]* ]]; then else - info "Detecting Windows version from ISO image..." + MSG="Detecting Windows version from ISO image..." + info "$MSG" && html "$MSG" LOC="$DIR/sources/install.wim" [ ! -f "$LOC" ] && LOC="$DIR/sources/install.esd" @@ -218,7 +219,8 @@ if [ -f "$ASSET" ]; then if [ -f "$LOC" ]; then - info "Adding XML file for automatic installation..." + MSG="Adding XML file for automatic installation..." + info "$MSG" && html "$MSG" RESULT=$(wimlib-imagex info -xml "$LOC" | tr -d '\000') @@ -265,7 +267,8 @@ LABEL="${LABEL::30}" ISO="$TMP/$LABEL.tmp" rm -f "$ISO" -info "Generating new ISO image for installation..." +MSG="Generating new ISO image for installation..." +info "$MSG" && html "$MSG" genisoimage -b "$ETFS" -no-emul-boot -c "$CAT" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -quiet -V "$LABEL" -udf \ -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$ISO" -allow-limited-size "$DIR" @@ -273,5 +276,7 @@ genisoimage -b "$ETFS" -no-emul-boot -c "$CAT" -iso-level 4 -J -l -D -N -joliet- mv "$ISO" "$STORAGE/$BASE" rm -rf "$TMP" +html "Successfully prepared image for installation..." + echo return 0 From f381f9ebbfcfa64cc320f112ad1c65d77077055b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 02:56:28 +0100 Subject: [PATCH 044/505] feat: Improved installation (#63) --- Dockerfile | 3 - readme.md | 10 +- src/install.sh | 160 +++++++---- src/mido.sh | 766 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 869 insertions(+), 70 deletions(-) create mode 100644 src/mido.sh diff --git a/Dockerfile b/Dockerfile index df157cd..d2a8dd6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,10 +15,7 @@ RUN apt-get update \ COPY ./src /run/ COPY ./assets /run/assets - ADD https://github.com/qemus/virtiso/raw/master/virtio-win.iso /run/drivers.iso -ADD https://raw.githubusercontent.com/ElliotKillick/Mido/main/Mido.sh /run/mido.sh - RUN chmod +x /run/*.sh EXPOSE 8006 3389 diff --git a/readme.md b/readme.md index af8926d..336d9c4 100644 --- a/readme.md +++ b/readme.md @@ -56,7 +56,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w - Start the container and get some coffee. - - Connect to port 8006 of the container in your web browser. + - Connect to [port 8006](http://localhost:8006) of the container in your web browser. - Sit back and relax while the magic happens, the whole installation will be performed fully automatic. @@ -127,7 +127,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w Then follow these steps: - - Start the container and connect to port 8006 of the container in your web browser. After the download is finished, you will see the Windows installation screen. + - Start the container and connect to [port 8006](http://localhost:8006) of the container in your web browser. After the download is finished, you will see the Windows installation screen. - Start the installation by clicking ```Install now```. On the next screen, press 'OK' when prompted to ```Load driver``` and select the ```VirtIO SCSI``` driver from the list that matches your Windows version. So for Windows 11, select ```D:\amd64\w11\vioscsi.inf``` and click 'Next'. @@ -143,16 +143,16 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w - Now your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! - * ### How do I install an unsupported version? + * ### How do I install a custom image? - You can specify an URL in the `VERSION` environment variable, in order to download a custom ISO image: + In order to download a custom ISO image, specify an URL in the `VERSION` environment variable: ```yaml environment: VERSION: "https://example.com/win.iso" ``` - During the installation you may need to add some drivers as described in [manual installation](https://github.com/dockur/windows/tree/master?tab=readme-ov-file#how-do-i-perform-a-manual-installation) above. + Make sure your `/storage` folder is empty before starting the container. Alternatively, you can also place a file called `custom.iso` in that folder to skip the download. * ### How do I pass-through a disk? diff --git a/src/install.sh b/src/install.sh index 2fe7e90..1e57ecd 100644 --- a/src/install.sh +++ b/src/install.sh @@ -2,7 +2,6 @@ set -Eeuo pipefail : "${MANUAL:=""}" -: "${EXTERNAL:=""}" : "${VERSION:="win11x64"}" [[ "${VERSION,,}" == "11" ]] && VERSION="win11x64" @@ -48,78 +47,104 @@ fi MSG="Windows is being started, please wait..." -BASE="custom.iso" -if [ ! -f "$STORAGE/$BASE" ]; then +if [[ "$EXTERNAL" != [Yy1]* ]]; then - if [[ "$EXTERNAL" != [Yy1]* ]]; then - - BASE="$VERSION.iso" - if [ ! -f "$STORAGE/$BASE" ]; then - MSG="Windows is being downloaded, please wait..." - fi - - else - - BASE=$(basename "${VERSION%%\?*}") - : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" - BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') - - if [ ! -f "$STORAGE/$BASE" ]; then - MSG="Image '$BASE' is being downloaded, please wait..." - fi + BASE="$VERSION.iso" + if [ ! -f "$STORAGE/$BASE" ]; then + MSG="Windows is being downloaded, please wait..." fi + +else + + BASE=$(basename "${VERSION%%\?*}") + : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" + BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') + + if [ ! -f "$STORAGE/$BASE" ]; then + MSG="Image '$BASE' is being downloaded, please wait..." + fi + fi +[[ "${BASE,,}" == "custom."* ]] && BASE="target.iso" + html "$MSG" - -[ -f "$STORAGE/$BASE" ] && return 0 - TMP="$STORAGE/tmp" -rm -rf "$TMP" + +if [ -f "$STORAGE/$BASE" ]; then + rm -rf "$TMP" + return 0 +fi + mkdir -p "$TMP" ISO="$TMP/$BASE" rm -f "$ISO" -if [[ "$EXTERNAL" != [Yy1]* ]]; then +CUSTOM="custom.iso" - SCRIPT="$TMP/mido.sh" - - rm -f "$SCRIPT" - cp /run/mido.sh "$SCRIPT" - chmod +x "$SCRIPT" - cd "$TMP" - bash "$SCRIPT" "$VERSION" - rm -f "$SCRIPT" - cd /run +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.img" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.iso" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.img" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.ISO" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.IMG" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="CUSTOM.ISO" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="CUSTOM.IMG" +if [ ! -f "$STORAGE/$CUSTOM" ]; then + CUSTOM="" else - - info "Downloading $BASE as boot image..." - - # Check if running with interactive TTY or redirected to docker log - if [ -t 1 ]; then - PROGRESS="--progress=bar:noscroll" - else - PROGRESS="--progress=dot:giga" - fi - - { wget "$VERSION" -O "$ISO" -q --no-check-certificate --show-progress "$PROGRESS"; rc=$?; } || : - - (( rc != 0 )) && echo && error "Failed to download $VERSION, reason: $rc" && exit 60 - + ISO="$STORAGE/$CUSTOM" fi -[ ! -f "$ISO" ] && echo && error "Failed to download $VERSION" && exit 61 +if [ ! -f "$ISO" ]; then + if [[ "$EXTERNAL" != [Yy1]* ]]; then + + cd "$TMP" + /run/mido.sh "$VERSION" + cd /run + + else + + info "Downloading $BASE as boot image..." + + # Check if running with interactive TTY or redirected to docker log + if [ -t 1 ]; then + PROGRESS="--progress=bar:noscroll" + else + PROGRESS="--progress=dot:giga" + fi + + { wget "$VERSION" -O "$ISO" -q --no-check-certificate --show-progress "$PROGRESS"; rc=$?; } || : + + (( rc != 0 )) && echo && error "Failed to download $VERSION, reason: $rc" && exit 60 + + fi + + [ ! -f "$ISO" ] && echo && error "Failed to download $VERSION" && exit 61 +fi SIZE=$(stat -c%s "$ISO") +SIZE_GB=$(( (SIZE + 1073741823)/1073741824 )) if ((SIZE<10000000)); then echo && error "Invalid ISO file: Size is smaller than 10 MB" && exit 62 fi -MSG="Extracting downloaded ISO image..." +SPACE=$(df --output=avail -B 1 "$TMP" | tail -n 1) +SPACE_GB=$(( (SPACE + 1073741823)/1073741824 )) + +if (( SIZE > SPACE )); then + error "Not enough free space in $STORAGE, have $SPACE_GB GB available but need at least $SIZE_GB GB." && exit 63 +fi + +if [ -n "$CUSTOM" ]; then + MSG="Extracting custom ISO image..." +else + MSG="Extracting downloaded ISO image..." +fi + echo && info "$MSG" && html "$MSG" DIR="$TMP/unpack" @@ -138,11 +163,13 @@ if [ ! -f "$DIR/$ETFS" ] || [ ! -f "$DIR/$EFISYS" ]; then else warn "failed to locate file 'efisys_noprompt.bin' in ISO image, $FB" fi - mv "$ISO" "$STORAGE/$BASE" + mv -f "$ISO" "$STORAGE/$BASE" rm -rf "$TMP" echo && return 0 fi +[ -z "$CUSTOM" ] && rm -f "$ISO" + if [ -z "$MANUAL" ]; then MANUAL="N" @@ -156,11 +183,10 @@ fi XML="" if [[ "$MANUAL" != [Yy1]* ]]; then - if [[ "$EXTERNAL" != [Yy1]* ]]; then - XML="$VERSION.xml" + [[ "$EXTERNAL" != [Yy1]* ]] && XML="$VERSION.xml" - else + if [ ! -f "/run/assets/$XML" ]; then MSG="Detecting Windows version from ISO image..." info "$MSG" && html "$MSG" @@ -190,7 +216,12 @@ if [[ "$MANUAL" != [Yy1]* ]]; then if [ -n "$DETECTED" ]; then XML="$DETECTED.xml" - echo "Detected image of type '$DETECTED', will apply autounattend.xml file." + + if [ -f "/run/assets/$XML" ]; then + echo "Detected image of type '$DETECTED', will apply an autounattend.xml file." + else + warn "detected image of type '$DETECTED', but no matching .xml file exists, $FB." + fi else if [ -z "$NAME" ]; then @@ -255,25 +286,30 @@ if [ -f "$ASSET" ]; then echo -else - if [ -n "$XML" ]; then - warn "XML file '$XML' does not exist, $FB" && echo - fi fi CAT="BOOT.CAT" LABEL="${BASE%.*}" LABEL="${LABEL::30}" -ISO="$TMP/$LABEL.tmp" -rm -f "$ISO" +OUT="$TMP/$LABEL.tmp" +rm -f "$OUT" + +SPACE=$(df --output=avail -B 1 "$TMP" | tail -n 1) +SPACE_GB=$(( (SPACE + 1073741823)/1073741824 )) + +if (( SIZE > SPACE )); then + error "Not enough free space in $STORAGE, have $SPACE_GB GB available but need at least $SIZE_GB GB." && exit 63 +fi MSG="Generating new ISO image for installation..." info "$MSG" && html "$MSG" genisoimage -b "$ETFS" -no-emul-boot -c "$CAT" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -quiet -V "$LABEL" -udf \ - -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$ISO" -allow-limited-size "$DIR" + -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$OUT" -allow-limited-size "$DIR" -mv "$ISO" "$STORAGE/$BASE" +[ -n "$CUSTOM" ] && rm -f "$STORAGE/$CUSTOM" + +mv "$OUT" "$STORAGE/$BASE" rm -rf "$TMP" html "Successfully prepared image for installation..." diff --git a/src/mido.sh b/src/mido.sh new file mode 100644 index 0000000..bab64b2 --- /dev/null +++ b/src/mido.sh @@ -0,0 +1,766 @@ +#!/bin/sh + +# Copyright (C) 2024 Elliot Killick <contact@elliotkillick.com> +# Licensed under the MIT License. See LICENSE file for details. + +[ "$DEBUG" ] && set -x + +# Prefer Dash shell for greater security if available +if [ "$BASH" ] && command -v dash > /dev/null; then + exec dash "$0" "$@" +fi + +# Test for 4-bit color (16 colors) +# Operand "colors" is undefined by POSIX +# If the operand doesn't exist, the terminal probably doesn't support color and the program will continue normally without it +if [ "0$(tput colors 2> /dev/null)" -ge 16 ]; then + RED='\033[0;31m' + BLUE='\033[0;34m' + GREEN='\033[0;32m' + NC='\033[0m' +fi + +# Avoid printing messages as potential terminal escape sequences +echo_ok() { printf "%b%s%b" "${GREEN}[+]${NC} " "$1" "\n" >&2; } +echo_info() { printf "%b%s%b" "${BLUE}[i]${NC} " "$1" "\n" >&2; } +echo_err() { printf "%b%s%b" "${RED}[!]${NC} " "$1" "\n" >&2; } + +# https://pubs.opengroup.org/onlinepubs/9699919799/utilities/fold.html +format() { fold -s; } + +word_count() { echo $#; } + +usage() { + echo "Mido - The Secure Microsoft Windows Downloader" + echo "" + echo "Usage: $0 <windows_media>..." + echo "" + echo "Download specified list of Windows media." + echo "" + echo "Specify \"all\", or one or more of the following Windows media:" + echo " win7x64-ultimate" + echo " win81x64" + echo " win10x64" + echo " win11x64" + echo " win81x64-enterprise-eval" + echo " win10x64-enterprise-eval" + echo " win11x64-enterprise-eval" + echo " win10x64-enterprise-ltsc-eval (most secure)" + echo " win2008r2" + echo " win2012r2-eval" + echo " win2016-eval" + echo " win2019-eval" + echo " win2022-eval" + echo "" + echo "Each ISO download takes between 3 - 7 GiBs (average: 5 GiBs)." + echo "" + echo "Updates" + echo "-------" + echo "All the downloads provided here are the most up-to-date releases that Microsoft provides. This is ensured by programmatically checking Microsoft's official download pages to get the latest download link. In other cases, the Windows version in question is no longer supported by Microsoft meaning a direct download link (stored in Mido) will always point to the most up-to-date release." | format + echo "" + echo "Remember to update Windows to the latest patch level after installation." + echo "" + echo "Overuse" + echo "-------" + echo "Newer consumer versions of Windows including win81x64, win10x64, and win11x64 are downloaded through Microsoft's gated download web interface. Do not overuse this interface. Microsoft may be quick to do ~24 hour IP address bans after only a few download requests (especially if they are done in quick succession). Being temporarily banned from one of these downloads (e.g. win11x64) doesn't cause you to be banned from any of the other downloads provided through this interface." | format + echo "" + echo "Privacy Preserving Technologies" + echo "-------------------------------" + echo "The aforementioned Microsoft gated download web interface is currently blocking Tor (and similar technologies). They say this is to prevent people in restricted regions from downloading certain Windows media they shouldn't have access to. This is fine by most standards because Tor is too slow for large downloads anyway and we have checksum verification for security." | format + echo "" + echo "Language" + echo "--------" + echo "All the downloads provided here are for English (United States). This helps to great simplify maintenance and minimize the user's fingerprint. If another language is desired then that can easily be configured in Windows once it's installed." | format + echo "" + echo "Architecture" + echo "------------" + echo "All the downloads provided here are for x86-64 (x64). This is the only architecture Microsoft ships Windows Server in.$([ -d /run/qubes ] && echo ' Also, the only architecture Qubes OS supports.')" | format +} + +# Media naming scheme info: +# Windows Server has no architecture because Microsoft only supports amd64 for this version of Windows (the last version to support x86 was Windows Server 2008 without the R2) +# "eval" is short for "evaluation", it's simply the license type included with the Windows installation (only exists on enterprise/server) and must be specified in the associated answer file +# "win7x64" has the "ultimate" edition appended to it because it isn't "multi-edition" like the other Windows ISOs (for multi-edition ISOs the edition is specified in the associated answer file) + +readonly win7x64_ultimate="win7x64-ultimate.iso" +readonly win81x64="win81x64.iso" +readonly win10x64="win10x64.iso" +readonly win11x64="win11x64.iso" +readonly win81x64_enterprise_eval="win81x64-enterprise-eval.iso" +readonly win10x64_enterprise_eval="win10x64-enterprise-eval.iso" +readonly win11x64_enterprise_eval="win11x64-enterprise-eval.iso" +readonly win10x64_enterprise_ltsc_eval="win10x64-enterprise-ltsc-eval.iso" +readonly win2008r2="win2008r2.iso" +readonly win2012r2_eval="win2012r2-eval.iso" +readonly win2016_eval="win2016-eval.iso" +readonly win2019_eval="win2019-eval.iso" +readonly win2022_eval="win2022-eval.iso" + +parse_args() { + for arg in "$@"; do + if [ "$arg" = "-h" ] || [ "$arg" = "--help" ]; then + usage + exit + fi + done + + if [ $# -lt 1 ]; then + usage >&2 + exit 1 + fi + + # Append to media_list so media is downloaded in the order they're passed in + for arg in "$@"; do + case "$arg" in + win7x64-ultimate) + media_list="$media_list $win7x64_ultimate" + ;; + win81x64) + media_list="$media_list $win81x64" + ;; + win10x64) + media_list="$media_list $win10x64" + ;; + win11x64) + media_list="$media_list $win11x64" + ;; + win81x64-enterprise-eval) + media_list="$media_list $win81x64_enterprise_eval" + ;; + win10x64-enterprise-eval) + media_list="$media_list $win10x64_enterprise_eval" + ;; + win11x64-enterprise-eval) + media_list="$media_list $win11x64_enterprise_eval" + ;; + win10x64-enterprise-ltsc-eval) + media_list="$media_list $win10x64_enterprise_ltsc_eval" + ;; + win2008r2) + media_list="$media_list $win2008r2" + ;; + win2012r2-eval) + media_list="$media_list $win2012r2_eval" + ;; + win2016-eval) + media_list="$media_list $win2016_eval" + ;; + win2019-eval) + media_list="$media_list $win2019_eval" + ;; + win2022-eval) + media_list="$media_list $win2022_eval" + ;; + all) + media_list="$win7x64_ultimate $win81x64 $win10x64 $win11x64 $win81x64_enterprise_eval $win10x64_enterprise_eval $win11x64_enterprise_eval $win10x64_enterprise_ltsc_eval $win2008r2 $win2012r2_eval $win2016_eval $win2019_eval $win2022_eval" + break + ;; + *) + echo_err "Invalid Windows media specified: $arg" + exit 1 + ;; + esac + done +} + +handle_curl_error() { + error_code="$1" + + fatal_error_action=2 + + case "$error_code" in + 6) + echo_err "Failed to resolve Microsoft servers! Is there an Internet connection? Exiting..." + return "$fatal_error_action" + ;; + 7) + echo_err "Failed to contact Microsoft servers! Is there an Internet connection or is the server down?" + ;; + 8) + echo_err "Microsoft servers returned a malformed HTTP response!" + ;; + 22) + echo_err "Microsoft servers returned a failing HTTP status code!" + ;; + 23) + echo_err "Failed at writing Windows media to disk! Out of disk space or permission error? Exiting..." + return "$fatal_error_action" + ;; + 26) + echo_err "Ran out of memory during download! Exiting..." + return "$fatal_error_action" + ;; + 36) + echo_err "Failed to continue earlier download!" + ;; + 63) + echo_err "Microsoft servers returned an unexpectedly large response!" + ;; + # POSIX defines exit statuses 1-125 as usable by us + # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02 + $((error_code <= 125))) + # Must be some other server or network error (possibly with this specific request/file) + # This is when accounting for all possible errors in the curl manual assuming a correctly formed curl command and HTTP(S) request, using only the curl features we're using, and a sane build + echo_err "Miscellaneous server or network error!" + ;; + 126 | 127) + echo_err "Curl command not found! Please install curl and try again. Exiting..." + return "$fatal_error_action" + ;; + # Exit statuses are undefined by POSIX beyond this point + *) + case "$(kill -l "$error_code")" in + # Signals defined to exist by POSIX: + # https://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html + INT) + echo_err "Curl was interrupted!" + ;; + # There could be other signals but these are most common + SEGV | ABRT) + echo_err "Curl crashed! Failed exploitation attempt? Please report any core dumps to curl developers. Exiting..." + return "$fatal_error_action" + ;; + *) + echo_err "Curl terminated due to a fatal signal!" + ;; + esac + esac + + return 1 +} + +part_ext=".PART" +unverified_ext=".UNVERIFIED" + +scurl_file() { + out_file="$1" + tls_version="$2" + url="$3" + + part_file="${out_file}${part_ext}" + + # --location: Microsoft likes to change which endpoint these downloads are stored on but is usually kind enough to add redirects + # --fail: Return an error on server errors where the HTTP response code is 400 or greater + curl --progress-bar --location --output "$part_file" --continue-at - --max-filesize 10G --fail --proto =https "--tlsv$tls_version" --http1.1 -- "$url" || { + error_code=$? + handle_curl_error "$error_code" + error_action=$? + + # Clean up and make sure future resumes don't happen from bad download resume files + if [ -f "$out_file" ]; then + # If file is empty, bad HTTP code, or bad download resume file + if [ ! -s "$out_file" ] || [ "$error_code" = 22 ] || [ "$error_code" = 36 ]; then + echo_info "Deleting failed download..." + rm -f "$out_file" + fi + fi + + return "$error_action" + } + + # Full downloaded succeeded, ready for verification check + mv "$part_file" "${out_file}" +} + +manual_verification() { + media_verification_failed_list="$1" + checksum_verification_failed_list="$2" + + echo_info "Manual verification instructions" + echo " 1. Get checksum (may already be done for you):" >&2 + echo " sha256sum <ISO_FILENAME>" >&2 + echo "" >&2 + echo " 2. Verify media:" >&2 + echo " Web search: https://duckduckgo.com/?q=%22CHECKSUM_HERE%22" >&2 + echo " Onion search: https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/?q=%22CHECKSUM_HERE%22" >&2 + echo " \"No results found\" or unexpected results indicates the media has been modified and should not be used." >&2 + echo "" >&2 + echo " 3. Remove the $unverified_ext extension from the file after performing or deciding to skip verification (not recommended):" >&2 + echo " mv <ISO_FILENAME>$unverified_ext <ISO_FILENAME>" >&2 + echo "" >&2 + + for media in $media_verification_failed_list; do + # Read current checksum in list and then read remaining checksums back into the list (effectively running "shift" on the variable) + # POSIX sh doesn't support indexing so do this instead to iterate both lists at once + # POSIX sh doesn't support here-strings (<<<). We could also use the "cut" program but that's not a builtin + IFS=' ' read -r checksum checksum_verification_failed_list << EOF +$checksum_verification_failed_list +EOF + + echo " ${media}${unverified_ext} = $checksum" >&2 + echo " Web search: https://duckduckgo.com/?q=%22$checksum%22" >&2 + echo " Onion search: https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/?q=%22$checksum%22" >&2 + echo " mv ${media}${unverified_ext} $media" >&2 + echo "" >&2 + done + + echo " Theses searches can be performed in a web/Tor browser or more securely using" >&2 + echo " ddgr (Debian/Fedora packages available) terminal search tool if preferred." >&2 + echo " Once validated, consider updating the checksums in Mido by submitting a pull request on GitHub." >&2 + + # If you're looking for a single secondary source to cross-reference checksums then try here: https://files.rg-adguard.net/search + # This site is recommended by the creator of Rufus in the Fido README and has worked well for me +} + +consumer_download() { + # Copyright (C) 2024 Elliot Killick <contact@elliotkillick.com> + # Licensed under the MIT License. See LICENSE file for details. + # + # This function is from the Mido project: + # https://github.com/ElliotKillick/Mido + + # Download newer consumer Windows versions from behind gated Microsoft API + + out_file="$1" + # Either 8, 10, or 11 + windows_version="$2" + + url="https://www.microsoft.com/en-us/software-download/windows$windows_version" + case "$windows_version" in + 8 | 10) url="${url}ISO" ;; + esac + + user_agent="Mozilla/5.0 (X11; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0" + # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs + session_id="$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random)" + + # Get product edition ID for latest release of given Windows version + # Product edition ID: This specifies both the Windows release (e.g. 22H2) and edition ("multi-edition" is default, either Home/Pro/Edu/etc., we select "Pro" in the answer files) in one number + # This is a request we make that Fido doesn't. Fido manually maintains a list of all the Windows release/edition product edition IDs in its script (see: $WindowsVersions array). This is helpful for downloading older releases (e.g. Windows 10 1909, 21H1, etc.) but we always want to get the newest release which is why we get this value dynamically + # Also, keeping a "$WindowsVersions" array like Fido does would be way too much of a maintenance burden + # Remove "Accept" header that curl sends by default (match Fido requests) + iso_download_page_html="$(curl -sS --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || { + handle_curl_error $? + return $? + } + + # tr: Filter for only numerics to prevent HTTP parameter injection + # head -c was recently added to POSIX: https://austingroupbugs.net/view.php?id=407 + product_edition_id="$(echo "$iso_download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16)" + [ "$VERBOSE" ] && echo "Product edition ID: $product_edition_id" >&2 + + # Permit Session ID + # "org_id" is always the same value + curl -sS --output /dev/null --user-agent "$user_agent" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://vlscppe.microsoft.com/tags?org_id=y6jn8c31&session_id=$session_id" || { + # This should only happen if there's been some change to how this API works + handle_curl_error $? + return $? + } + + # Extract everything after the last slash + url_segment_parameter="${url##*/}" + + # Get language -> skuID association table + # SKU ID: This specifies the language of the ISO. We always use "English (United States)", however, the SKU for this changes with each Windows release + # We must make this request so our next one will be allowed + # --data "" is required otherwise no "Content-Length" header will be sent causing HTTP response "411 Length Required" + language_skuid_table_html="$(curl -sS --request POST --user-agent "$user_agent" --data "" --header "Accept:" --max-filesize 10K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=a8f8f489-4c7f-463a-9ca6-5cff94d8d041&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=getskuinformationbyproductedition&sessionId=$session_id&productEditionId=$product_edition_id&sdVersion=2")" || { + handle_curl_error $? + return $? + } + + # tr: Filter for only alphanumerics or "-" to prevent HTTP parameter injection + sku_id="$(echo "$language_skuid_table_html" | grep "English (United States)" | sed 's/&quot;//g' | cut -d ',' -f 1 | cut -d ':' -f 2 | tr -cd '[:alnum:]-' | head -c 16)" + [ "$VERBOSE" ] && echo "SKU ID: $sku_id" >&2 + + # Get ISO download link + # If any request is going to be blocked by Microsoft it's always this last one (the previous requests always seem to succeed) + # --referer: Required by Microsoft servers to allow request + iso_download_link_html="$(curl -sS --request POST --user-agent "$user_agent" --data "" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=6e2a1789-ef16-4f27-a296-74ef7ef5d96b&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=GetProductDownloadLinksBySku&sessionId=$session_id&skuId=$sku_id&language=English&sdVersion=2")" || { + # This should only happen if there's been some change to how this API works + handle_curl_error $? + return $? + } + + if ! [ "$iso_download_link_html" ]; then + # This should only happen if there's been some change to how this API works + echo_err "Microsoft servers gave us an empty response to our request for an automated download. Please manually download this ISO in a web browser: $url" + manual_verification="true" + return 1 + fi + + if echo "$iso_download_link_html" | grep -q "We are unable to complete your request at this time."; then + echo_err "Microsoft blocked the automated download request based on your IP address. Please manually download this ISO in a web browser here: $url" + manual_verification="true" + return 1 + fi + + # Filter for 64-bit ISO download URL + # sed: HTML decode "&" character + # tr: Filter for only alphanumerics or punctuation + iso_download_link="$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]' | head -c 512)" + + if ! [ "$iso_download_link" ]; then + # This should only happen if there's been some change to the download endpoint web address + echo_err "Microsoft servers gave us no download link to our request for an automated download. Please manually download this ISO in a web browser: $url" + manual_verification="true" + return 1 + fi + + echo_ok "Got latest ISO download link (valid for 24 hours): $iso_download_link" + + # Download ISO + scurl_file "$out_file" "1.3" "$iso_download_link" +} + +enterprise_eval_download() { + # Copyright (C) 2024 Elliot Killick <contact@elliotkillick.com> + # Licensed under the MIT License. See LICENSE file for details. + # + # This function is from the Mido project: + # https://github.com/ElliotKillick/Mido + + # Download enterprise evaluation Windows versions + + out_file="$1" + windows_version="$2" + enterprise_type="$3" + + url="https://www.microsoft.com/en-us/evalcenter/download-$windows_version" + + iso_download_page_html="$(curl -sS --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || { + handle_curl_error $? + return $? + } + + if ! [ "$iso_download_page_html" ]; then + # This should only happen if there's been some change to where this download page is located + echo_err "Windows enterprise evaluation download page gave us an empty response" + return 1 + fi + + iso_download_links="$(echo "$iso_download_page_html" | grep -o "https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=en-us&country=US")" || { + # This should only happen if there's been some change to the download endpoint web address + echo_err "Windows enterprise evaluation download page gave us no download link" + return 1 + } + + # Limit untrusted size for input validation + iso_download_links="$(echo "$iso_download_links" | head -c 1024)" + + case "$enterprise_type" in + # Select x64 download link + "enterprise") iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; + # Select x64 LTSC download link + "ltsc") iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) ;; + *) iso_download_link="$iso_download_links" ;; + esac + + # Follow redirect so proceeding log message is useful + # This is a request we make this Fido doesn't + # We don't need to set "--max-filesize" here because this is a HEAD request and the output is to /dev/null anyway + iso_download_link="$(curl -sS --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link")" || { + # This should only happen if the Microsoft servers are down + handle_curl_error $? + return $? + } + + # Limit untrusted size for input validation + iso_download_link="$(echo "$iso_download_link" | head -c 1024)" + + echo_ok "Got latest ISO download link: $iso_download_link" + + # Use highest TLS version for endpoints that support it + case "$iso_download_link" in + "https://download.microsoft.com"*) tls_version="1.2" ;; + *) tls_version="1.3" ;; + esac + + # Download ISO + scurl_file "$out_file" "$tls_version" "$iso_download_link" +} + +download_media() { + echo_info "Downloading Windows media from official Microsoft servers..." + + media_download_failed_list="" + + for media in $media_list; do + case "$media" in + "$win7x64_ultimate") + echo_info "Downloading Windows 7..." + # Source, Google search this (it can be found many places): "dec04cbd352b453e437b2fe9614b67f28f7c0b550d8351827bc1e9ef3f601389" "download.microsoft.com" + # This Windows 7 ISO bundles MSU update packages + # It's the most up-to-date Windows 7 ISO that Microsoft offers (August 2018 update): https://files.rg-adguard.net/files/cea4210a-3474-a17a-88d4-4b3e10bd9f66 + # Of particular interest to us is the update that adds support for SHA-256 driver signatures so Qubes Windows Tools installs correctly + # + # Microsoft purged Windows 7 from all their servers... + # More info about this event: https://github.com/pbatard/Fido/issues/64 + # Luckily, the ISO is still available on the Wayback Machine so get the last copy of it from there + # This is still secure because we validate with the checksum from before the purge + # The only con then is that web.archive.org is a much slower download source than the Microsoft servers + echo_info "Microsoft has unfortunately purged all downloads of Windows 7 from their servers so this identical download is sourced from: web.archive.org" + scurl_file "$media" "1.3" "https://web.archive.org/web/20221228154140/https://download.microsoft.com/download/5/1/9/5195A765-3A41-4A72-87D8-200D897CBE21/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_ULTIMATE_x64FRE_en-us.iso" + ;; + "$win81x64") + echo_info "Downloading Windows 8.1..." + consumer_download "$media" 8 + ;; + "$win10x64") + echo_info "Downloading Windows 10..." + consumer_download "$media" 10 + ;; + "$win11x64") + echo_info "Downloading Windows 11..." + consumer_download "$media" 11 + ;; + + "$win81x64_enterprise_eval") + echo_info "Downloading Windows 8.1 Enterprise Evaluation..." + # This download link is "Update 1": https://files.rg-adguard.net/file/166cbcab-1647-53d5-1785-6ef9e22a6500 + # A more up-to-date "Update 3" enterprise ISO exists but it was only ever distributed by Microsoft through MSDN which means it's impossible to get a Microsoft download link now: https://files.rg-adguard.net/file/549a58f2-7813-3e77-df6c-50609bc6dd7c + # win81x64 is "Update 3" but that's isn't an enterprise version (although technically it's possible to modify a few files in the ISO to get any edition) + # If you want "Update 3" enterprise though (not from Microsoft servers), then you should still be able to get it from here: https://archive.org/details/en_windows_8.1_enterprise_with_update_x64_dvd_6054382_202110 + # "Update 1" enterprise also seems to be the ISO used by other projects + # Old source, used to be here but Microsoft deleted it: http://technet.microsoft.com/en-us/evalcenter/hh699156.aspx + # Source: https://gist.github.com/eyecatchup/11527136b23039a0066f + scurl_file "$media" "1.2" "https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" + ;; + "$win10x64_enterprise_eval") + echo_info "Downloading Windows 10 Enterprise Evaluation..." + enterprise_eval_download "$media" windows-10-enterprise enterprise + ;; + "$win11x64_enterprise_eval") + echo_info "Downloading Windows 11 Enterprise Evaluation..." + enterprise_eval_download "$media" windows-11-enterprise enterprise + ;; + "$win10x64_enterprise_ltsc_eval") + echo_info "Downloading Windows 10 Enterprise LTSC Evaluation..." + enterprise_eval_download "$media" windows-10-enterprise ltsc + ;; + + "$win2008r2") + echo_info "Downloading Windows Server 2008 R2..." + # Old source, used to be here but Microsoft deleted it: https://www.microsoft.com/en-us/download/details.aspx?id=11093 + # Microsoft took down the original download link provided by that source too but this new one has the same checksum + # Source: https://github.com/rapid7/metasploitable3/pull/563 + scurl_file "$media" "1.2" "https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" + ;; + "$win2012r2_eval") + echo_info "Downloading Windows Server 2012 R2 Evaluation..." + enterprise_eval_download "$media" windows-server-2012-r2 server + ;; + "$win2016_eval") + echo_info "Downloading Windows Server 2016 Evaluation..." + enterprise_eval_download "$media" windows-server-2016 server + ;; + "$win2019_eval") + echo_info "Downloading Windows Server 2019 Evaluation..." + enterprise_eval_download "$media" windows-server-2019 server + ;; + "$win2022_eval") + echo_info "Downloading Windows Server 2022 Evaluation..." + enterprise_eval_download "$media" windows-server-2022 server + ;; + esac || { + error_action=$? + media_download_failed_list="$media_download_failed_list $media" + # Return immediately on a fatal error action + if [ "$error_action" = 2 ]; then + return + fi + } + done +} + +verify_media() { + # SHA256SUMS file + # Some of these Windows ISOs are EOL (e.g. win81x64) so their checksums will always match + # For all other Windows ISOs, a new release will make their checksums no longer match + # + # IMPORTANT: These checksums are not necessarily subject to being updated + # Unfortunately, the maintenance burden would be too large and even if I did there would still be some time gap between Microsoft releasing a new ISO and me updating the checksum (also, users would have to update this script) + # For these reasons, I've opted for a slightly more manual verification where you have to look up the checksum to see if it's a well-known Windows ISO checksum + # Ultimately, you have to trust Microsft because they could still include a backdoor in the verified ISO (keeping Windows air gapped could help with this) + # Community contributions for these checksums are welcome + # + # Leading backslash is to avoid prepending a newline while maintaining alignment + readonly sha256sums="\ +dec04cbd352b453e437b2fe9614b67f28f7c0b550d8351827bc1e9ef3f601389 win7x64-ultimate.iso +d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51 win81x64.iso +# Windows 10 22H2 +a6f470ca6d331eb353b815c043e327a347f594f37ff525f17764738fe812852e win10x64.iso +# Windows 11 23H2 v2 +36de5ecb7a0daa58dce68c03b9465a543ed0f5498aa8ae60ab45fb7c8c4ae402 win11x64.iso +2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2 win81x64-enterprise-eval.iso +ef7312733a9f5d7d51cfa04ac497671995674ca5e1058d5164d6028f0938d668 win10x64-enterprise-eval.iso +ebbc79106715f44f5020f77bd90721b17c5a877cbc15a3535b99155493a1bb3f win11x64-enterprise-eval.iso +e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5 win10x64-enterprise-ltsc-eval.iso +30832ad76ccfa4ce48ccb936edefe02079d42fb1da32201bf9e3a880c8ed6312 win2008r2.iso +6612b5b1f53e845aacdf96e974bb119a3d9b4dcb5b82e65804ab7e534dc7b4d5 win2012r2-eval.iso +1ce702a578a3cb1ac3d14873980838590f06d5b7101c5daaccbac9d73f1fb50f win2016-eval.iso +6dae072e7f78f4ccab74a45341de0d6e2d45c39be25f1f5920a2ab4f51d7bcbb win2019-eval.iso +3e4fa6d8507b554856fc9ca6079cc402df11a8b79344871669f0251535255325 win2022-eval.iso" + + # Read sha256sums line-by-line to build known checksum and media lists + # Only use shell builtins for better security and stability + # Don't use a for loop because IFS cannot temporarily be set using that + while IFS="$(printf '\n')" read -r line; do + # Ignore comments and empty lines + case "$line" in + "#"* | "") continue ;; + esac + + # Read first and second words of line + IFS=' ' read -r known_checksum known_media _ << EOF +$line +EOF + + known_checksum_list="$known_checksum_list $known_checksum" + known_media_list="$known_media_list $known_media" + done << EOF +$sha256sums +EOF + + media_verification_failed_list="" + checksum_verification_failed_list="" + + for media in $media_list; do + # Scan for unverified media files + if ! [ -f "${media}${unverified_ext}" ]; then + continue + fi + + if [ "$verify_media_message_shown" != "true" ]; then + echo_info "Verifying integrity..." + verify_media_message_shown="true" + fi + + checksum_line="$(sha256sum "${media}${unverified_ext}")" + # Get first word of checksum line + IFS=' ' read -r checksum _ << EOF +$checksum_line +EOF + + # Sanity check: Assert correct size of SHA-256 checksum + if [ ${#checksum} != 64 ]; then + echo_err "Failed SHA-256 sanity check! Exiting..." + exit 2 + fi + + known_checksum_list_iterator="$known_checksum_list" + + # Search known media and checksum lists for the current media + for known_media in $known_media_list; do + IFS=' ' read -r known_checksum known_checksum_list_iterator << EOF +$known_checksum_list_iterator +EOF + + if [ "$media" = "$known_media" ]; then + break + fi + done + + # Verify current media integrity + if [ "$checksum" = "$known_checksum" ]; then + echo "$media: OK" + mv "${media}${unverified_ext}" "$media" + else + echo "$media: UNVERIFIED" + media_verification_failed_list="$media_verification_failed_list $media" + checksum_verification_failed_list="$checksum_verification_failed_list $checksum" + fi + + # Reset known checksum list iterator so we can iterate on it again for the next media + known_checksum_list_iterator="$known_checksum_list" + done +} + +ending_summary() { + echo "" >&2 + + if [ "$media_download_failed_list" ]; then + for media in $media_download_failed_list; do + media_download_failed_argument_list="$media_download_failed_argument_list ${media%%.iso}" + done + + # shellcheck disable=SC2086 + echo_err "$(word_count $media_download_failed_list) attempted download(s) failed! Please re-run Mido with these arguments to try downloading again (any partial downloads will be resumed):$media_download_failed_argument_list" + fi + + # Exit codes + # 0: Success + # 1: Argument parsing error + # 2: Runtime error (see error message for more info) + # 3: One or more downloads failed + # 4: One or more verifications failed + # 5: At least one download and one verification failed (when more than one media is specified) + + exit_code=0 + + # Determine exit code + if [ "$media_download_failed_list" ] && [ "$media_verification_failed_list" ]; then + exit_code=5 + else + if [ "$media_download_failed_list" ]; then + exit_code=3 + elif [ "$media_verification_failed_list" ]; then + exit_code=4 + fi + fi + + trap -- - EXIT + + if [ "$exit_code" = 0 ]; then + echo_ok "Successfully downloaded Windows image!" + else + echo_ok "Finished! Please see the above errors with information" + exit "$exit_code" + fi +} + +# https://unix.stackexchange.com/questions/752570/why-does-trap-passthough-zero-instead-of-the-signal-the-process-was-killed-wit +handle_exit() { + exit_code=$? + signal="$1" + + if [ "$exit_code" != 0 ] || [ "$signal" ]; then + echo "" >&2 + echo_err "Mido was exited abruptly! PARTially downloaded or UNVERIFIED Windows media may exist. Please re-run this Mido command and do not use the bad media." + fi + + if [ "$exit_code" != 0 ]; then + trap -- - EXIT + exit "$exit_code" + elif [ "$signal" ]; then + trap -- - "$signal" + kill -s "$signal" -- $$ + fi +} + +# Enable exiting on error +# +# Disable shell globbing +# This isn't necessary given that all unquoted variables (e.g. for determining word count) are set directly by us but it's just a precaution +set -ef + +# IFS defaults to many different kinds of whitespace but we only care about space +# Note: This means that ISO filenames cannot contain spaces but that's a bad idea anyway +IFS=' ' + +parse_args "$@" + +# POSIX sh doesn't include signals in its EXIT trap so do it ourselves +signo=1 +while true; do + # "kill" is a shell builtin + # shellcheck disable=SC2064 + case "$(kill -l "$signo" 2> /dev/null)" in + # Trap on all catchable terminating signals as defined by POSIX + # Stop (i.e. suspend) signals (like Ctrl + Z or TSTP) are fine because they can be resumed + # Most signals result in termination so this way is easiest (Linux signal(7) only adds more terminating signals) + # + # https://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html + # https://unix.stackexchange.com/a/490816 + # Signal WINCH was recently added to POSIX: https://austingroupbugs.net/view.php?id=249 + CHLD | CONT | URG | WINCH | KILL | STOP | TSTP | TTIN | TTOU) ;; + *) trap "handle_exit $signo" "$signo" 2> /dev/null || break ;; + esac + + signo=$((signo + 1)) +done +trap handle_exit EXIT + +download_media +verify_media +ending_summary From 144f24c5a09d1e3f985ea77ab8e3e00fce34853d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 12:13:47 +0100 Subject: [PATCH 045/505] fix: Fix XML selection for custom ISO (#66) --- src/install.sh | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/install.sh b/src/install.sh index 1e57ecd..3e0d36b 100644 --- a/src/install.sh +++ b/src/install.sh @@ -118,18 +118,18 @@ if [ ! -f "$ISO" ]; then { wget "$VERSION" -O "$ISO" -q --no-check-certificate --show-progress "$PROGRESS"; rc=$?; } || : - (( rc != 0 )) && echo && error "Failed to download $VERSION, reason: $rc" && exit 60 + (( rc != 0 )) && error "Failed to download $VERSION, reason: $rc" && exit 60 fi - [ ! -f "$ISO" ] && echo && error "Failed to download $VERSION" && exit 61 + [ ! -f "$ISO" ] && error "Failed to download $VERSION" && exit 61 fi SIZE=$(stat -c%s "$ISO") SIZE_GB=$(( (SIZE + 1073741823)/1073741824 )) if ((SIZE<10000000)); then - echo && error "Invalid ISO file: Size is smaller than 10 MB" && exit 62 + error "Invalid ISO file: Size is smaller than 10 MB" && exit 62 fi SPACE=$(df --output=avail -B 1 "$TMP" | tail -n 1) @@ -145,13 +145,12 @@ else MSG="Extracting downloaded ISO image..." fi -echo && info "$MSG" && html "$MSG" +info "$MSG" && html "$MSG" DIR="$TMP/unpack" rm -rf "$DIR" 7z x "$ISO" -o"$DIR" > /dev/null -echo FB="falling back to manual installation!" ETFS="boot/etfsboot.com" @@ -165,7 +164,7 @@ if [ ! -f "$DIR/$ETFS" ] || [ ! -f "$DIR/$EFISYS" ]; then fi mv -f "$ISO" "$STORAGE/$BASE" rm -rf "$TMP" - echo && return 0 + return 0 fi [ -z "$CUSTOM" ] && rm -f "$ISO" @@ -173,10 +172,7 @@ fi if [ -z "$MANUAL" ]; then MANUAL="N" - - if [[ "$EXTERNAL" == [Yy1]* ]]; then - [[ "${BASE,,}" == "tiny10"* ]] && MANUAL="Y" - fi + [[ "${BASE,,}" == "tiny10"* ]] && MANUAL="Y" fi @@ -184,7 +180,9 @@ XML="" if [[ "$MANUAL" != [Yy1]* ]]; then - [[ "$EXTERNAL" != [Yy1]* ]] && XML="$VERSION.xml" + if [[ "$EXTERNAL" != [Yy1]* ]]; then + [ -z "$CUSTOM" ] && XML="$VERSION.xml" + fi if [ ! -f "/run/assets/$XML" ]; then @@ -237,7 +235,6 @@ if [[ "$MANUAL" != [Yy1]* ]]; then else warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" fi - echo fi fi @@ -284,8 +281,6 @@ if [ -f "$ASSET" ]; then LOC="$DIR/AUTOUNATTEND.XML" [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - echo - fi CAT="BOOT.CAT" @@ -314,5 +309,4 @@ rm -rf "$TMP" html "Successfully prepared image for installation..." -echo return 0 From 853d48e3f5f195522b527c73ccfbfdd2e536f728 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 12:26:19 +0100 Subject: [PATCH 046/505] docs: Readme (#67) --- readme.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 336d9c4..0a09625 100644 --- a/readme.md +++ b/readme.md @@ -118,7 +118,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w * ### How do I perform a manual installation? - If you prefer to perform the installation manually in order to customize some options, such as selecting another edition, add the following environment variable: + If you prefer to perform the installation manually in order to customize some options, add the following environment variable: ```yaml environment: @@ -152,7 +152,9 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w VERSION: "https://example.com/win.iso" ``` - Make sure your `/storage` folder is empty before starting the container. Alternatively, you can also place a file called `custom.iso` in that folder to skip the download. + Make sure your `/storage` folder is empty before starting the container. + + Alternatively, you can also place a file called `custom.iso` in that folder to skip the download. * ### How do I pass-through a disk? From a5348e49ff81da70f26f3a191338e9cb2e08d961 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 20:44:38 +0100 Subject: [PATCH 047/505] feat: Improved custom ISO support (#68) --- readme.md | 8 +- src/install.sh | 215 +++++++++++++++++++++++++++++++++---------------- 2 files changed, 148 insertions(+), 75 deletions(-) diff --git a/readme.md b/readme.md index 0a09625..86c2187 100644 --- a/readme.md +++ b/readme.md @@ -118,7 +118,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w * ### How do I perform a manual installation? - If you prefer to perform the installation manually in order to customize some options, add the following environment variable: + If you prefer to perform the installation manually, start a clean container with the following environment variable: ```yaml environment: @@ -145,16 +145,14 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w * ### How do I install a custom image? - In order to download a custom ISO image, specify an URL in the `VERSION` environment variable: + In order to download a custom ISO image, start a clean container with the URL specified in the `VERSION` environment variable: ```yaml environment: VERSION: "https://example.com/win.iso" ``` - - Make sure your `/storage` folder is empty before starting the container. - Alternatively, you can also place a file called `custom.iso` in that folder to skip the download. + Alternatively, you can also place a file called `custom.iso` in an empty `/storage` folder to skip the download. * ### How do I pass-through a disk? diff --git a/src/install.sh b/src/install.sh index 3e0d36b..e0fe1fe 100644 --- a/src/install.sh +++ b/src/install.sh @@ -39,66 +39,114 @@ if [[ "${VERSION,,}" == "tiny11" ]]; then VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" fi -if [[ "${VERSION,,}" == "http"* ]]; then - EXTERNAL="Y" -else - EXTERNAL="N" +if [ -z "$MANUAL" ]; then + + MANUAL="N" + [[ "${BASE,,}" == "tiny10"* ]] && MANUAL="Y" + fi +CUSTOM="custom.iso" + +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.iso" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.ISO" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="CUSTOM.ISO" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.img" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.img" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.IMG" +[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="CUSTOM.IMG" + MSG="Windows is being started, please wait..." -if [[ "$EXTERNAL" != [Yy1]* ]]; then +if [ -f "$STORAGE/$CUSTOM" ]; then - BASE="$VERSION.iso" - - if [ ! -f "$STORAGE/$BASE" ]; then - MSG="Windows is being downloaded, please wait..." - fi + EXTERNAL="Y" + BASE="$CUSTOM" else - BASE=$(basename "${VERSION%%\?*}") - : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" - BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') + CUSTOM="" - if [ ! -f "$STORAGE/$BASE" ]; then - MSG="Image '$BASE' is being downloaded, please wait..." + if [[ "${VERSION,,}" == "http"* ]]; then + EXTERNAL="Y" + else + EXTERNAL="N" fi -fi + if [[ "$EXTERNAL" != [Yy1]* ]]; then -[[ "${BASE,,}" == "custom."* ]] && BASE="target.iso" + BASE="$VERSION.iso" + + if [ ! -f "$STORAGE/$BASE" ]; then + MSG="Windows is being downloaded, please wait..." + fi + + else + + BASE=$(basename "${VERSION%%\?*}") + : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" + BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') + + if [ ! -f "$STORAGE/$BASE" ]; then + MSG="Image '$BASE' is being downloaded, please wait..." + fi + + fi + + [[ "${BASE,,}" == "custom."* ]] && BASE="windows.iso" + +fi html "$MSG" TMP="$STORAGE/tmp" if [ -f "$STORAGE/$BASE" ]; then - rm -rf "$TMP" - return 0 + + # Check if the ISO was already processed by our script + MAGIC=$(dd if="$STORAGE/$BASE" seek=0 bs=1 count=1 status=none | tr -d '\000') + MAGIC="$(printf '%s' "$MAGIC" | od -A n -t x1 -v | tr -d ' \n')" + + if [[ "$MAGIC" == "16" ]]; then + + if [[ "$MANUAL" = [Yy1]* ]]; then + rm -rf "$TMP" + return 0 + fi + + FOUND="N" + if [ -f "$STORAGE/data.img" ] || [ -f "$STORAGE/data.qcow2" ]; then + FOUND="Y" + else + [ -b "${DEVICE:-}" ] && FOUND="Y" + fi + + if [[ "$FOUND" == "Y" ]]; then + rm -rf "$TMP" + return 0 + fi + + fi + + EXTERNAL="Y" + CUSTOM="$BASE" + MSG="ISO file needs to be prepared..." + info "$MSG" && html "$MSG" + fi mkdir -p "$TMP" -ISO="$TMP/$BASE" -rm -f "$ISO" - -CUSTOM="custom.iso" - -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.img" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.iso" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.img" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.ISO" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.IMG" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="CUSTOM.ISO" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="CUSTOM.IMG" - if [ ! -f "$STORAGE/$CUSTOM" ]; then CUSTOM="" + ISO="$TMP/$BASE" else ISO="$STORAGE/$CUSTOM" fi +rm -f "$TMP/$BASE" + if [ ! -f "$ISO" ]; then + if [[ "$EXTERNAL" != [Yy1]* ]]; then cd "$TMP" @@ -123,6 +171,7 @@ if [ ! -f "$ISO" ]; then fi [ ! -f "$ISO" ] && error "Failed to download $VERSION" && exit 61 + fi SIZE=$(stat -c%s "$ISO") @@ -140,7 +189,7 @@ if (( SIZE > SPACE )); then fi if [ -n "$CUSTOM" ]; then - MSG="Extracting custom ISO image..." + MSG="Extracting local ISO image..." else MSG="Extracting downloaded ISO image..." fi @@ -157,30 +206,32 @@ ETFS="boot/etfsboot.com" EFISYS="efi/microsoft/boot/efisys_noprompt.bin" if [ ! -f "$DIR/$ETFS" ] || [ ! -f "$DIR/$EFISYS" ]; then + if [ ! -f "$DIR/$ETFS" ]; then warn "failed to locate file 'etfsboot.com' in ISO image, $FB" else warn "failed to locate file 'efisys_noprompt.bin' in ISO image, $FB" fi - mv -f "$ISO" "$STORAGE/$BASE" + + # Mark ISO as prepared via magic byte + printf '\x16' | dd of=$ISO bs=1 seek=0 count=1 conv=notrunc status=none + + [[ "$ISO" != "$STORAGE/$BASE" ]] && mv -f "$ISO" "$STORAGE/$BASE" + + rm -f "$STORAGE/windows.ver" + cp /run/version "$STORAGE/windows.ver" + rm -rf "$TMP" return 0 fi [ -z "$CUSTOM" ] && rm -f "$ISO" -if [ -z "$MANUAL" ]; then - - MANUAL="N" - [[ "${BASE,,}" == "tiny10"* ]] && MANUAL="Y" - -fi - XML="" if [[ "$MANUAL" != [Yy1]* ]]; then - if [[ "$EXTERNAL" != [Yy1]* ]]; then + if [[ "$EXTERNAL" != [Yy1]* ]]; then [ -z "$CUSTOM" ] && XML="$VERSION.xml" fi @@ -199,26 +250,37 @@ if [[ "$MANUAL" != [Yy1]* ]]; then RESULT=$(wimlib-imagex info -xml "$LOC" | tr -d '\000') NAME=$(sed -n "/$TAG/{s/.*<$TAG>\(.*\)<\/$TAG>.*/\1/;p}" <<< "$RESULT") - if [ -z "$NAME" ]; then - TAG="PRODUCTNAME" - NAME=$(sed -n "/$TAG/{s/.*<$TAG>\(.*\)<\/$TAG>.*/\1/;p}" <<< "$RESULT") - fi - - [[ "${NAME,,}" == "windows 11"* ]] && DETECTED="win11x64" - [[ "${NAME,,}" == "windows 10"* ]] && DETECTED="win10x64" - [[ "${NAME,,}" == "windows 8"* ]] && DETECTED="win81x64" + [[ "${NAME,,}" == *"windows 11"* ]] && DETECTED="win11x64" + [[ "${NAME,,}" == *"windows 10"* ]] && DETECTED="win10x64" + [[ "${NAME,,}" == *"windows 8"* ]] && DETECTED="win81x64" [[ "${NAME,,}" == *"server 2022"* ]] && DETECTED="win2022-eval" [[ "${NAME,,}" == *"server 2019"* ]] && DETECTED="win2019-eval" [[ "${NAME,,}" == *"server 2016"* ]] && DETECTED="win2016-eval" + if [ -z "$DETECTED" ]; then + + TAG="PRODUCTNAME" + NAME2=$(sed -n "/$TAG/{s/.*<$TAG>\(.*\)<\/$TAG>.*/\1/;p}" <<< "$RESULT") + [ -z "$NAME" ] && NAME="$NAME2" + + [[ "${NAME2,,}" == *"windows 11"* ]] && DETECTED="win11x64" + [[ "${NAME2,,}" == *"windows 10"* ]] && DETECTED="win10x64" + [[ "${NAME2,,}" == *"windows 8"* ]] && DETECTED="win81x64" + [[ "${NAME2,,}" == *"server 2022"* ]] && DETECTED="win2022-eval" + [[ "${NAME2,,}" == *"server 2019"* ]] && DETECTED="win2019-eval" + [[ "${NAME2,,}" == *"server 2016"* ]] && DETECTED="win2016-eval" + + fi + if [ -n "$DETECTED" ]; then XML="$DETECTED.xml" if [ -f "/run/assets/$XML" ]; then - echo "Detected image of type '$DETECTED', will apply an autounattend.xml file." + echo "Detected image of type '$DETECTED', which supports automatic installation." else - warn "detected image of type '$DETECTED', but no matching .xml file exists, $FB." + XML="" + warn "detected image of type '$DETECTED', but no matching XML file exists, $FB." fi else @@ -242,6 +304,23 @@ ASSET="/run/assets/$XML" if [ -f "$ASSET" ]; then + LOC="$DIR/autounattend.xml" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/Autounattend.xml" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/AutoUnattend.xml" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/autounattend.XML" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/Autounattend.XML" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/AutoUnattend.XML" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/AUTOUNATTEND.xml" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/AUTOUNATTEND.XML" + [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" + LOC="$DIR/sources/boot.wim" [ ! -f "$LOC" ] && LOC="$DIR/sources/boot.esd" @@ -261,26 +340,11 @@ if [ -f "$ASSET" ]; then wimlib-imagex update "$LOC" "$INDEX" --command "add $ASSET /autounattend.xml" > /dev/null else + + ASSET="" warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" + fi - - LOC="$DIR/autounattend.xml" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/Autounattend.xml" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/AutoUnattend.xml" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/autounattend.XML" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/Autounattend.XML" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/AutoUnattend.XML" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/AUTOUNATTEND.xml" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/AUTOUNATTEND.XML" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - fi CAT="BOOT.CAT" @@ -302,9 +366,20 @@ info "$MSG" && html "$MSG" genisoimage -b "$ETFS" -no-emul-boot -c "$CAT" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -quiet -V "$LABEL" -udf \ -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$OUT" -allow-limited-size "$DIR" +# Mark ISO as prepared via magic byte +printf '\x16' | dd of=$OUT bs=1 seek=0 count=1 conv=notrunc status=none + [ -n "$CUSTOM" ] && rm -f "$STORAGE/$CUSTOM" +if [ -f "$STORAGE/$BASE" ]; then + error "File $STORAGE/$BASE does already exist ?!" && exit 64 +fi + mv "$OUT" "$STORAGE/$BASE" + +rm -f "$STORAGE/windows.ver" +cp /run/version "$STORAGE/windows.ver" + rm -rf "$TMP" html "Successfully prepared image for installation..." From a9500da77d8f71c371dbe9096e553ee2d94a0c55 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 20:46:51 +0100 Subject: [PATCH 048/505] fix: Quotes (#69) --- src/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index e0fe1fe..ec575b2 100644 --- a/src/install.sh +++ b/src/install.sh @@ -214,7 +214,7 @@ if [ ! -f "$DIR/$ETFS" ] || [ ! -f "$DIR/$EFISYS" ]; then fi # Mark ISO as prepared via magic byte - printf '\x16' | dd of=$ISO bs=1 seek=0 count=1 conv=notrunc status=none + printf '\x16' | dd of="$ISO" bs=1 seek=0 count=1 conv=notrunc status=none [[ "$ISO" != "$STORAGE/$BASE" ]] && mv -f "$ISO" "$STORAGE/$BASE" @@ -367,7 +367,7 @@ genisoimage -b "$ETFS" -no-emul-boot -c "$CAT" -iso-level 4 -J -l -D -N -joliet- -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$OUT" -allow-limited-size "$DIR" # Mark ISO as prepared via magic byte -printf '\x16' | dd of=$OUT bs=1 seek=0 count=1 conv=notrunc status=none +printf '\x16' | dd of="$OUT" bs=1 seek=0 count=1 conv=notrunc status=none [ -n "$CUSTOM" ] && rm -f "$STORAGE/$CUSTOM" From 1b1300ce9e4d108e735a19cf4c601bbef6a621d2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 20:54:26 +0100 Subject: [PATCH 049/505] fix: Remove message (#70) --- src/install.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index ec575b2..6d9efa1 100644 --- a/src/install.sh +++ b/src/install.sh @@ -129,8 +129,6 @@ if [ -f "$STORAGE/$BASE" ]; then EXTERNAL="Y" CUSTOM="$BASE" - MSG="ISO file needs to be prepared..." - info "$MSG" && html "$MSG" fi From 10813716d46c845eedea9e56b7120471d6fac790 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 22:27:54 +0100 Subject: [PATCH 050/505] build: Validate XML (#71) --- .github/workflows/check.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 5002e91..6af67da 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -10,5 +10,10 @@ jobs: - uses: actions/checkout@v4 - name: Run ShellCheck uses: ludeeus/action-shellcheck@master -env: - SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2034 -e SC2064 -e SC2317 -e SC2153 + env: + SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2034 -e SC2064 -e SC2317 -e SC2153 + - name: Validate XML + uses: anyone-developer/anyone-validate-xml@main + with: + file-extension: '.xml' + read-path: 'assets' From ad20e0791bb3eb7c145b60447949a246a62bc90c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 22:34:47 +0100 Subject: [PATCH 051/505] build: Validate XML (#72) --- .github/workflows/check.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 6af67da..2bcb8fb 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -13,7 +13,7 @@ jobs: env: SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2034 -e SC2064 -e SC2317 -e SC2153 - name: Validate XML - uses: anyone-developer/anyone-validate-xml@main + uses: actions/verify-xml-action@v1 with: - file-extension: '.xml' - read-path: 'assets' + path: "assets" + file-endings: ".xml" From bba94fe736cb69dcdb21805efd295c51ef5dcc8c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 23:15:48 +0100 Subject: [PATCH 052/505] build: Validate XML (#74) --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 2bcb8fb..aff1be3 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -13,7 +13,7 @@ jobs: env: SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2034 -e SC2064 -e SC2317 -e SC2153 - name: Validate XML - uses: actions/verify-xml-action@v1 + uses: action-pack/valid-xml@v1 with: path: "assets" file-endings: ".xml" From c570eee5bff303faa34dec8ee81872dc2e295f7a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 23:17:31 +0100 Subject: [PATCH 053/505] build: Validate XML (#75) --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f994183..b4b88a3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,6 +3,7 @@ on: pull_request: paths: - '**/*.sh' + - '**/*.xml' - '.github/workflows/test.yml' - '.github/workflows/check.yml' From 3b8f80455f4af4a11fde954d6da175e2d14c4139 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 23:27:48 +0100 Subject: [PATCH 054/505] feat: Improved automatic installation (#76) --- assets/win10x64.xml | 63 +++++++++++++++++++++++++++++++++++++-- assets/win11x64.xml | 64 +++++++++++++++++++++++++++++++++++++--- assets/win2016-eval.xml | 57 ++++++++++++++++++++++++++++++------ assets/win2019-eval.xml | 57 ++++++++++++++++++++++++++++++------ assets/win2022-eval.xml | 57 ++++++++++++++++++++++++++++++------ assets/win81x64.xml | 65 ++++++++++++++++++++++++++++++++++------- 6 files changed, 319 insertions(+), 44 deletions(-) diff --git a/assets/win10x64.xml b/assets/win10x64.xml index ba395f8..824978a 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -82,13 +82,26 @@ <InstallToAvailablePartition>false</InstallToAvailablePartition> </OSImage> </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> <ProductKey> <Key>VK7JG-NPHTM-C97JM-9MPGT-3V66T</Key> </ProductKey> - <AcceptEula>true</AcceptEula> </UserData> <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> </component> <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DriverPaths> @@ -129,9 +142,37 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> </settings> - <settings pass="generalize"/> <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone></SupportPhone> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <RunSynchronous> <RunSynchronousCommand wcm:action="add"> @@ -261,10 +302,21 @@ </Password> </AutoLogon> <OOBE> - <ProtectYourPC>3</ProtectYourPC> <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + <VMModeOptimizations> + <SkipWinREInitialization>true</SkipWinREInitialization> + </VMModeOptimizations> </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> @@ -284,6 +336,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 300496a..027473e 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -82,13 +82,26 @@ <InstallToAvailablePartition>false</InstallToAvailablePartition> </OSImage> </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> <ProductKey> <Key>VK7JG-NPHTM-C97JM-9MPGT-3V66T</Key> </ProductKey> - <AcceptEula>true</AcceptEula> </UserData> <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> <RunSynchronous> <RunSynchronousCommand wcm:action="add"> <Order>1</Order> @@ -147,9 +160,37 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> </settings> - <settings pass="generalize"/> <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone></SupportPhone> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <RunSynchronous> <RunSynchronousCommand wcm:action="add"> @@ -279,11 +320,21 @@ </Password> </AutoLogon> <OOBE> - <ProtectYourPC>3</ProtectYourPC> <HideEULAPage>true</HideEULAPage> - <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + <VMModeOptimizations> + <SkipWinREInitialization>true</SkipWinREInitialization> + </VMModeOptimizations> </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> @@ -311,6 +362,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 0a9c193..3206623 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -90,13 +90,24 @@ <InstallToAvailablePartition>false</InstallToAvailablePartition> </OSImage> </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> <UserData> <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> - <Organization>Organization</Organization> + <Organization>Windows for Docker</Organization> <ProductKey/> </UserData> <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> </component> <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DriverPaths> @@ -137,13 +148,37 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + </component> </settings> <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <SkipRearm>1</SkipRearm> </component> </settings> <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone></SupportPhone> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> <SystemLocale>en-US</SystemLocale> @@ -151,12 +186,6 @@ <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>en-US</UserLocale> </component> - <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <SkipAutoActivation>true</SkipAutoActivation> - </component> - <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <CEIPEnabled>0</CEIPEnabled> - </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> @@ -213,10 +242,15 @@ <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> <NetworkLocation>Home</NetworkLocation> - <ProtectYourPC>1</ProtectYourPC> - <SkipMachineOOBE>true</SkipMachineOOBE> + <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + <VMModeOptimizations> + <SkipWinREInitialization>true</SkipWinREInitialization> + </VMModeOptimizations> </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> @@ -236,6 +270,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index c9e4874..cc87ce2 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -90,13 +90,24 @@ <InstallToAvailablePartition>false</InstallToAvailablePartition> </OSImage> </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> <UserData> <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> - <Organization>Organization</Organization> + <Organization>Windows for Docker</Organization> <ProductKey/> </UserData> <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> </component> <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DriverPaths> @@ -137,13 +148,37 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + </component> </settings> <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <SkipRearm>1</SkipRearm> </component> </settings> <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone></SupportPhone> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> <SystemLocale>en-US</SystemLocale> @@ -151,12 +186,6 @@ <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>en-US</UserLocale> </component> - <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <SkipAutoActivation>true</SkipAutoActivation> - </component> - <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <CEIPEnabled>0</CEIPEnabled> - </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> @@ -213,10 +242,15 @@ <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> <NetworkLocation>Home</NetworkLocation> - <ProtectYourPC>1</ProtectYourPC> - <SkipMachineOOBE>true</SkipMachineOOBE> + <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + <VMModeOptimizations> + <SkipWinREInitialization>true</SkipWinREInitialization> + </VMModeOptimizations> </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> @@ -236,6 +270,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 7a68da3..6164b26 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -90,13 +90,24 @@ <InstallToAvailablePartition>false</InstallToAvailablePartition> </OSImage> </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> <UserData> <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> - <Organization>Organization</Organization> + <Organization>Windows for Docker</Organization> <ProductKey/> </UserData> <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> </component> <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DriverPaths> @@ -137,13 +148,37 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + </component> </settings> <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <SkipRearm>1</SkipRearm> </component> </settings> <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone></SupportPhone> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> <SystemLocale>en-US</SystemLocale> @@ -151,12 +186,6 @@ <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>en-US</UserLocale> </component> - <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <SkipAutoActivation>true</SkipAutoActivation> - </component> - <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <CEIPEnabled>0</CEIPEnabled> - </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> @@ -213,10 +242,15 @@ <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> <NetworkLocation>Home</NetworkLocation> - <ProtectYourPC>1</ProtectYourPC> - <SkipMachineOOBE>true</SkipMachineOOBE> + <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + <VMModeOptimizations> + <SkipWinREInitialization>true</SkipWinREInitialization> + </VMModeOptimizations> </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> @@ -236,6 +270,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index db364f2..08a405e 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -88,16 +88,27 @@ <InstallToAvailablePartition>false</InstallToAvailablePartition> </OSImage> </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> <ProductKey> <Key>GCRJD-8NW9H-F2CDX-CCM8D-9D6T9</Key> <WillShowUI>OnError</WillShowUI> </ProductKey> - <AcceptEula>true</AcceptEula> - <FullName>Docker</FullName> - <Organization>Docker</Organization> </UserData> <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> </component> <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DriverPaths> @@ -138,20 +149,43 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> </settings> <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone></SupportPhone> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> <SystemLocale>en-US</SystemLocale> <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> - <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <SkipAutoActivation>true</SkipAutoActivation> - </component> - <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <CEIPEnabled>0</CEIPEnabled> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -182,14 +216,20 @@ </AutoLogon> <OOBE> <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> <NetworkLocation>Home</NetworkLocation> - <ProtectYourPC>1</ProtectYourPC> + <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> + <VMModeOptimizations> + <SkipWinREInitialization>true</SkipWinREInitialization> + </VMModeOptimizations> </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> @@ -203,6 +243,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> From c479b6a753363126dfdeb137dbab5dd10a856c34 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Jan 2024 23:31:35 +0100 Subject: [PATCH 055/505] fix: Unbound variable (#77) --- src/install.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/install.sh b/src/install.sh index 6d9efa1..456e63b 100644 --- a/src/install.sh +++ b/src/install.sh @@ -39,13 +39,6 @@ if [[ "${VERSION,,}" == "tiny11" ]]; then VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" fi -if [ -z "$MANUAL" ]; then - - MANUAL="N" - [[ "${BASE,,}" == "tiny10"* ]] && MANUAL="Y" - -fi - CUSTOM="custom.iso" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.iso" @@ -100,6 +93,13 @@ fi html "$MSG" TMP="$STORAGE/tmp" +if [ -z "$MANUAL" ]; then + + MANUAL="N" + [[ "${BASE,,}" == "tiny10"* ]] && MANUAL="Y" + +fi + if [ -f "$STORAGE/$BASE" ]; then # Check if the ISO was already processed by our script From 8474b917b2efa61e33ae8ff5f14b9e980d2c25a9 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 23 Jan 2024 04:07:06 +0100 Subject: [PATCH 056/505] fix: Windows config (#80) --- assets/win10x64.xml | 22 ++++++++++++++++------ assets/win11x64.xml | 22 ++++++++++++++++------ assets/win2016-eval.xml | 27 +++++++++++++++------------ assets/win2019-eval.xml | 22 ++++++++++++++++------ assets/win2022-eval.xml | 24 +++++++++++++++++------- assets/win81x64.xml | 25 ++++++++++++++----------- src/install.sh | 2 +- 7 files changed, 95 insertions(+), 49 deletions(-) diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 824978a..88a117e 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -1,4 +1,4 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> <settings pass="windowsPE"> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -164,7 +164,7 @@ <Manufacturer>Dockur</Manufacturer> <Model>Windows for Docker</Model> <SupportHours>24/7</SupportHours> - <SupportPhone></SupportPhone> + <SupportPhone /> <SupportProvider>Dockur</SupportProvider> <SupportURL>https://github.com/dockur/windows/issues</SupportURL> </OEMInformation> @@ -266,8 +266,8 @@ </RunSynchronous> </component> </settings> - <settings pass="auditSystem"/> - <settings pass="auditUser"/> + <settings pass="auditSystem" /> + <settings pass="auditUser" /> <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> @@ -282,7 +282,7 @@ <Name>Docker</Name> <Group>Administrators</Group> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </LocalAccount> @@ -297,7 +297,7 @@ <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </AutoLogon> @@ -344,6 +344,16 @@ <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 027473e..a993f01 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -1,4 +1,4 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> <settings pass="windowsPE"> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -182,7 +182,7 @@ <Manufacturer>Dockur</Manufacturer> <Model>Windows for Docker</Model> <SupportHours>24/7</SupportHours> - <SupportPhone></SupportPhone> + <SupportPhone /> <SupportProvider>Dockur</SupportProvider> <SupportURL>https://github.com/dockur/windows/issues</SupportURL> </OEMInformation> @@ -284,8 +284,8 @@ </RunSynchronous> </component> </settings> - <settings pass="auditSystem"/> - <settings pass="auditUser"/> + <settings pass="auditSystem" /> + <settings pass="auditUser" /> <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> @@ -300,7 +300,7 @@ <Name>Docker</Name> <Group>Administrators</Group> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </LocalAccount> @@ -315,7 +315,7 @@ <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </AutoLogon> @@ -370,6 +370,16 @@ <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 3206623..bd6d3a4 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="UTF-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> <settings pass="windowsPE"> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -102,7 +102,7 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey/> + <ProductKey /> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> @@ -161,7 +161,7 @@ </component> </settings> <settings pass="specialize"> - <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <SkipAutoActivation>true</SkipAutoActivation> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -169,10 +169,6 @@ <OEMInformation> <Manufacturer>Dockur</Manufacturer> <Model>Windows for Docker</Model> - <SupportHours>24/7</SupportHours> - <SupportPhone></SupportPhone> - <SupportProvider>Dockur</SupportProvider> - <SupportURL>https://github.com/dockur/windows/issues</SupportURL> </OEMInformation> <OEMName>Windows for Docker</OEMName> </component> @@ -216,7 +212,7 @@ <Name>Docker</Name> <Group>Administrators</Group> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </LocalAccount> @@ -231,7 +227,7 @@ <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </AutoLogon> @@ -245,9 +241,6 @@ <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> - <VMModeOptimizations> - <SkipWinREInitialization>true</SkipWinREInitialization> - </VMModeOptimizations> </OOBE> <RegisteredOrganization>Dockur</RegisteredOrganization> <RegisteredOwner>Windows for Docker</RegisteredOwner> @@ -278,6 +271,16 @@ <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index cc87ce2..8ea29bd 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="UTF-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> <settings pass="windowsPE"> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -102,7 +102,7 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey/> + <ProductKey /> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> @@ -161,7 +161,7 @@ </component> </settings> <settings pass="specialize"> - <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <SkipAutoActivation>true</SkipAutoActivation> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -170,7 +170,7 @@ <Manufacturer>Dockur</Manufacturer> <Model>Windows for Docker</Model> <SupportHours>24/7</SupportHours> - <SupportPhone></SupportPhone> + <SupportPhone /> <SupportProvider>Dockur</SupportProvider> <SupportURL>https://github.com/dockur/windows/issues</SupportURL> </OEMInformation> @@ -216,7 +216,7 @@ <Name>Docker</Name> <Group>Administrators</Group> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </LocalAccount> @@ -231,7 +231,7 @@ <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </AutoLogon> @@ -278,6 +278,16 @@ <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 6164b26..5e9e275 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="UTF-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> <settings pass="windowsPE"> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -102,7 +102,7 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey/> + <ProductKey /> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> @@ -161,7 +161,7 @@ </component> </settings> <settings pass="specialize"> - <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <SkipAutoActivation>true</SkipAutoActivation> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -170,7 +170,7 @@ <Manufacturer>Dockur</Manufacturer> <Model>Windows for Docker</Model> <SupportHours>24/7</SupportHours> - <SupportPhone></SupportPhone> + <SupportPhone /> <SupportProvider>Dockur</SupportProvider> <SupportURL>https://github.com/dockur/windows/issues</SupportURL> </OEMInformation> @@ -191,7 +191,7 @@ </component> <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> - </component> + </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <fDenyTSConnections>false</fDenyTSConnections> </component> @@ -216,7 +216,7 @@ <Name>Docker</Name> <Group>Administrators</Group> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </LocalAccount> @@ -231,7 +231,7 @@ <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </AutoLogon> @@ -278,6 +278,16 @@ <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 08a405e..8f2f856 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -1,4 +1,4 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> <settings pass="windowsPE"> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -162,7 +162,7 @@ </component> </settings> <settings pass="specialize"> - <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <SkipAutoActivation>true</SkipAutoActivation> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -170,10 +170,6 @@ <OEMInformation> <Manufacturer>Dockur</Manufacturer> <Model>Windows for Docker</Model> - <SupportHours>24/7</SupportHours> - <SupportPhone></SupportPhone> - <SupportProvider>Dockur</SupportProvider> - <SupportURL>https://github.com/dockur/windows/issues</SupportURL> </OEMInformation> <OEMName>Windows for Docker</OEMName> </component> @@ -195,7 +191,7 @@ <Name>Docker</Name> <Group>Administrators</Group> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </LocalAccount> @@ -210,7 +206,7 @@ <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Password> - <Value/> + <Value /> <PlainText>true</PlainText> </Password> </AutoLogon> @@ -224,9 +220,6 @@ <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> - <VMModeOptimizations> - <SkipWinREInitialization>true</SkipWinREInitialization> - </VMModeOptimizations> </OOBE> <RegisteredOrganization>Dockur</RegisteredOrganization> <RegisteredOwner>Windows for Docker</RegisteredOwner> @@ -251,6 +244,16 @@ <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/src/install.sh b/src/install.sh index 456e63b..4188e30 100644 --- a/src/install.sh +++ b/src/install.sh @@ -358,7 +358,7 @@ if (( SIZE > SPACE )); then error "Not enough free space in $STORAGE, have $SPACE_GB GB available but need at least $SIZE_GB GB." && exit 63 fi -MSG="Generating new ISO image for installation..." +MSG="Generating the ISO image..." info "$MSG" && html "$MSG" genisoimage -b "$ETFS" -no-emul-boot -c "$CAT" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -quiet -V "$LABEL" -udf \ From 08f040a819c4b742b08cd103ccfefdd5f4b4a989 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 23 Jan 2024 22:38:17 +0100 Subject: [PATCH 057/505] feat: Implement graceful shutdown (#81) --- docker-compose.yml | 2 +- readme.md | 6 +- src/entry.sh | 16 +++-- src/install.sh | 17 +---- src/power.sh | 151 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 169 insertions(+), 23 deletions(-) create mode 100644 src/power.sh diff --git a/docker-compose.yml b/docker-compose.yml index 9315465..0f8bf97 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,4 +12,4 @@ services: - 3389:3389/tcp - 3389:3389/udp stop_grace_period: 2m - restart: unless-stopped + restart: on-failure diff --git a/readme.md b/readme.md index 86c2187..3c479dd 100644 --- a/readme.md +++ b/readme.md @@ -39,13 +39,13 @@ services: - 3389:3389/tcp - 3389:3389/udp stop_grace_period: 2m - restart: unless-stopped + restart: on-failure ``` Via `docker run` ```bash -docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/windows +docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows ``` ## FAQ @@ -152,7 +152,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/w VERSION: "https://example.com/win.iso" ``` - Alternatively, you can also place a file called `custom.iso` in an empty `/storage` folder to skip the download. + Alternatively, you can also rename a local file to `custom.iso` and place it in an empty `/storage` folder to skip the download. * ### How do I pass-through a disk? diff --git a/src/entry.sh b/src/entry.sh index 17d3009..c1cf0d6 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -2,23 +2,31 @@ set -Eeuo pipefail APP="Windows" -export BOOT_MODE=windows +BOOT_MODE="windows" SUPPORT="https://github.com/dockur/windows" cd /run . reset.sh # Initialize system -. install.sh # Get bootdisk +. install.sh # Run installation . disk.sh # Initialize disks . display.sh # Initialize graphics . network.sh # Initialize network . boot.sh # Configure boot . proc.sh # Initialize processor +. power.sh # Configure shutdown . config.sh # Configure arguments trap - ERR info "Booting $APP using $VERS..." +[[ "$DEBUG" == [Yy1]* ]] && echo "Arguments: $ARGS" && echo -[[ "$DEBUG" == [Yy1]* ]] && set -x -exec qemu-system-x86_64 ${ARGS:+ $ARGS} +{ qemu-system-x86_64 ${ARGS:+ $ARGS} >"$QEMU_OUT" 2>"$QEMU_LOG"; rc=$?; } || : +(( rc != 0 )) && error "$(<"$QEMU_LOG")" && exit 15 + +terminal +tail -fn +0 "$QEMU_LOG" 2>/dev/null & +cat "$QEMU_TERM" 2>/dev/null & wait $! || : + +sleep 1 && finish 0 diff --git a/src/install.sh b/src/install.sh index 4188e30..18fe266 100644 --- a/src/install.sh +++ b/src/install.sh @@ -31,14 +31,6 @@ set -Eeuo pipefail [[ "${VERSION,,}" == "win16" ]] && VERSION="win2016-eval" [[ "${VERSION,,}" == "win2016" ]] && VERSION="win2016-eval" -if [[ "${VERSION,,}" == "tiny10" ]]; then - VERSION="https://archive.org/download/tiny-10-23-h2/tiny10%20x64%2023h2.iso" -fi - -if [[ "${VERSION,,}" == "tiny11" ]]; then - VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" -fi - CUSTOM="custom.iso" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.iso" @@ -91,14 +83,9 @@ else fi html "$MSG" + TMP="$STORAGE/tmp" - -if [ -z "$MANUAL" ]; then - - MANUAL="N" - [[ "${BASE,,}" == "tiny10"* ]] && MANUAL="Y" - -fi +[ -z "$MANUAL" ] && MANUAL="N" if [ -f "$STORAGE/$BASE" ]; then diff --git a/src/power.sh b/src/power.sh new file mode 100644 index 0000000..75e244b --- /dev/null +++ b/src/power.sh @@ -0,0 +1,151 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# Configure QEMU for graceful shutdown + +QEMU_TERM="" +QEMU_PORT=7100 +QEMU_TIMEOUT=110 +QEMU_PID="/run/shm/qemu.pid" +QEMU_LOG="/run/shm/qemu.log" +QEMU_OUT="/run/shm/qemu.out" +QEMU_END="/run/shm/qemu.end" + +rm -f /run/shm/qemu.* +touch "$QEMU_LOG" + +_trap() { + func="$1" ; shift + for sig ; do + trap "$func $sig" "$sig" + done +} + +finish() { + + local pid + local reason=$1 + + if [ -f "$QEMU_PID" ]; then + + pid=$(<"$QEMU_PID") + echo && error "Forcefully terminating Windows, reason: $reason..." + { kill -15 "$pid" || true; } 2>/dev/null + + while isAlive "$pid"; do + sleep 1 + # Workaround for zombie pid + [ ! -f "$QEMU_PID" ] && break + done + fi + + pid="/var/run/tpm.pid" + [ -f "$pid" ] && pKill "$(<"$pid")" + + closeNetwork + + sleep 1 + echo && echo "❯ Shutdown completed!" + + exit "$reason" +} + +terminal() { + + local dev="" + + if [ -f "$QEMU_OUT" ]; then + + local msg + msg=$(<"$QEMU_OUT") + + if [ -n "$msg" ]; then + + if [[ "${msg,,}" != "char"* || "$msg" != *"serial0)" ]]; then + echo "$msg" + fi + + dev="${msg#*/dev/p}" + dev="/dev/p${dev%% *}" + + fi + fi + + if [ ! -c "$dev" ]; then + dev=$(echo 'info chardev' | nc -q 1 -w 1 localhost "$QEMU_PORT" | tr -d '\000') + dev="${dev#*serial0}" + dev="${dev#*pty:}" + dev="${dev%%$'\n'*}" + dev="${dev%%$'\r'*}" + fi + + if [ ! -c "$dev" ]; then + error "Device '$dev' not found!" + finish 34 && return 34 + fi + + QEMU_TERM="$dev" + return 0 +} + +_graceful_shutdown() { + + local code=$? + + set +e + + if [ -f "$QEMU_END" ]; then + echo && info "Received $1 while already shutting down..." + return + fi + + touch "$QEMU_END" + echo && info "Received $1, sending ACPI shutdown signal..." + + if [ ! -f "$QEMU_PID" ]; then + echo && error "QEMU PID file does not exist?" + finish "$code" && return "$code" + fi + + local pid="" + pid=$(<"$QEMU_PID") + + if ! isAlive "$pid"; then + echo && error "QEMU process does not exist?" + finish "$code" && return "$code" + fi + + # Send ACPI shutdown signal + echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null + + local cnt=0 + while [ "$cnt" -lt "$QEMU_TIMEOUT" ]; do + + sleep 1 + cnt=$((cnt+1)) + + ! isAlive "$pid" && break + # Workaround for zombie pid + [ ! -f "$QEMU_PID" ] && break + + info "Waiting for Windows to shutdown... ($cnt/$QEMU_TIMEOUT)" + + # Send ACPI shutdown signal + echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null + + done + + if [ "$cnt" -ge "$QEMU_TIMEOUT" ]; then + echo && error "Shutdown timeout reached, aborting..." + fi + + finish "$code" && return "$code" +} + +SERIAL="pty" +MONITOR="telnet:localhost:$QEMU_PORT,server,nowait,nodelay" +MONITOR="$MONITOR -daemonize -D $QEMU_LOG -pidfile $QEMU_PID" + +_trap _graceful_shutdown SIGTERM SIGHUP SIGINT SIGABRT SIGQUIT + +return 0 From d3a91d8dfccaf3d1c3a9eb4ada2596ca758f90d8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 24 Jan 2024 05:38:16 +0100 Subject: [PATCH 058/505] feat: Remove ISO after installation (#83) --- src/entry.sh | 3 +- src/install.sh | 657 +++++++++++++++++++++++++++---------------------- src/power.sh | 29 ++- 3 files changed, 390 insertions(+), 299 deletions(-) diff --git a/src/entry.sh b/src/entry.sh index c1cf0d6..412ee75 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -27,6 +27,7 @@ info "Booting $APP using $VERS..." terminal tail -fn +0 "$QEMU_LOG" 2>/dev/null & -cat "$QEMU_TERM" 2>/dev/null & wait $! || : +cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & +wait $! || : sleep 1 && finish 0 diff --git a/src/install.sh b/src/install.sh index 18fe266..de16a69 100644 --- a/src/install.sh +++ b/src/install.sh @@ -4,6 +4,10 @@ set -Eeuo pipefail : "${MANUAL:=""}" : "${VERSION:="win11x64"}" +if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then + VERSION="${VERSION:1:-1}" +fi + [[ "${VERSION,,}" == "11" ]] && VERSION="win11x64" [[ "${VERSION,,}" == "win11" ]] && VERSION="win11x64" @@ -41,332 +45,405 @@ CUSTOM="custom.iso" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.IMG" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="CUSTOM.IMG" -MSG="Windows is being started, please wait..." - -if [ -f "$STORAGE/$CUSTOM" ]; then - - EXTERNAL="Y" - BASE="$CUSTOM" - -else - - CUSTOM="" - - if [[ "${VERSION,,}" == "http"* ]]; then - EXTERNAL="Y" - else - EXTERNAL="N" - fi - - if [[ "$EXTERNAL" != [Yy1]* ]]; then - - BASE="$VERSION.iso" - - if [ ! -f "$STORAGE/$BASE" ]; then - MSG="Windows is being downloaded, please wait..." - fi - - else - - BASE=$(basename "${VERSION%%\?*}") - : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" - BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') - - if [ ! -f "$STORAGE/$BASE" ]; then - MSG="Image '$BASE' is being downloaded, please wait..." - fi - - fi - - [[ "${BASE,,}" == "custom."* ]] && BASE="windows.iso" - -fi - -html "$MSG" - TMP="$STORAGE/tmp" -[ -z "$MANUAL" ] && MANUAL="N" - -if [ -f "$STORAGE/$BASE" ]; then - - # Check if the ISO was already processed by our script - MAGIC=$(dd if="$STORAGE/$BASE" seek=0 bs=1 count=1 status=none | tr -d '\000') - MAGIC="$(printf '%s' "$MAGIC" | od -A n -t x1 -v | tr -d ' \n')" - - if [[ "$MAGIC" == "16" ]]; then - - if [[ "$MANUAL" = [Yy1]* ]]; then - rm -rf "$TMP" - return 0 - fi - - FOUND="N" - if [ -f "$STORAGE/data.img" ] || [ -f "$STORAGE/data.qcow2" ]; then - FOUND="Y" - else - [ -b "${DEVICE:-}" ] && FOUND="Y" - fi - - if [[ "$FOUND" == "Y" ]]; then - rm -rf "$TMP" - return 0 - fi - - fi - - EXTERNAL="Y" - CUSTOM="$BASE" - -fi - -mkdir -p "$TMP" - -if [ ! -f "$STORAGE/$CUSTOM" ]; then - CUSTOM="" - ISO="$TMP/$BASE" -else - ISO="$STORAGE/$CUSTOM" -fi - -rm -f "$TMP/$BASE" - -if [ ! -f "$ISO" ]; then - - if [[ "$EXTERNAL" != [Yy1]* ]]; then - - cd "$TMP" - /run/mido.sh "$VERSION" - cd /run - - else - - info "Downloading $BASE as boot image..." - - # Check if running with interactive TTY or redirected to docker log - if [ -t 1 ]; then - PROGRESS="--progress=bar:noscroll" - else - PROGRESS="--progress=dot:giga" - fi - - { wget "$VERSION" -O "$ISO" -q --no-check-certificate --show-progress "$PROGRESS"; rc=$?; } || : - - (( rc != 0 )) && error "Failed to download $VERSION, reason: $rc" && exit 60 - - fi - - [ ! -f "$ISO" ] && error "Failed to download $VERSION" && exit 61 - -fi - -SIZE=$(stat -c%s "$ISO") -SIZE_GB=$(( (SIZE + 1073741823)/1073741824 )) - -if ((SIZE<10000000)); then - error "Invalid ISO file: Size is smaller than 10 MB" && exit 62 -fi - -SPACE=$(df --output=avail -B 1 "$TMP" | tail -n 1) -SPACE_GB=$(( (SPACE + 1073741823)/1073741824 )) - -if (( SIZE > SPACE )); then - error "Not enough free space in $STORAGE, have $SPACE_GB GB available but need at least $SIZE_GB GB." && exit 63 -fi - -if [ -n "$CUSTOM" ]; then - MSG="Extracting local ISO image..." -else - MSG="Extracting downloaded ISO image..." -fi - -info "$MSG" && html "$MSG" - DIR="$TMP/unpack" -rm -rf "$DIR" - -7z x "$ISO" -o"$DIR" > /dev/null - FB="falling back to manual installation!" ETFS="boot/etfsboot.com" EFISYS="efi/microsoft/boot/efisys_noprompt.bin" -if [ ! -f "$DIR/$ETFS" ] || [ ! -f "$DIR/$EFISYS" ]; then +replaceXML() { - if [ ! -f "$DIR/$ETFS" ]; then - warn "failed to locate file 'etfsboot.com' in ISO image, $FB" - else - warn "failed to locate file 'efisys_noprompt.bin' in ISO image, $FB" + local dir="$1" + local asset="$2" + + local path="$dir/autounattend.xml" + [ -f "$path" ] && mv -f "$asset" "$path" + path="$dir/Autounattend.xml" + [ -f "$path" ] && mv -f "$asset" "$path" + path="$dir/AutoUnattend.xml" + [ -f "$path" ] && mv -f "$asset" "$path" + path="$dir/autounattend.XML" + [ -f "$path" ] && mv -f "$asset" "$path" + path="$dir/Autounattend.XML" + [ -f "$path" ] && mv -f "$asset" "$path" + path="$dir/AutoUnattend.XML" + [ -f "$path" ] && mv -f "$asset" "$path" + path="$dir/AUTOUNATTEND.xml" + [ -f "$path" ] && mv -f "$asset" "$path" + path="$dir/AUTOUNATTEND.XML" + [ -f "$path" ] && mv -f "$asset" "$path" + + return 0 +} + +hasDisk() { + + [ -b "${DEVICE:-}" ] && return 0 + + if [ -f "$STORAGE/data.img" ] || [ -f "$STORAGE/data.qcow2" ]; then + return 0 fi - # Mark ISO as prepared via magic byte - printf '\x16' | dd of="$ISO" bs=1 seek=0 count=1 conv=notrunc status=none + return 1 +} - [[ "$ISO" != "$STORAGE/$BASE" ]] && mv -f "$ISO" "$STORAGE/$BASE" +skipInstall() { + + if hasDisk && [ -f "$STORAGE/windows.boot" ]; then + return 0 + fi + + return 1 +} + +finishInstall() { + + local iso="$1" + + # Mark ISO as prepared via magic byte + printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none rm -f "$STORAGE/windows.ver" + rm -f "$STORAGE/windows.boot" cp /run/version "$STORAGE/windows.ver" rm -rf "$TMP" return 0 -fi +} -[ -z "$CUSTOM" ] && rm -f "$ISO" +startInstall() { -XML="" + local msg="Windows is being started, please wait..." -if [[ "$MANUAL" != [Yy1]* ]]; then + if [ -f "$STORAGE/$CUSTOM" ]; then - if [[ "$EXTERNAL" != [Yy1]* ]]; then - [ -z "$CUSTOM" ] && XML="$VERSION.xml" - fi - - if [ ! -f "/run/assets/$XML" ]; then - - MSG="Detecting Windows version from ISO image..." - info "$MSG" && html "$MSG" - - LOC="$DIR/sources/install.wim" - [ ! -f "$LOC" ] && LOC="$DIR/sources/install.esd" - - if [ -f "$LOC" ]; then - - DETECTED="" - TAG="DISPLAYNAME" - RESULT=$(wimlib-imagex info -xml "$LOC" | tr -d '\000') - NAME=$(sed -n "/$TAG/{s/.*<$TAG>\(.*\)<\/$TAG>.*/\1/;p}" <<< "$RESULT") - - [[ "${NAME,,}" == *"windows 11"* ]] && DETECTED="win11x64" - [[ "${NAME,,}" == *"windows 10"* ]] && DETECTED="win10x64" - [[ "${NAME,,}" == *"windows 8"* ]] && DETECTED="win81x64" - [[ "${NAME,,}" == *"server 2022"* ]] && DETECTED="win2022-eval" - [[ "${NAME,,}" == *"server 2019"* ]] && DETECTED="win2019-eval" - [[ "${NAME,,}" == *"server 2016"* ]] && DETECTED="win2016-eval" - - if [ -z "$DETECTED" ]; then - - TAG="PRODUCTNAME" - NAME2=$(sed -n "/$TAG/{s/.*<$TAG>\(.*\)<\/$TAG>.*/\1/;p}" <<< "$RESULT") - [ -z "$NAME" ] && NAME="$NAME2" - - [[ "${NAME2,,}" == *"windows 11"* ]] && DETECTED="win11x64" - [[ "${NAME2,,}" == *"windows 10"* ]] && DETECTED="win10x64" - [[ "${NAME2,,}" == *"windows 8"* ]] && DETECTED="win81x64" - [[ "${NAME2,,}" == *"server 2022"* ]] && DETECTED="win2022-eval" - [[ "${NAME2,,}" == *"server 2019"* ]] && DETECTED="win2019-eval" - [[ "${NAME2,,}" == *"server 2016"* ]] && DETECTED="win2016-eval" - - fi - - if [ -n "$DETECTED" ]; then - - XML="$DETECTED.xml" - - if [ -f "/run/assets/$XML" ]; then - echo "Detected image of type '$DETECTED', which supports automatic installation." - else - XML="" - warn "detected image of type '$DETECTED', but no matching XML file exists, $FB." - fi - - else - if [ -z "$NAME" ]; then - warn "failed to detect Windows version from image, $FB" - else - if [[ "${NAME,,}" == "windows 7" ]]; then - warn "detected Windows 7 image, $FB" - else - warn "failed to detect Windows version from string '$NAME', $FB" - fi - fi - fi - else - warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" - fi - fi -fi - -ASSET="/run/assets/$XML" - -if [ -f "$ASSET" ]; then - - LOC="$DIR/autounattend.xml" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/Autounattend.xml" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/AutoUnattend.xml" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/autounattend.XML" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/Autounattend.XML" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/AutoUnattend.XML" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/AUTOUNATTEND.xml" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - LOC="$DIR/AUTOUNATTEND.XML" - [ -f "$LOC" ] && mv -f "$ASSET" "$LOC" - - LOC="$DIR/sources/boot.wim" - [ ! -f "$LOC" ] && LOC="$DIR/sources/boot.esd" - - if [ -f "$LOC" ]; then - - MSG="Adding XML file for automatic installation..." - info "$MSG" && html "$MSG" - - RESULT=$(wimlib-imagex info -xml "$LOC" | tr -d '\000') - - if [[ "${RESULT^^}" == *"<IMAGE INDEX=\"2\">"* ]]; then - INDEX="2" - else - INDEX="1" - fi - - wimlib-imagex update "$LOC" "$INDEX" --command "add $ASSET /autounattend.xml" > /dev/null + EXTERNAL="Y" + BASE="$CUSTOM" else - ASSET="" - warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" + CUSTOM="" + + if [[ "${VERSION,,}" == "http"* ]]; then + EXTERNAL="Y" + else + EXTERNAL="N" + fi + + if [[ "$EXTERNAL" != [Yy1]* ]]; then + + BASE="$VERSION.iso" + + if ! skipInstall && [ ! -f "$STORAGE/$BASE" ]; then + msg="Windows is being downloaded, please wait..." + fi + + else + + BASE=$(basename "${VERSION%%\?*}") + : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" + BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') + + if ! skipInstall && [ ! -f "$STORAGE/$BASE" ]; then + msg="Image '$BASE' is being downloaded, please wait..." + fi + + fi + + [[ "${BASE,,}" == "custom."* ]] && BASE="windows.iso" fi + + html "$msg" + + [ -z "$MANUAL" ] && MANUAL="N" + + if [ -f "$STORAGE/$BASE" ]; then + + # Check if the ISO was already processed by our script + local magic=$(dd if="$STORAGE/$BASE" seek=0 bs=1 count=1 status=none | tr -d '\000') + magic="$(printf '%s' "$magic" | od -A n -t x1 -v | tr -d ' \n')" + + if [[ "$magic" == "16" ]]; then + + if hasDisk || [[ "$MANUAL" = [Yy1]* ]]; then + return 1 + fi + + fi + + EXTERNAL="Y" + CUSTOM="$BASE" + + else + + if skipInstall; then + BASE="" + return 1 + fi + + fi + + mkdir -p "$TMP" + + if [ ! -f "$STORAGE/$CUSTOM" ]; then + CUSTOM="" + ISO="$TMP/$BASE" + else + ISO="$STORAGE/$CUSTOM" + fi + + rm -f "$TMP/$BASE" + return 0 +} + +downloadImage() { + + local iso="$1" + local url="$2" + local progress + rm -f "$iso" + + if [[ "$EXTERNAL" != [Yy1]* ]]; then + + cd "$TMP" + /run/mido.sh "$url" + cd /run + + [ ! -f "$iso" ] && error "Failed to download $url" && exit 61 + return 0 + + fi + + info "Downloading $BASE as boot image..." + + # Check if running with interactive TTY or redirected to docker log + if [ -t 1 ]; then + progress="--progress=bar:noscroll" + else + progress="--progress=dot:giga" + fi + + { wget "$url" -O "$iso" -q --no-check-certificate --show-progress "$progress"; rc=$?; } || : + + (( rc != 0 )) && error "Failed to download $url, reason: $rc" && exit 60 + [ ! -f "$iso" ] && error "Failed to download $url" && exit 61 + + return 0 +} + +extractImage() { + + local iso="$1" + local dir="$2" + + local msg="Extracting downloaded ISO image..." + [ -n "$CUSTOM" ] && msg="Extracting local ISO image..." + info "$msg" && html "$msg" + + local size=$(stat -c%s "$iso") + local size_gb=$(( (size + 1073741823)/1073741824 )) + local space=$(df --output=avail -B 1 "$TMP" | tail -n 1) + local space_gb=$(( (space + 1073741823)/1073741824 )) + + if ((size<10000000)); then + error "Invalid ISO file: Size is smaller than 10 MB" && exit 62 + fi + + if (( size > space )); then + error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && exit 63 + fi + + rm -rf "$dir" + 7z x "$iso" -o"$dir" > /dev/null + + if [ ! -f "$dir/$ETFS" ] || [ ! -f "$dir/$EFISYS" ]; then + + if [ ! -f "$dir/$ETFS" ]; then + warn "failed to locate file 'etfsboot.com' in ISO image, $FB" + else + warn "failed to locate file 'efisys_noprompt.bin' in ISO image, $FB" + fi + + return 1 + fi + + [ -z "$CUSTOM" ] && rm -f "$iso" + + return 0 +} + +findVersion() { + + local name="$1" + local detected="" + + [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" + [[ "${name,,}" == *"windows 10"* ]] && detected="win10x64" + [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" + [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" + [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" + [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" + + echo "$detected" + return 0 +} + +selectXML() { + + local dir="$1" + + XML="" + [[ "$MANUAL" == [Yy1]* ]] && return 0 + + if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then + XML="$VERSION.xml" + [ -f "/run/assets/$XML" ] && return 0 + fi + + info "Detecting Windows version from ISO image..." + + local loc="$dir/sources/install.wim" + [ ! -f "$loc" ] && loc="$dir/sources/install.esd" + + if [ ! -f "$loc" ]; then + warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" + return 0 + fi + + local tag="DISPLAYNAME" + local result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') + local name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") + local detected=$(findVersion "$name") + + if [ -z "$detected" ]; then + + tag="PRODUCTNAME" + local name2=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") + [ -z "$name" ] && name="$name2" + detected=$(findVersion "$name2") + + fi + + if [ -n "$detected" ]; then + + if [ -f "/run/assets/$detected.xml" ]; then + XML="$detected.xml" + echo "Detected image of type '$detected', which supports automatic installation." + else + warn "detected image of type '$detected', but no matching XML file exists, $FB." + fi + + else + + if [ -z "$name" ]; then + warn "failed to detect Windows version from image, $FB" + else + if [[ "${name,,}" == "windows 7" ]]; then + warn "detected Windows 7 image, $FB" + else + warn "failed to detect Windows version from string '$name', $FB" + fi + fi + + fi + + return 0 +} + +updateImage() { + + local dir="$1" + local asset="$2" + + [ ! -f "$asset" ] && return 0 + replaceXML "$dir" "$asset" + + local loc="$dir/sources/boot.wim" + [ ! -f "$loc" ] && loc="$dir/sources/boot.esd" + + if [ ! -f "$loc" ]; then + warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" + return 0 + fi + + info "Adding XML file for automatic installation..." + + local index="1" + local result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') + + if [[ "${result^^}" == *"<IMAGE INDEX=\"2\">"* ]]; then + index="2" + fi + + wimlib-imagex update "$loc" "$index" --command "add $asset /autounattend.xml" > /dev/null + + return 0 +} + +buildImage() { + + local dir="$1" + local cat="BOOT.CAT" + local label="${BASE%.*}" + label="${label::30}" + local out="$TMP/$label.tmp" + rm -f "$out" + + local msg="Generating updated ISO image..." + info "$msg" && html "$msg" + + local size=$(du -h -b --max-depth=0 "$dir" | cut -f1) + local size_gb=$(( (size + 1073741823)/1073741824 )) + local space=$(df --output=avail -B 1 "$TMP" | tail -n 1) + local space_gb=$(( (space + 1073741823)/1073741824 )) + + if (( size > space )); then + error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && exit 63 + fi + + genisoimage -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -quiet -V "$label" -udf \ + -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$out" -allow-limited-size "$dir" + + [ -n "$CUSTOM" ] && rm -f "$STORAGE/$CUSTOM" + + if [ -f "$STORAGE/$BASE" ]; then + error "File $STORAGE/$BASE does already exist ?!" && exit 64 + fi + + mv "$out" "$STORAGE/$BASE" + return 0 +} + +###################################### + +if ! startInstall; then + rm -rf "$TMP" + return 0 fi -CAT="BOOT.CAT" -LABEL="${BASE%.*}" -LABEL="${LABEL::30}" -OUT="$TMP/$LABEL.tmp" -rm -f "$OUT" - -SPACE=$(df --output=avail -B 1 "$TMP" | tail -n 1) -SPACE_GB=$(( (SPACE + 1073741823)/1073741824 )) - -if (( SIZE > SPACE )); then - error "Not enough free space in $STORAGE, have $SPACE_GB GB available but need at least $SIZE_GB GB." && exit 63 +if [ ! -f "$ISO" ]; then + downloadImage "$ISO" "$VERSION" fi -MSG="Generating the ISO image..." -info "$MSG" && html "$MSG" +if ! extractImage "$ISO" "$DIR"; then -genisoimage -b "$ETFS" -no-emul-boot -c "$CAT" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -quiet -V "$LABEL" -udf \ - -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$OUT" -allow-limited-size "$DIR" + if [[ "$ISO" != "$STORAGE/$BASE" ]]; then + mv -f "$ISO" "$STORAGE/$BASE" + fi -# Mark ISO as prepared via magic byte -printf '\x16' | dd of="$OUT" bs=1 seek=0 count=1 conv=notrunc status=none + finishInstall "$STORAGE/$BASE" + return 0 -[ -n "$CUSTOM" ] && rm -f "$STORAGE/$CUSTOM" - -if [ -f "$STORAGE/$BASE" ]; then - error "File $STORAGE/$BASE does already exist ?!" && exit 64 fi -mv "$OUT" "$STORAGE/$BASE" +selectXML "$DIR" -rm -f "$STORAGE/windows.ver" -cp /run/version "$STORAGE/windows.ver" +updateImage "$DIR" "/run/assets/$XML" -rm -rf "$TMP" +buildImage "$DIR" + +finishInstall "$STORAGE/$BASE" html "Successfully prepared image for installation..." - return 0 diff --git a/src/power.sh b/src/power.sh index 75e244b..32cccf1 100644 --- a/src/power.sh +++ b/src/power.sh @@ -7,6 +7,7 @@ QEMU_TERM="" QEMU_PORT=7100 QEMU_TIMEOUT=110 QEMU_PID="/run/shm/qemu.pid" +QEMU_PTY="/run/shm/qemu.pty" QEMU_LOG="/run/shm/qemu.log" QEMU_OUT="/run/shm/qemu.out" QEMU_END="/run/shm/qemu.end" @@ -29,7 +30,7 @@ finish() { if [ -f "$QEMU_PID" ]; then pid=$(<"$QEMU_PID") - echo && error "Forcefully terminating Windows, reason: $reason..." + error "Forcefully terminating Windows, reason: $reason..." { kill -15 "$pid" || true; } 2>/dev/null while isAlive "$pid"; do @@ -44,8 +45,8 @@ finish() { closeNetwork - sleep 1 - echo && echo "❯ Shutdown completed!" + sleep 0.5 + echo "❯ Shutdown completed!" exit "$reason" } @@ -95,15 +96,15 @@ _graceful_shutdown() { set +e if [ -f "$QEMU_END" ]; then - echo && info "Received $1 while already shutting down..." + info "Received $1 while already shutting down..." return fi touch "$QEMU_END" - echo && info "Received $1, sending ACPI shutdown signal..." + info "Received $1, sending ACPI shutdown signal..." if [ ! -f "$QEMU_PID" ]; then - echo && error "QEMU PID file does not exist?" + error "QEMU PID file does not exist?" finish "$code" && return "$code" fi @@ -111,10 +112,22 @@ _graceful_shutdown() { pid=$(<"$QEMU_PID") if ! isAlive "$pid"; then - echo && error "QEMU process does not exist?" + error "QEMU process does not exist?" finish "$code" && return "$code" fi + if [ ! f "$STORAGE/windows.boot" ] && [ -f "$QEMU_PTY" ]; then + if ! grep -Fq "Windows Boot Manager" "$QEMU_PTY"; then + info "Cannot send ACPI signal during Windows setup, aborting..." + finish "$code" && return "$code" + else + if [ -f "$STORAGE/$BASE" ]; then + rm -f "$STORAGE/$BASE" + touch "$STORAGE/windows.boot" + fi + fi + fi + # Send ACPI shutdown signal echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null @@ -136,7 +149,7 @@ _graceful_shutdown() { done if [ "$cnt" -ge "$QEMU_TIMEOUT" ]; then - echo && error "Shutdown timeout reached, aborting..." + error "Shutdown timeout reached, aborting..." fi finish "$code" && return "$code" From ca54001bc0b678281f4d7e65d884f4a87bec2617 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 24 Jan 2024 05:54:26 +0100 Subject: [PATCH 059/505] fix: Shellcheck (#84) --- .github/workflows/check.yml | 2 +- src/install.sh | 40 +++++++++++++++++++++---------------- src/power.sh | 2 +- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index aff1be3..133ad84 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,7 +11,7 @@ jobs: - name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: - SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2034 -e SC2064 -e SC2317 -e SC2153 + SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 - name: Validate XML uses: action-pack/valid-xml@v1 with: diff --git a/src/install.sh b/src/install.sh index de16a69..2ee7c31 100644 --- a/src/install.sh +++ b/src/install.sh @@ -113,6 +113,7 @@ finishInstall() { startInstall() { + local magic local msg="Windows is being started, please wait..." if [ -f "$STORAGE/$CUSTOM" ]; then @@ -161,7 +162,7 @@ startInstall() { if [ -f "$STORAGE/$BASE" ]; then # Check if the ISO was already processed by our script - local magic=$(dd if="$STORAGE/$BASE" seek=0 bs=1 count=1 status=none | tr -d '\000') + magic=$(dd if="$STORAGE/$BASE" seek=0 bs=1 count=1 status=none | tr -d '\000') magic="$(printf '%s' "$magic" | od -A n -t x1 -v | tr -d ' \n')" if [[ "$magic" == "16" ]]; then @@ -236,15 +237,16 @@ extractImage() { local iso="$1" local dir="$2" - + local size size_gb space space_gb + local msg="Extracting downloaded ISO image..." [ -n "$CUSTOM" ] && msg="Extracting local ISO image..." info "$msg" && html "$msg" - local size=$(stat -c%s "$iso") - local size_gb=$(( (size + 1073741823)/1073741824 )) - local space=$(df --output=avail -B 1 "$TMP" | tail -n 1) - local space_gb=$(( (space + 1073741823)/1073741824 )) + size=$(stat -c%s "$iso") + size_gb=$(( (size + 1073741823)/1073741824 )) + space=$(df --output=avail -B 1 "$TMP" | tail -n 1) + space_gb=$(( (space + 1073741823)/1073741824 )) if ((size<10000000)); then error "Invalid ISO file: Size is smaller than 10 MB" && exit 62 @@ -292,6 +294,7 @@ findVersion() { selectXML() { local dir="$1" + local tag result name name2 detected XML="" [[ "$MANUAL" == [Yy1]* ]] && return 0 @@ -311,15 +314,15 @@ selectXML() { return 0 fi - local tag="DISPLAYNAME" - local result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') - local name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") - local detected=$(findVersion "$name") + tag="DISPLAYNAME" + result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') + name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") + detected=$(findVersion "$name") if [ -z "$detected" ]; then tag="PRODUCTNAME" - local name2=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") + name2=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") [ -z "$name" ] && name="$name2" detected=$(findVersion "$name2") @@ -355,6 +358,7 @@ updateImage() { local dir="$1" local asset="$2" + local index result [ ! -f "$asset" ] && return 0 replaceXML "$dir" "$asset" @@ -369,8 +373,8 @@ updateImage() { info "Adding XML file for automatic installation..." - local index="1" - local result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') + index="1" + result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') if [[ "${result^^}" == *"<IMAGE INDEX=\"2\">"* ]]; then index="2" @@ -386,6 +390,8 @@ buildImage() { local dir="$1" local cat="BOOT.CAT" local label="${BASE%.*}" + local size size_gb space space_gb + label="${label::30}" local out="$TMP/$label.tmp" rm -f "$out" @@ -393,10 +399,10 @@ buildImage() { local msg="Generating updated ISO image..." info "$msg" && html "$msg" - local size=$(du -h -b --max-depth=0 "$dir" | cut -f1) - local size_gb=$(( (size + 1073741823)/1073741824 )) - local space=$(df --output=avail -B 1 "$TMP" | tail -n 1) - local space_gb=$(( (space + 1073741823)/1073741824 )) + size=$(du -h -b --max-depth=0 "$dir" | cut -f1) + size_gb=$(( (size + 1073741823)/1073741824 )) + space=$(df --output=avail -B 1 "$TMP" | tail -n 1) + space_gb=$(( (space + 1073741823)/1073741824 )) if (( size > space )); then error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && exit 63 diff --git a/src/power.sh b/src/power.sh index 32cccf1..74f5d0d 100644 --- a/src/power.sh +++ b/src/power.sh @@ -116,7 +116,7 @@ _graceful_shutdown() { finish "$code" && return "$code" fi - if [ ! f "$STORAGE/windows.boot" ] && [ -f "$QEMU_PTY" ]; then + if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$QEMU_PTY" ]; then if ! grep -Fq "Windows Boot Manager" "$QEMU_PTY"; then info "Cannot send ACPI signal during Windows setup, aborting..." finish "$code" && return "$code" From 2da452401b4659356d7577dbaa660ba075ba192e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 24 Jan 2024 17:14:41 +0100 Subject: [PATCH 060/505] feat: Override environment variable (#87) --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index d2a8dd6..3bc1007 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,9 +21,11 @@ RUN chmod +x /run/*.sh EXPOSE 8006 3389 VOLUME /storage +ENV BOOT "" ENV RAM_SIZE "4G" ENV CPU_CORES "2" ENV DISK_SIZE "64G" +ENV VERSION "win11" ARG VERSION_ARG "0.0" RUN echo "$VERSION_ARG" > /run/version From bc2d8fff5437895da7c5efcca3f4d1b6c8de4fe7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 24 Jan 2024 23:49:45 +0100 Subject: [PATCH 061/505] build: Import QEMU filesystem (#88) --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3bc1007..c2968e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,5 @@ -FROM qemux/qemu-docker:latest +FROM scratch +COPY --from=qemux/qemu-docker:latest / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND "noninteractive" @@ -21,7 +22,6 @@ RUN chmod +x /run/*.sh EXPOSE 8006 3389 VOLUME /storage -ENV BOOT "" ENV RAM_SIZE "4G" ENV CPU_CORES "2" ENV DISK_SIZE "64G" From 82ad512dca0c2ef3c671341d147983d4244d3f52 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 25 Jan 2024 00:18:59 +0100 Subject: [PATCH 062/505] fix: Copy xml instead of move (#89) --- src/install.sh | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/install.sh b/src/install.sh index 2ee7c31..161259c 100644 --- a/src/install.sh +++ b/src/install.sh @@ -57,21 +57,21 @@ replaceXML() { local asset="$2" local path="$dir/autounattend.xml" - [ -f "$path" ] && mv -f "$asset" "$path" + [ -f "$path" ] && cp "$asset" "$path" path="$dir/Autounattend.xml" - [ -f "$path" ] && mv -f "$asset" "$path" + [ -f "$path" ] && cp "$asset" "$path" path="$dir/AutoUnattend.xml" - [ -f "$path" ] && mv -f "$asset" "$path" + [ -f "$path" ] && cp "$asset" "$path" path="$dir/autounattend.XML" - [ -f "$path" ] && mv -f "$asset" "$path" + [ -f "$path" ] && cp "$asset" "$path" path="$dir/Autounattend.XML" - [ -f "$path" ] && mv -f "$asset" "$path" + [ -f "$path" ] && cp "$asset" "$path" path="$dir/AutoUnattend.XML" - [ -f "$path" ] && mv -f "$asset" "$path" + [ -f "$path" ] && cp "$asset" "$path" path="$dir/AUTOUNATTEND.xml" - [ -f "$path" ] && mv -f "$asset" "$path" + [ -f "$path" ] && cp "$asset" "$path" path="$dir/AUTOUNATTEND.XML" - [ -f "$path" ] && mv -f "$asset" "$path" + [ -f "$path" ] && cp "$asset" "$path" return 0 } @@ -103,7 +103,6 @@ finishInstall() { # Mark ISO as prepared via magic byte printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none - rm -f "$STORAGE/windows.ver" rm -f "$STORAGE/windows.boot" cp /run/version "$STORAGE/windows.ver" @@ -238,7 +237,7 @@ extractImage() { local iso="$1" local dir="$2" local size size_gb space space_gb - + local msg="Extracting downloaded ISO image..." [ -n "$CUSTOM" ] && msg="Extracting local ISO image..." info "$msg" && html "$msg" From 44c6b9989bbd4c147df87a4ab5e276f3c5ee0bd2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 25 Jan 2024 16:15:18 +0100 Subject: [PATCH 063/505] feat: Support more Windows versions (#92) --- assets/win10x64.xml | 17 ++- assets/win11x64.xml | 17 ++- assets/win2016-eval.xml | 17 ++- assets/win2019-eval.xml | 17 ++- assets/win2022-eval.xml | 17 ++- assets/win7x64-ultimate.xml | 222 ++++++++++++++++++++++++++++++++++++ assets/win81x64.xml | 17 ++- readme.md | 4 +- src/install.sh | 195 +++++++++++++++++++++++-------- src/power.sh | 22 ++-- 10 files changed, 482 insertions(+), 63 deletions(-) create mode 100644 assets/win7x64-ultimate.xml diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 88a117e..74f7cd7 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -170,6 +170,21 @@ </OEMInformation> <OEMName>Windows for Docker</OEMName> </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> @@ -307,7 +322,7 @@ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Home</NetworkLocation> + <NetworkLocation>Other</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index a993f01..2363a2f 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -188,6 +188,21 @@ </OEMInformation> <OEMName>Windows for Docker</OEMName> </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> @@ -325,7 +340,7 @@ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Home</NetworkLocation> + <NetworkLocation>Other</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index bd6d3a4..7356e33 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -172,6 +172,21 @@ </OEMInformation> <OEMName>Windows for Docker</OEMName> </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> @@ -237,7 +252,7 @@ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Home</NetworkLocation> + <NetworkLocation>Other</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 8ea29bd..4caa666 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -176,6 +176,21 @@ </OEMInformation> <OEMName>Windows for Docker</OEMName> </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> @@ -241,7 +256,7 @@ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Home</NetworkLocation> + <NetworkLocation>Other</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 5e9e275..7bebb6a 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -176,6 +176,21 @@ </OEMInformation> <OEMName>Windows for Docker</OEMName> </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> @@ -241,7 +256,7 @@ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Home</NetworkLocation> + <NetworkLocation>Other</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml new file mode 100644 index 0000000..933d82d --- /dev/null +++ b/assets/win7x64-ultimate.xml @@ -0,0 +1,222 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + <TypeID>0x27</TypeID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/INDEX</Key> + <Value>1</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>D4F6K-QK3RD-TMVMJ-BBMRX-3MBMV</Key> + <WillShowUI>OnError</WillShowUI> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w7\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 8f2f856..1f94aa7 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -173,6 +173,21 @@ </OEMInformation> <OEMName>Windows for Docker</OEMName> </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> @@ -216,7 +231,7 @@ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Home</NetworkLocation> + <NetworkLocation>Other</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/readme.md b/readme.md index 3c479dd..85d87a7 100644 --- a/readme.md +++ b/readme.md @@ -81,7 +81,9 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti - ```win22``` = Windows Server 2022 - ```win19``` = Windows Server 2019 - ```win16``` = Windows Server 2016 - + - ```tiny11``` = Tiny 11 (Slow download) + - ```win7``` = Windows 7 (Slow download) + * ### How do I increase the amount of CPU or RAM? By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. diff --git a/src/install.sh b/src/install.sh index 161259c..14edce5 100644 --- a/src/install.sh +++ b/src/install.sh @@ -20,6 +20,10 @@ fi [[ "${VERSION,,}" == "win81" ]] && VERSION="win81x64" [[ "${VERSION,,}" == "win8" ]] && VERSION="win81x64" +[[ "${VERSION,,}" == "7" ]] && VERSION="win7x64-ultimate" +[[ "${VERSION,,}" == "win7" ]] && VERSION="win7x64-ultimate" +[[ "${VERSION,,}" == "win7x64" ]] && VERSION="win7x64-ultimate" + [[ "${VERSION,,}" == "22" ]] && VERSION="win2022-eval" [[ "${VERSION,,}" == "2022" ]] && VERSION="win2022-eval" [[ "${VERSION,,}" == "win22" ]] && VERSION="win2022-eval" @@ -35,6 +39,10 @@ fi [[ "${VERSION,,}" == "win16" ]] && VERSION="win2016-eval" [[ "${VERSION,,}" == "win2016" ]] && VERSION="win2016-eval" +if [[ "${VERSION,,}" == "tiny11" ]]; then + VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" +fi + CUSTOM="custom.iso" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.iso" @@ -106,10 +114,28 @@ finishInstall() { rm -f "$STORAGE/windows.boot" cp /run/version "$STORAGE/windows.ver" + if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then + touch "$STORAGE/windows.old" + else + rm -f "$STORAGE/windows.old" + fi + rm -rf "$TMP" return 0 } +abortInstall() { + + local iso="$1" + + if [[ "$iso" != "$STORAGE/$BASE" ]]; then + mv -f "$iso" "$STORAGE/$BASE" + fi + + finishInstall "$STORAGE/$BASE" + return 0 +} + startInstall() { local magic @@ -207,12 +233,13 @@ downloadImage() { if [[ "$EXTERNAL" != [Yy1]* ]]; then cd "$TMP" - /run/mido.sh "$url" + if ! /run/mido.sh "$url"; then + return 1 + fi cd /run - [ ! -f "$iso" ] && error "Failed to download $url" && exit 61 + [ ! -f "$iso" ] && return 1 return 0 - fi info "Downloading $BASE as boot image..." @@ -225,10 +252,9 @@ downloadImage() { fi { wget "$url" -O "$iso" -q --no-check-certificate --show-progress "$progress"; rc=$?; } || : - (( rc != 0 )) && error "Failed to download $url, reason: $rc" && exit 60 - [ ! -f "$iso" ] && error "Failed to download $url" && exit 61 + [ ! -f "$iso" ] && return 1 return 0 } @@ -256,7 +282,11 @@ extractImage() { fi rm -rf "$dir" - 7z x "$iso" -o"$dir" > /dev/null + + if ! 7z x "$iso" -o"$dir" > /dev/null; then + error "Failed to extract ISO file!" + exit 66 + fi if [ ! -f "$dir/$ETFS" ] || [ ! -f "$dir/$EFISYS" ]; then @@ -266,11 +296,10 @@ extractImage() { warn "failed to locate file 'efisys_noprompt.bin' in ISO image, $FB" fi + BOOT_MODE="windows_legacy" return 1 fi - [ -z "$CUSTOM" ] && rm -f "$iso" - return 0 } @@ -285,22 +314,30 @@ findVersion() { [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" + [[ "${name,,}" == *"windows 7"* ]] && detected="win7x64-ultimate" echo "$detected" return 0 } -selectXML() { +detectImage() { local dir="$1" - local tag result name name2 detected + local tag result name name2 XML="" - [[ "$MANUAL" == [Yy1]* ]] && return 0 + DETECTED="" if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then - XML="$VERSION.xml" - [ -f "/run/assets/$XML" ] && return 0 + DETECTED="$VERSION" + if [[ "$MANUAL" != [Yy1]* ]]; then + if [ -f "/run/assets/$DETECTED.xml" ]; then + XML="$DETECTED.xml" + else + warn "image type is '$DETECTED', but no matching XML file exists, $FB." + fi + fi + return 0 fi info "Detecting Windows version from ISO image..." @@ -310,53 +347,71 @@ selectXML() { if [ ! -f "$loc" ]; then warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" - return 0 + BOOT_MODE="windows_legacy" + return 1 fi tag="DISPLAYNAME" result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") - detected=$(findVersion "$name") + DETECTED=$(findVersion "$name") - if [ -z "$detected" ]; then + if [ -z "$DETECTED" ]; then tag="PRODUCTNAME" name2=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") [ -z "$name" ] && name="$name2" - detected=$(findVersion "$name2") + DETECTED=$(findVersion "$name2") fi - if [ -n "$detected" ]; then + if [ -n "$DETECTED" ]; then - if [ -f "/run/assets/$detected.xml" ]; then - XML="$detected.xml" - echo "Detected image of type '$detected', which supports automatic installation." + if [ -f "/run/assets/$DETECTED.xml" ]; then + [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" + info "Detected image of type: '$DETECTED'" else - warn "detected image of type '$detected', but no matching XML file exists, $FB." + warn "detected image of type '$DETECTED', but no matching XML file exists, $FB." fi else if [ -z "$name" ]; then - warn "failed to detect Windows version from image, $FB" + warn "failed to determine Windows version from image, $FB" else - if [[ "${name,,}" == "windows 7" ]]; then - warn "detected Windows 7 image, $FB" - else - warn "failed to detect Windows version from string '$name', $FB" - fi + warn "failed to determine Windows version from string '$name', $FB" fi fi +} + +prepareImage() { + + local iso="$1" + local dir="$2" + + [[ "${DETECTED,,}" != "win7x64"* ]] && return 0 + + ETFS="boot.img" + BOOT_MODE="windows_legacy" + + local len offset + len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") + offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") + + if ! dd "if=$iso" "of=$dir/$ETFS" bs=2048 "count=$len" "skip=$offset" status=none; then + error "Failed to extract boot image from ISO!" + exit 67 + fi return 0 } updateImage() { - local dir="$1" - local asset="$2" + local iso="$1" + local dir="$2" + local asset="/run/assets/$3" local index result [ ! -f "$asset" ] && return 0 @@ -367,7 +422,8 @@ updateImage() { if [ ! -f "$loc" ]; then warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" - return 0 + BOOT_MODE="windows_legacy" + return 1 fi info "Adding XML file for automatic installation..." @@ -379,7 +435,10 @@ updateImage() { index="2" fi - wimlib-imagex update "$loc" "$index" --command "add $asset /autounattend.xml" > /dev/null + if ! wimlib-imagex update "$loc" "$index" --command "add $asset /autounattend.xml" > /dev/null; then + warn "failed to add XML to ISO image, $FB" + return 1 + fi return 0 } @@ -389,6 +448,7 @@ buildImage() { local dir="$1" local cat="BOOT.CAT" local label="${BASE%.*}" + local log="/run/shm/iso.log" local size size_gb space space_gb label="${label::30}" @@ -404,16 +464,37 @@ buildImage() { space_gb=$(( (space + 1073741823)/1073741824 )) if (( size > space )); then - error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && exit 63 + error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." + return 1 fi - genisoimage -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -quiet -V "$label" -udf \ - -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -o "$out" -allow-limited-size "$dir" + if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then - [ -n "$CUSTOM" ] && rm -f "$STORAGE/$CUSTOM" + if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ + -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log"; then + [ -f "$log" ] && echo "$(<"$log")" + return 1 + fi + + else + + if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ + -udf -allow-limited-size -quiet "$dir" 2> "$log"; then + [ -f "$log" ] && echo "$(<"$log")" + return 1 + fi + + fi + + local error="" + local hide="Warning: creating filesystem that does not conform to ISO-9660." + + [ -f "$log" ] && error="$(<"$log")" + [[ "$error" != "$hide" ]] && echo "$error" if [ -f "$STORAGE/$BASE" ]; then - error "File $STORAGE/$BASE does already exist ?!" && exit 64 + error "File $STORAGE/$BASE does already exist?!" + return 1 fi mv "$out" "$STORAGE/$BASE" @@ -423,30 +504,48 @@ buildImage() { ###################################### if ! startInstall; then + + if [ -f "$STORAGE/windows.old" ]; then + BOOT_MODE="windows_legacy" + fi + rm -rf "$TMP" return 0 fi if [ ! -f "$ISO" ]; then - downloadImage "$ISO" "$VERSION" + if ! downloadImage "$ISO" "$VERSION"; then + error "Failed to download $VERSION" + exit 61 + fi fi if ! extractImage "$ISO" "$DIR"; then - - if [[ "$ISO" != "$STORAGE/$BASE" ]]; then - mv -f "$ISO" "$STORAGE/$BASE" - fi - - finishInstall "$STORAGE/$BASE" + abortInstall "$ISO" return 0 - fi -selectXML "$DIR" +if ! detectImage "$DIR"; then + abortInstall "$ISO" + return 0 +fi -updateImage "$DIR" "/run/assets/$XML" +if ! prepareImage "$ISO" "$DIR"; then + abortInstall "$ISO" + return 0 +fi -buildImage "$DIR" +if ! updateImage "$ISO" "$DIR" "$XML"; then + abortInstall "$ISO" + return 0 +fi + +rm -f "$ISO" + +if ! buildImage "$DIR"; then + error "Failed to build image!" + exit 65 +fi finishInstall "$STORAGE/$BASE" diff --git a/src/power.sh b/src/power.sh index 74f5d0d..e7f9b97 100644 --- a/src/power.sh +++ b/src/power.sh @@ -116,14 +116,15 @@ _graceful_shutdown() { finish "$code" && return "$code" fi - if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$QEMU_PTY" ]; then - if ! grep -Fq "Windows Boot Manager" "$QEMU_PTY"; then - info "Cannot send ACPI signal during Windows setup, aborting..." - finish "$code" && return "$code" - else - if [ -f "$STORAGE/$BASE" ]; then - rm -f "$STORAGE/$BASE" - touch "$STORAGE/windows.boot" + local remove_iso="" + + if [ ! -f "$STORAGE/windows.old" ]; then + if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$QEMU_PTY" ]; then + if grep -Fq "Windows Boot Manager" "$QEMU_PTY"; then + [ -f "$STORAGE/$BASE" ] && remove_iso="y" + else + info "Cannot send ACPI signal during Windows setup, aborting..." + finish "$code" && return "$code" fi fi fi @@ -150,6 +151,11 @@ _graceful_shutdown() { if [ "$cnt" -ge "$QEMU_TIMEOUT" ]; then error "Shutdown timeout reached, aborting..." + else + if [ -n "$remove_iso" ]; then + rm -f "$STORAGE/$BASE" + touch "$STORAGE/windows.boot" + fi fi finish "$code" && return "$code" From 990159fa4bedf8e5bc001ddd9b00a9e3c185eef4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 16:16:32 +0100 Subject: [PATCH 064/505] chore(deps): update peter-evans/dockerhub-description action to v4 (#93) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/hub.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/hub.yml b/.github/workflows/hub.yml index 789507d..0e0bcd1 100644 --- a/.github/workflows/hub.yml +++ b/.github/workflows/hub.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v4 - name: Docker Hub Description - uses: peter-evans/dockerhub-description@v3 + uses: peter-evans/dockerhub-description@v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} From 803af6dbe00f93388ccf2bf8f6e66db9ba26ae80 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Jan 2024 00:39:23 +0100 Subject: [PATCH 065/505] fix: Status message (#95) --- src/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index 14edce5..a02c916 100644 --- a/src/install.sh +++ b/src/install.sh @@ -455,7 +455,7 @@ buildImage() { local out="$TMP/$label.tmp" rm -f "$out" - local msg="Generating updated ISO image..." + local msg="Updating ISO image..." info "$msg" && html "$msg" size=$(du -h -b --max-depth=0 "$dir" | cut -f1) From 9bb4a4a3220d4e4537332ecfad88a24f0a5fe1d8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Jan 2024 04:54:24 +0100 Subject: [PATCH 066/505] fix: Windows configuration (#96) --- .github/workflows/build.yml | 1 - assets/win10x64.xml | 48 +++++++++++++++++------- assets/win11x64.xml | 50 ++++++++++++++++++------- assets/win2016-eval.xml | 48 +++++++++++++++++------- assets/win2019-eval.xml | 48 +++++++++++++++++------- assets/win2022-eval.xml | 48 +++++++++++++++++------- assets/win7x64-ultimate.xml | 61 +++++++++++++++++++++++++----- assets/win81x64.xml | 74 +++++++++++++++++++++++++------------ readme.md | 2 +- 9 files changed, 281 insertions(+), 99 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 099a240..6db1a6a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,6 @@ on: paths-ignore: - '**/*.md' - '**/*.yml' - - '**/*.xml' - '.gitignore' - '.dockerignore' - '.github/**' diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 74f7cd7..bde8809 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -171,19 +171,19 @@ <OEMName>Windows for Docker</OEMName> </component> <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableWER>1</DisableWER> + <DisableWER>1</DisableWER> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> @@ -351,24 +351,46 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> + <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 2363a2f..d9dde21 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -189,19 +189,19 @@ <OEMName>Windows for Docker</OEMName> </component> <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableWER>1</DisableWER> + <DisableWER>1</DisableWER> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> @@ -364,10 +364,12 @@ <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> @@ -377,24 +379,46 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> + <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>8</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 7356e33..1c0bc0a 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -173,19 +173,19 @@ <OEMName>Windows for Docker</OEMName> </component> <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableWER>1</DisableWER> + <DisableWER>1</DisableWER> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> @@ -278,24 +278,46 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> + <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 4caa666..c3a4106 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -177,19 +177,19 @@ <OEMName>Windows for Docker</OEMName> </component> <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableWER>1</DisableWER> + <DisableWER>1</DisableWER> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> @@ -285,24 +285,46 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> + <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 7bebb6a..0799b24 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -177,19 +177,19 @@ <OEMName>Windows for Docker</OEMName> </component> <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableWER>1</DisableWER> + <DisableWER>1</DisableWER> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> @@ -285,24 +285,46 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> + <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index 933d82d..8559b3d 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -141,19 +141,19 @@ <SkipAutoActivation>true</SkipAutoActivation> </component> <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableWER>1</DisableWER> + <DisableWER>1</DisableWER> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> @@ -213,9 +213,52 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 1f94aa7..d4d6591 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -116,31 +116,31 @@ <Path>D:\viostor\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w8.1\amd64</Path> + <Path>D:\NetKVM\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w8.1\amd64</Path> + <Path>D:\Balloon\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w8.1\amd64</Path> + <Path>D:\pvpanic\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w8.1\amd64</Path> + <Path>D:\qemupciserial\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w8.1\amd64</Path> + <Path>D:\qxldod\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w8.1\amd64</Path> + <Path>D:\vioinput\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w8.1\amd64</Path> + <Path>D:\viorng\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="9"> <Path>D:\vioscsi\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w8.1\amd64</Path> + <Path>D:\vioserial\w10\amd64</Path> </PathAndCredentials> </DriverPaths> </component> @@ -174,19 +174,19 @@ <OEMName>Windows for Docker</OEMName> </component> <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableWER>1</DisableWER> + <DisableWER>1</DisableWER> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> - <Help_Page>about:blank</Help_Page> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> @@ -251,24 +251,52 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> + <Order>5</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v HideWizard /t REG_DWORD /d 1 /f</CommandLine> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/readme.md b/readme.md index 85d87a7..6fcf6df 100644 --- a/readme.md +++ b/readme.md @@ -120,7 +120,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti * ### How do I perform a manual installation? - If you prefer to perform the installation manually, start a clean container with the following environment variable: + It's best to use the automatic installation, as it optimizes various settings for use with this container. However, if you insist on performing the installation manually, start a clean container with the following environment variable: ```yaml environment: From 1c79e3e1f8bcd5cffcfd5e7d16e7311f310caca8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Jan 2024 06:05:01 +0100 Subject: [PATCH 067/505] feat: Support Windows 10 LTSC (#97) --- assets/win10x64-ltsc.xml | 401 +++++++++++++++++++++++++++++++++++++++ readme.md | 2 + src/install.sh | 24 ++- 3 files changed, 425 insertions(+), 2 deletions(-) create mode 100644 assets/win10x64-ltsc.xml diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml new file mode 100644 index 0000000..6b2f003 --- /dev/null +++ b/assets/win10x64-ltsc.xml @@ -0,0 +1,401 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- Windows RE Tools partition --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>300</Size> + </CreatePartition> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>EFI</Type> + <Size>100</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>4</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- Windows RE Tools partition --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>WINRE</Label> + <Format>NTFS</Format> + <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> + </ModifyPartition> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>4</Order> + <PartitionID>4</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/image/index</Key> + <Value>1</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>4</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey /> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w10\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>about:blank</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>fsutil.exe behavior set disableLastAccess 1</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>5</Order> + <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>6</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>7</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>8</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>9</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>10</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>11</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>12</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>13</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>14</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>15</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>16</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>17</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>18</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>19</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + </settings> + <settings pass="auditSystem" /> + <settings pass="auditUser" /> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + <VMModeOptimizations> + <SkipWinREInitialization>true</SkipWinREInitialization> + </VMModeOptimizations> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/readme.md b/readme.md index 6fcf6df..d15adbd 100644 --- a/readme.md +++ b/readme.md @@ -77,11 +77,13 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti - ```win11``` = Windows 11 - ```win10``` = Windows 10 + - ```ltsc10``` = Windows 10 LTSC - ```win81``` = Windows 8.1 - ```win22``` = Windows Server 2022 - ```win19``` = Windows Server 2019 - ```win16``` = Windows Server 2016 - ```tiny11``` = Tiny 11 (Slow download) + - ```tiny10``` = Tiny 10 (Slow download) - ```win7``` = Windows 7 (Slow download) * ### How do I increase the amount of CPU or RAM? diff --git a/src/install.sh b/src/install.sh index a02c916..9c9578d 100644 --- a/src/install.sh +++ b/src/install.sh @@ -39,10 +39,19 @@ fi [[ "${VERSION,,}" == "win16" ]] && VERSION="win2016-eval" [[ "${VERSION,,}" == "win2016" ]] && VERSION="win2016-eval" +[[ "${VERSION,,}" == "ltsc10" ]] && VERSION="win10x64-enterprise-ltsc-eval" +[[ "${VERSION,,}" == "10ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" +[[ "${VERSION,,}" == "win10-ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" +[[ "${VERSION,,}" == "win10x64-ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" + if [[ "${VERSION,,}" == "tiny11" ]]; then VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" fi +if [[ "${VERSION,,}" == "tiny10" ]]; then + VERSION="https://archive.org/download/tiny-10-23-h2/tiny10%20x64%2023h2.iso" +fi + CUSTOM="custom.iso" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.iso" @@ -309,12 +318,19 @@ findVersion() { local detected="" [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" - [[ "${name,,}" == *"windows 10"* ]] && detected="win10x64" [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" [[ "${name,,}" == *"windows 7"* ]] && detected="win7x64-ultimate" + + if [[ "${name,,}" == *"windows 10"* ]]; then + if [[ "${name,,}" == *"enterprise ltsc"* ]]; then + detected="win10x64-ltsc" + else + detected="win10x64" + fi + fi echo "$detected" return 0 @@ -329,7 +345,11 @@ detectImage() { DETECTED="" if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then - DETECTED="$VERSION" + if [[ "${VERSION,,}" != "win10x64-enterprise-ltsc-eval" ]]; then + DETECTED="$VERSION" + else + DETECTED="win10x64-ltsc" + fi if [[ "$MANUAL" != [Yy1]* ]]; then if [ -f "/run/assets/$DETECTED.xml" ]; then XML="$DETECTED.xml" From 3884da71cad66a0c4fb58ced4022ccfb8d374553 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Jan 2024 06:27:36 +0100 Subject: [PATCH 068/505] docs: Readme (#98) --- readme.md | 1 - 1 file changed, 1 deletion(-) diff --git a/readme.md b/readme.md index d15adbd..9123651 100644 --- a/readme.md +++ b/readme.md @@ -15,7 +15,6 @@ Windows in a docker container. ## Features - - Multi-platform - ISO downloader - KVM acceleration - Web-based viewer From 4a0772821470c9b7a691fde3a93578fc1008106f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Jan 2024 13:15:27 +0100 Subject: [PATCH 069/505] docs: Readme (#99) --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 9123651..3583612 100644 --- a/readme.md +++ b/readme.md @@ -74,10 +74,10 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Select from the values below: - - ```win11``` = Windows 11 - - ```win10``` = Windows 10 + - ```win11``` = Windows 11 Pro + - ```win10``` = Windows 10 Pro - ```ltsc10``` = Windows 10 LTSC - - ```win81``` = Windows 8.1 + - ```win81``` = Windows 8.1 Pro - ```win22``` = Windows Server 2022 - ```win19``` = Windows Server 2019 - ```win16``` = Windows Server 2016 From 30daaf3a53294f6e286665547aea06eb33a6ebc6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Jan 2024 14:02:34 +0100 Subject: [PATCH 070/505] docs: Readme (#100) --- readme.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/readme.md b/readme.md index 3583612..892442b 100644 --- a/readme.md +++ b/readme.md @@ -71,19 +71,21 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti environment: VERSION: "win11" ``` - + Select from the values below: - - ```win11``` = Windows 11 Pro - - ```win10``` = Windows 10 Pro - - ```ltsc10``` = Windows 10 LTSC - - ```win81``` = Windows 8.1 Pro - - ```win22``` = Windows Server 2022 - - ```win19``` = Windows Server 2019 - - ```win16``` = Windows Server 2016 - - ```tiny11``` = Tiny 11 (Slow download) - - ```tiny10``` = Tiny 10 (Slow download) - - ```win7``` = Windows 7 (Slow download) + | Value | Description | Download | + |---|---|---| + | ```win11``` | Windows 11 Pro | Microsoft | + | ```win10``` | Windows 10 Pro | Microsoft | + | ```ltsc10``` | Windows 10 LTSC | Microsoft | + | ```win81``` | Windows 8.1 Pro | Microsoft | + | ```win7``` | Windows 7 Pro | Archive.org | + | ```win22``` | Windows Server 2022 | Microsoft | + | ```win19``` | Windows Server 2019 | Microsoft | + | ```win16``` | Windows Server 2016 | Microsoft | + | ```tiny11``` | Tiny 11 | Archive.org | + | ```tiny10``` | Tiny 10 | Archive.org | * ### How do I increase the amount of CPU or RAM? From 5084dc78ba68a2d1e01d9976bfc2d2a12ce6e2cb Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Jan 2024 14:34:21 +0100 Subject: [PATCH 071/505] docs: Readme (#101) --- readme.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/readme.md b/readme.md index 892442b..04685a1 100644 --- a/readme.md +++ b/readme.md @@ -74,18 +74,18 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Select from the values below: - | Value | Description | Download | - |---|---|---| - | ```win11``` | Windows 11 Pro | Microsoft | - | ```win10``` | Windows 10 Pro | Microsoft | - | ```ltsc10``` | Windows 10 LTSC | Microsoft | - | ```win81``` | Windows 8.1 Pro | Microsoft | - | ```win7``` | Windows 7 Pro | Archive.org | - | ```win22``` | Windows Server 2022 | Microsoft | - | ```win19``` | Windows Server 2019 | Microsoft | - | ```win16``` | Windows Server 2016 | Microsoft | - | ```tiny11``` | Tiny 11 | Archive.org | - | ```tiny10``` | Tiny 10 | Archive.org | + | **Value** | **Description** | **Size** | **Server** | **Speed** | + |---|---|---|---|---| + | ```win11``` | Windows 11 Pro | 6.4 GB | Microsoft | Fast | + | ```win10``` | Windows 10 Pro | 5.8 GB | Microsoft | Fast | + | ```ltsc10``` | Windows 10 LTSC | 4.6 GB | Microsoft | Fast | + | ```win81``` | Windows 8.1 Pro | 4.2 GB | Microsoft | Fast | + | ```win7``` | Windows 7 Ultimate | 5.5 GB | Archive.org | Slow | + | ```win22``` | Windows Server 2022 | 4.7 GB | Microsoft | Fast | + | ```win19``` | Windows Server 2019 | 5.3 GB | Microsoft | Fast | + | ```win16``` | Windows Server 2016 | 6.5 GB | Microsoft | Fast | + | ```tiny10``` | Tiny 10 | 3.6 GB | Archive.org | Slow | + | ```tiny11``` | Tiny 11 Core | 2.1 GB | Archive.org | Slow | * ### How do I increase the amount of CPU or RAM? From 0aea392b28dd34836adcef886b2c4239aefeac02 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Jan 2024 14:42:54 +0100 Subject: [PATCH 072/505] docs: Readme (#102) --- readme.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/readme.md b/readme.md index 04685a1..17957a0 100644 --- a/readme.md +++ b/readme.md @@ -74,18 +74,18 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Select from the values below: - | **Value** | **Description** | **Size** | **Server** | **Speed** | + | **Value** | **Description** | **Server** | **Speed** | **Size** | |---|---|---|---|---| - | ```win11``` | Windows 11 Pro | 6.4 GB | Microsoft | Fast | - | ```win10``` | Windows 10 Pro | 5.8 GB | Microsoft | Fast | - | ```ltsc10``` | Windows 10 LTSC | 4.6 GB | Microsoft | Fast | - | ```win81``` | Windows 8.1 Pro | 4.2 GB | Microsoft | Fast | - | ```win7``` | Windows 7 Ultimate | 5.5 GB | Archive.org | Slow | - | ```win22``` | Windows Server 2022 | 4.7 GB | Microsoft | Fast | - | ```win19``` | Windows Server 2019 | 5.3 GB | Microsoft | Fast | - | ```win16``` | Windows Server 2016 | 6.5 GB | Microsoft | Fast | - | ```tiny10``` | Tiny 10 | 3.6 GB | Archive.org | Slow | - | ```tiny11``` | Tiny 11 Core | 2.1 GB | Archive.org | Slow | + | ```win11``` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | + | ```win10``` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | + | ```ltsc10``` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | + | ```win81``` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | + | ```win7``` | Windows 7 Ultimate | Archive.org | Slow | 5.5 GB | + | ```win22``` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | + | ```win19``` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | + | ```win16``` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | + | ```tiny10``` | Tiny 10 | Archive.org | Slow | 3.6 GB | + | ```tiny11``` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | * ### How do I increase the amount of CPU or RAM? From 73793dbcaaa3d68ca12d2825c9aa47d8b6ee88c0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Jan 2024 22:11:12 +0100 Subject: [PATCH 073/505] feat: Switch Win7 mirror (#104) --- Dockerfile | 2 +- assets/{win7x64-ultimate.xml => win7x64.xml} | 4 +- readme.md | 2 +- src/install.sh | 81 ++++++++++++-------- 4 files changed, 51 insertions(+), 38 deletions(-) rename assets/{win7x64-ultimate.xml => win7x64.xml} (99%) diff --git a/Dockerfile b/Dockerfile index c2968e9..b6b00e1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,7 @@ RUN apt-get update \ COPY ./src /run/ COPY ./assets /run/assets -ADD https://github.com/qemus/virtiso/raw/master/virtio-win.iso /run/drivers.iso +ADD https://github.com/qemus/virtiso/releases/download/v0.1.240/virtio-win-0.1.240.iso /run/drivers.iso RUN chmod +x /run/*.sh EXPOSE 8006 3389 diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64.xml similarity index 99% rename from assets/win7x64-ultimate.xml rename to assets/win7x64.xml index 8559b3d..e98dfa6 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64.xml @@ -52,8 +52,8 @@ <OSImage> <InstallFrom> <MetaData wcm:action="add"> - <Key>/IMAGE/INDEX</Key> - <Value>1</Value> + <Value>Windows 7 Ultimate</Value> + <Key>/IMAGE/NAME</Key> </MetaData> </InstallFrom> <InstallTo> diff --git a/readme.md b/readme.md index 17957a0..7164e95 100644 --- a/readme.md +++ b/readme.md @@ -80,7 +80,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | ```win10``` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | | ```ltsc10``` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | | ```win81``` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | - | ```win7``` | Windows 7 Ultimate | Archive.org | Slow | 5.5 GB | + | ```win7``` | Windows 7 SP1 | Bob Pony | Medium | 3.2 GB | | ```win22``` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | | ```win19``` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | | ```win16``` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | diff --git a/src/install.sh b/src/install.sh index 9c9578d..9887d09 100644 --- a/src/install.sh +++ b/src/install.sh @@ -2,6 +2,7 @@ set -Eeuo pipefail : "${MANUAL:=""}" +: "${DETECTED:=""}" : "${VERSION:="win11x64"}" if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then @@ -20,9 +21,8 @@ fi [[ "${VERSION,,}" == "win81" ]] && VERSION="win81x64" [[ "${VERSION,,}" == "win8" ]] && VERSION="win81x64" -[[ "${VERSION,,}" == "7" ]] && VERSION="win7x64-ultimate" -[[ "${VERSION,,}" == "win7" ]] && VERSION="win7x64-ultimate" -[[ "${VERSION,,}" == "win7x64" ]] && VERSION="win7x64-ultimate" +[[ "${VERSION,,}" == "7" ]] && VERSION="win7x64" +[[ "${VERSION,,}" == "win7" ]] && VERSION="win7x64" [[ "${VERSION,,}" == "22" ]] && VERSION="win2022-eval" [[ "${VERSION,,}" == "2022" ]] && VERSION="win2022-eval" @@ -44,14 +44,25 @@ fi [[ "${VERSION,,}" == "win10-ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" [[ "${VERSION,,}" == "win10x64-ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" -if [[ "${VERSION,,}" == "tiny11" ]]; then - VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" +if [[ "${VERSION,,}" == "win10x64-enterprise-ltsc-eval" ]]; then + DETECTED="win10x64-ltsc" fi if [[ "${VERSION,,}" == "tiny10" ]]; then + DETECTED="win10x64-ltsc" VERSION="https://archive.org/download/tiny-10-23-h2/tiny10%20x64%2023h2.iso" fi +if [[ "${VERSION,,}" == "win7x64" ]]; then + DETECTED="win7x64" + VERSION="https://dl.bobpony.com/windows/7/en_windows_7_with_sp1_x64.iso" +fi + +if [[ "${VERSION,,}" == "tiny11" ]]; then + DETECTED="win11x64" + VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" +fi + CUSTOM="custom.iso" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.iso" @@ -297,18 +308,6 @@ extractImage() { exit 66 fi - if [ ! -f "$dir/$ETFS" ] || [ ! -f "$dir/$EFISYS" ]; then - - if [ ! -f "$dir/$ETFS" ]; then - warn "failed to locate file 'etfsboot.com' in ISO image, $FB" - else - warn "failed to locate file 'efisys_noprompt.bin' in ISO image, $FB" - fi - - BOOT_MODE="windows_legacy" - return 1 - fi - return 0 } @@ -319,11 +318,12 @@ findVersion() { [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" + [[ "${name,,}" == *"windows 7"* ]] && detected="win7x64" + [[ "${name,,}" == *"windows vista"* ]] && detected="winvistax64" [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" - [[ "${name,,}" == *"windows 7"* ]] && detected="win7x64-ultimate" - + if [[ "${name,,}" == *"windows 10"* ]]; then if [[ "${name,,}" == *"enterprise ltsc"* ]]; then detected="win10x64-ltsc" @@ -338,30 +338,29 @@ findVersion() { detectImage() { - local dir="$1" - local tag result name name2 - XML="" - DETECTED="" - if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then - if [[ "${VERSION,,}" != "win10x64-enterprise-ltsc-eval" ]]; then + if [ -n "$CUSTOM" ]; then + DETECTED="" + else + if [ -z "$DETECTED" ] && [[ "$EXTERNAL" != [Yy1]* ]]; then DETECTED="$VERSION" - else - DETECTED="win10x64-ltsc" fi - if [[ "$MANUAL" != [Yy1]* ]]; then - if [ -f "/run/assets/$DETECTED.xml" ]; then - XML="$DETECTED.xml" - else - warn "image type is '$DETECTED', but no matching XML file exists, $FB." - fi + fi + + if [ -n "$DETECTED" ]; then + if [ -f "/run/assets/$DETECTED.xml" ]; then + [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" + return 0 fi + warn "image type is '$DETECTED', but no matching XML file exists!" return 0 fi info "Detecting Windows version from ISO image..." + local dir="$1" + local tag result name name2 local loc="$dir/sources/install.wim" [ ! -f "$loc" ] && loc="$dir/sources/install.esd" @@ -410,7 +409,21 @@ prepareImage() { local iso="$1" local dir="$2" - [[ "${DETECTED,,}" != "win7x64"* ]] && return 0 + if [[ "${BOOT_MODE,,}" == "windows" ]]; then + if [[ "${DETECTED,,}" != "win7x64"* ]] && [[ "${DETECTED,,}" != "winvistax64"* ]]; then + + if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then + return 0 + fi + + if [ ! -f "$dir/$ETFS" ]; then + warn "failed to locate file 'etfsboot.com' in ISO image, falling back to legacy boot!" + else + warn "failed to locate file 'efisys_noprompt.bin' in ISO image, falling back to legacy boot!" + fi + + fi + fi ETFS="boot.img" BOOT_MODE="windows_legacy" From 1cf256235497476586d81b35f9e515c6e9ccadf9 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Jan 2024 02:00:04 +0100 Subject: [PATCH 074/505] fix: Space after URL (#105) --- src/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index 9887d09..ca9e97a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -272,7 +272,7 @@ downloadImage() { fi { wget "$url" -O "$iso" -q --no-check-certificate --show-progress "$progress"; rc=$?; } || : - (( rc != 0 )) && error "Failed to download $url, reason: $rc" && exit 60 + (( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60 [ ! -f "$iso" ] && return 1 return 0 From d02fa6cca1216e80f1c6b7c2e3f7adae627e56d5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Jan 2024 05:10:45 +0100 Subject: [PATCH 075/505] fix: Windows 7 Enterprise (#107) --- assets/win7x64.xml | 6 +++--- readme.md | 2 +- src/install.sh | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/assets/win7x64.xml b/assets/win7x64.xml index e98dfa6..41bcd5d 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -52,8 +52,8 @@ <OSImage> <InstallFrom> <MetaData wcm:action="add"> - <Value>Windows 7 Ultimate</Value> - <Key>/IMAGE/NAME</Key> + <Value>1</Value> + <Key>/IMAGE/INDEX</Key> </MetaData> </InstallFrom> <InstallTo> @@ -76,7 +76,7 @@ <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> <ProductKey> - <Key>D4F6K-QK3RD-TMVMJ-BBMRX-3MBMV</Key> + <Key>H7X92-3VPBB-Q799D-Y6JJ3-86WC6</Key> <WillShowUI>OnError</WillShowUI> </ProductKey> </UserData> diff --git a/readme.md b/readme.md index 7164e95..404af6e 100644 --- a/readme.md +++ b/readme.md @@ -80,7 +80,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | ```win10``` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | | ```ltsc10``` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | | ```win81``` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | - | ```win7``` | Windows 7 SP1 | Bob Pony | Medium | 3.2 GB | + | ```win7``` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | | ```win22``` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | | ```win19``` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | | ```win16``` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | diff --git a/src/install.sh b/src/install.sh index ca9e97a..1a86971 100644 --- a/src/install.sh +++ b/src/install.sh @@ -55,7 +55,7 @@ fi if [[ "${VERSION,,}" == "win7x64" ]]; then DETECTED="win7x64" - VERSION="https://dl.bobpony.com/windows/7/en_windows_7_with_sp1_x64.iso" + VERSION="https://dl.bobpony.com/windows/7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" fi if [[ "${VERSION,,}" == "tiny11" ]]; then From 6b31a9d9432379e48861037bd20b35a084173dd2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Jan 2024 14:52:58 +0100 Subject: [PATCH 076/505] feat: Display Windows version (#109) --- src/install.sh | 87 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 26 deletions(-) diff --git a/src/install.sh b/src/install.sh index 1a86971..185f035 100644 --- a/src/install.sh +++ b/src/install.sh @@ -79,6 +79,25 @@ FB="falling back to manual installation!" ETFS="boot/etfsboot.com" EFISYS="efi/microsoft/boot/efisys_noprompt.bin" +printVersion() { + + local id="$1" + local desc="" + + [[ "$id" == "win7"* ]] && desc="Windows 7" + [[ "$id" == "win8"* ]] && desc="Windows 8" + [[ "$id" == "win10"* ]] && desc="Windows 10" + [[ "$id" == "win11"* ]] && desc="Windows 11" + [[ "$id" == "winvista"* ]] && desc="Windows Vista" + [[ "$id" == "win2022"* ]] && desc="Windows Server 2022" + [[ "$id" == "win2019"* ]] && desc="Windows Server 2019" + [[ "$id" == "win2016"* ]] && desc="Windows Server 2016" + [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC" + + echo "$desc" + return 0 +} + replaceXML() { local dir="$1" @@ -158,7 +177,7 @@ abortInstall() { startInstall() { - local magic + local magic desc local msg="Windows is being started, please wait..." if [ -f "$STORAGE/$CUSTOM" ]; then @@ -181,7 +200,10 @@ startInstall() { BASE="$VERSION.iso" if ! skipInstall && [ ! -f "$STORAGE/$BASE" ]; then - msg="Windows is being downloaded, please wait..." + + desc=$(printVersion "$VERSION") + [ -z "$desc" ] && desc="Windows" + msg="$desc is being downloaded, please wait..." fi else @@ -282,9 +304,15 @@ extractImage() { local iso="$1" local dir="$2" + local desc="downloaded ISO" local size size_gb space space_gb - local msg="Extracting downloaded ISO image..." + if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then + desc=$(printVersion "$VERSION") + [ -z "$desc" ] && desc="downloaded ISO" + fi + + local msg="Extracting $desc image..." [ -n "$CUSTOM" ] && msg="Extracting local ISO image..." info "$msg" && html "$msg" @@ -311,14 +339,14 @@ extractImage() { return 0 } -findVersion() { +getVersion() { local name="$1" local detected="" - [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" - [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" [[ "${name,,}" == *"windows 7"* ]] && detected="win7x64" + [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" + [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" [[ "${name,,}" == *"windows vista"* ]] && detected="winvistax64" [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" @@ -349,18 +377,24 @@ detectImage() { fi if [ -n "$DETECTED" ]; then + if [ -f "/run/assets/$DETECTED.xml" ]; then [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" return 0 fi - warn "image type is '$DETECTED', but no matching XML file exists!" + + local dsc + dsc=$(printVersion "$DETECTED") + [ -z "$dsc" ] && dsc="$DETECTED" + + warn "got $desc, but no matching XML file exists, $FB." return 0 fi info "Detecting Windows version from ISO image..." local dir="$1" - local tag result name name2 + local tag result name name2 desc local loc="$dir/sources/install.wim" [ ! -f "$loc" ] && loc="$dir/sources/install.esd" @@ -373,35 +407,33 @@ detectImage() { tag="DISPLAYNAME" result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") - DETECTED=$(findVersion "$name") + DETECTED=$(getVersion "$name") if [ -z "$DETECTED" ]; then tag="PRODUCTNAME" name2=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") [ -z "$name" ] && name="$name2" - DETECTED=$(findVersion "$name2") + DETECTED=$(getVersion "$name2") fi - if [ -n "$DETECTED" ]; then + if [ -z "$DETECTED" ]; then + warn "failed to determine Windows version from string '$name', $FB" + return 0 + fi - if [ -f "/run/assets/$DETECTED.xml" ]; then - [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" - info "Detected image of type: '$DETECTED'" - else - warn "detected image of type '$DETECTED', but no matching XML file exists, $FB." - fi + desc=$(printVersion "$DETECTED") + [ -z "$desc" ] && desc="$DETECTED" + if [ -f "/run/assets/$DETECTED.xml" ]; then + [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" + info "Detected: $desc" else - - if [ -z "$name" ]; then - warn "failed to determine Windows version from image, $FB" - else - warn "failed to determine Windows version from string '$name', $FB" - fi - + warn "detected $desc, but no matching XML file exists, $FB." fi + + return 0 } prepareImage() { @@ -482,13 +514,16 @@ buildImage() { local cat="BOOT.CAT" local label="${BASE%.*}" local log="/run/shm/iso.log" - local size size_gb space space_gb + local size size_gb space space_gb desc label="${label::30}" local out="$TMP/$label.tmp" rm -f "$out" - local msg="Updating ISO image..." + desc=$(printVersion "$DETECTED") + [ -z "$desc" ] && desc="ISO" + + local msg="Building $desc image..." info "$msg" && html "$msg" size=$(du -h -b --max-depth=0 "$dir" | cut -f1) From 46de9e8fc0a61e1dfcd3cfd85a6b65d388ad9bee Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Jan 2024 17:20:55 +0100 Subject: [PATCH 077/505] fix: Windows 10 LTSC detection (#110) --- readme.md | 6 ++++-- src/install.sh | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 404af6e..b622548 100644 --- a/readme.md +++ b/readme.md @@ -74,7 +74,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Select from the values below: - | **Value** | **Description** | **Server** | **Speed** | **Size** | + | **Value** | **Description** | **Server** | **Transfer** | **Size** | |---|---|---|---|---| | ```win11``` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | | ```win10``` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | @@ -123,7 +123,9 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti * ### How do I perform a manual installation? - It's best to use the automatic installation, as it optimizes various settings for use with this container. However, if you insist on performing the installation manually, start a clean container with the following environment variable: + It's best to use the automatic installation, as it optimizes various settings for use with this container. + + However, if you insist on performing the installation manually, start a clean container with the following environment variable: ```yaml environment: diff --git a/src/install.sh b/src/install.sh index 185f035..e0ae78a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -200,7 +200,7 @@ startInstall() { BASE="$VERSION.iso" if ! skipInstall && [ ! -f "$STORAGE/$BASE" ]; then - + desc=$(printVersion "$VERSION") [ -z "$desc" ] && desc="Windows" msg="$desc is being downloaded, please wait..." @@ -353,7 +353,7 @@ getVersion() { [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" if [[ "${name,,}" == *"windows 10"* ]]; then - if [[ "${name,,}" == *"enterprise ltsc"* ]]; then + if [[ "${name,,}" == *"ltsc"* ]]; then detected="win10x64-ltsc" else detected="win10x64" From b4371bd37d4a867ad608209bc386bc6780d9de40 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Jan 2024 17:57:26 +0100 Subject: [PATCH 078/505] feat: Add Tiny11 option (#111) --- readme.md | 21 +++++++++++---------- src/install.sh | 17 +++++++++++------ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/readme.md b/readme.md index b622548..bfc40e1 100644 --- a/readme.md +++ b/readme.md @@ -76,16 +76,17 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | **Value** | **Description** | **Server** | **Transfer** | **Size** | |---|---|---|---|---| - | ```win11``` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | - | ```win10``` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | - | ```ltsc10``` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | - | ```win81``` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | - | ```win7``` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | - | ```win22``` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | - | ```win19``` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | - | ```win16``` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | - | ```tiny10``` | Tiny 10 | Archive.org | Slow | 3.6 GB | - | ```tiny11``` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | + | `win11` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | + | `win10` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | + | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | + | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | + | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | + | `win22` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | + | `win19` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | + | `win16` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | + | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | + | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | + | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | * ### How do I increase the amount of CPU or RAM? diff --git a/src/install.sh b/src/install.sh index e0ae78a..4d026cc 100644 --- a/src/install.sh +++ b/src/install.sh @@ -48,21 +48,26 @@ if [[ "${VERSION,,}" == "win10x64-enterprise-ltsc-eval" ]]; then DETECTED="win10x64-ltsc" fi -if [[ "${VERSION,,}" == "tiny10" ]]; then - DETECTED="win10x64-ltsc" - VERSION="https://archive.org/download/tiny-10-23-h2/tiny10%20x64%2023h2.iso" -fi - if [[ "${VERSION,,}" == "win7x64" ]]; then DETECTED="win7x64" VERSION="https://dl.bobpony.com/windows/7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" fi -if [[ "${VERSION,,}" == "tiny11" ]]; then +if [[ "${VERSION,,}" == "core11" ]]; then DETECTED="win11x64" VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" fi +if [[ "${VERSION,,}" == "tiny11" ]]; then + DETECTED="win11x64" + VERSION="https://archive.org/download/tiny11-2311/tiny11%202311%20x64.iso" +fi + +if [[ "${VERSION,,}" == "tiny10" ]]; then + DETECTED="win10x64-ltsc" + VERSION="https://archive.org/download/tiny-10-23-h2/tiny10%20x64%2023h2.iso" +fi + CUSTOM="custom.iso" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.iso" From 0b978c4e57da9c71165d1563a0fdacbd1e81599c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Jan 2024 19:08:26 +0100 Subject: [PATCH 079/505] docs: Readme (#112) --- readme.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index bfc40e1..eae1aec 100644 --- a/readme.md +++ b/readme.md @@ -53,15 +53,11 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Very simple! These are the steps: - - Start the container and get some coffee. - - - Connect to [port 8006](http://localhost:8006) of the container in your web browser. + - Start the container and connect to [port 8006](http://localhost:8006) using your web browser. - Sit back and relax while the magic happens, the whole installation will be performed fully automatic. - - Once you see the desktop, your Windows installation is ready for use. - - - Enjoy your brand new machine, and don't forget to star this repo! + - Once you see the desktop, your Windows installation is ready for use. Enjoy your brand new machine, and don't forget to star this repo! * ### How do I select the Windows version? From f4edefb0c9cb59acc56c2017e33f1cf29d95bef7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Jan 2024 19:12:07 +0100 Subject: [PATCH 080/505] docs: Readme (#113) --- readme.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index eae1aec..ff579c4 100644 --- a/readme.md +++ b/readme.md @@ -57,7 +57,9 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti - Sit back and relax while the magic happens, the whole installation will be performed fully automatic. - - Once you see the desktop, your Windows installation is ready for use. Enjoy your brand new machine, and don't forget to star this repo! + - Once you see the desktop, your Windows installation is ready for use. + + Enjoy your brand new machine, and don't forget to star this repo! * ### How do I select the Windows version? From a19adb2b8fd9dbb4f1985462ba4908d1dfa7894f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Jan 2024 19:22:57 +0100 Subject: [PATCH 081/505] docs: Readme (#114) --- readme.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index ff579c4..498cb20 100644 --- a/readme.md +++ b/readme.md @@ -79,13 +79,15 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | + |||||| | `win22` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | | `win19` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | | `win16` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | - | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | - | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | + |||||| | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | - + | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | + | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | + * ### How do I increase the amount of CPU or RAM? By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. From ee2b52d611444360883be05e29f48137ca22c855 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Jan 2024 19:29:04 +0100 Subject: [PATCH 082/505] docs: Readme (#115) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 498cb20..78c9f6f 100644 --- a/readme.md +++ b/readme.md @@ -149,7 +149,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (E:). Double-click on ```virtio-win-gt-x64.msi``` and proceed to install the VirtIO drivers. - - Now your Windows installation is ready for use. Enjoy it, and don't forget to star this repo! + Enjoy your brand new machine, and don't forget to star this repo! * ### How do I install a custom image? From 74ff94281d260cb3713c95eafe9d799f4f0d847c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Jan 2024 19:41:52 +0100 Subject: [PATCH 083/505] docs: Readme (#116) --- readme.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/readme.md b/readme.md index 78c9f6f..bb17532 100644 --- a/readme.md +++ b/readme.md @@ -74,19 +74,19 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | **Value** | **Description** | **Server** | **Transfer** | **Size** | |---|---|---|---|---| - | `win11` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | - | `win10` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | - | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | - | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | - | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | + | `win11` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | + | `win10` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | + | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | + | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | + | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | |||||| - | `win22` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | - | `win19` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | - | `win16` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | + | `win22` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | + | `win19` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | + | `win16` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | |||||| - | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | - | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | - | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | + | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | + | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | + | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | * ### How do I increase the amount of CPU or RAM? @@ -137,17 +137,17 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti - Start the container and connect to [port 8006](http://localhost:8006) of the container in your web browser. After the download is finished, you will see the Windows installation screen. - - Start the installation by clicking ```Install now```. On the next screen, press 'OK' when prompted to ```Load driver``` and select the ```VirtIO SCSI``` driver from the list that matches your Windows version. So for Windows 11, select ```D:\amd64\w11\vioscsi.inf``` and click 'Next'. + - Start the installation by clicking `Install now`. On the next screen, press 'OK' when prompted to `Load driver` and select the `VirtIO SCSI` driver from the list that matches your Windows version. So for Windows 11, select `D:\amd64\w11\vioscsi.inf` and click 'Next'. - Accept the license agreement and select your preferred Windows edition, like Home or Pro. - - Choose ```Custom: Install Windows only (advanced)```, and click ```Load driver``` on the next screen. Select 'Browse' and navigate to the ```D:\NetKVM\w11\amd64``` folder, and click 'OK'. Select the ```VirtIO Ethernet Adapter``` from the list and click 'Next'. + - Choose `Custom: Install Windows only (advanced)`, and click `Load driver` on the next screen. Select 'Browse' and navigate to the `D:\NetKVM\w11\amd64` folder, and click 'OK'. Select the `VirtIO Ethernet Adapter` from the list and click 'Next'. - - Select 'Drive 0' and click 'Next'. + - Select `Drive 0` and click 'Next'. - Wait until Windows finishes copying files and completes the installation. - - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (E:). Double-click on ```virtio-win-gt-x64.msi``` and proceed to install the VirtIO drivers. + - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (E:). Double-click on `virtio-win-gt-x64.msi` and proceed to install the VirtIO drivers. Enjoy your brand new machine, and don't forget to star this repo! @@ -175,7 +175,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti - /dev/sdb ``` - Use ```DEVICE``` if you want it to become your main drive, and use ```DEVICE2``` and higher to add them as secondary drives. + Use `DEVICE` if you want it to become your main drive, and use `DEVICE2` and higher to add them as secondary drives. * ### How do I verify if my system supports KVM? From 4766b2bc5c1706f0c5db8c203f5b585eb4632363 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Jan 2024 19:49:37 +0100 Subject: [PATCH 084/505] docs: Readme (#117) --- readme.md | 202 +++++++++++++++++++++++++++--------------------------- 1 file changed, 101 insertions(+), 101 deletions(-) diff --git a/readme.md b/readme.md index bb17532..ea5b388 100644 --- a/readme.md +++ b/readme.md @@ -49,148 +49,148 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti ## FAQ - * ### How do I use it? +* ### How do I use it? - Very simple! These are the steps: - - - Start the container and connect to [port 8006](http://localhost:8006) using your web browser. + Very simple! These are the steps: + + - Start the container and connect to [port 8006](http://localhost:8006) using your web browser. - - Sit back and relax while the magic happens, the whole installation will be performed fully automatic. + - Sit back and relax while the magic happens, the whole installation will be performed fully automatic. - - Once you see the desktop, your Windows installation is ready for use. - - Enjoy your brand new machine, and don't forget to star this repo! + - Once you see the desktop, your Windows installation is ready for use. + + Enjoy your brand new machine, and don't forget to star this repo! - * ### How do I select the Windows version? +* ### How do I select the Windows version? - By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to download: + By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to download: - ```yaml - environment: - VERSION: "win11" - ``` + ```yaml + environment: + VERSION: "win11" + ``` - Select from the values below: - - | **Value** | **Description** | **Server** | **Transfer** | **Size** | - |---|---|---|---|---| - | `win11` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | - | `win10` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | - | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | - | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | - | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | - |||||| - | `win22` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | - | `win19` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | - | `win16` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | - |||||| - | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | - | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | - | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | - - * ### How do I increase the amount of CPU or RAM? + Select from the values below: + + | **Value** | **Description** | **Server** | **Transfer** | **Size** | + |---|---|---|---|---| + | `win11` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | + | `win10` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | + | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | + | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | + | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | + |||||| + | `win22` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | + | `win19` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | + | `win16` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | + |||||| + | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | + | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | + | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | + +* ### How do I increase the amount of CPU or RAM? - By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. + By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. - To increase this, add the following environment variables: + To increase this, add the following environment variables: - ```yaml - environment: - RAM_SIZE: "8G" - CPU_CORES: "4" - ``` + ```yaml + environment: + RAM_SIZE: "8G" + CPU_CORES: "4" + ``` - * ### How do I change the size of the disk? +* ### How do I change the size of the disk? - To expand the default size of 64 GB, add the `DISK_SIZE` setting to your compose file and set it to your preferred capacity: + To expand the default size of 64 GB, add the `DISK_SIZE` setting to your compose file and set it to your preferred capacity: - ```yaml - environment: - DISK_SIZE: "256G" - ``` - - This can also be used to resize the existing disk to a larger capacity without any data loss. - - * ### How do I change the storage location? + ```yaml + environment: + DISK_SIZE: "256G" + ``` + + This can also be used to resize the existing disk to a larger capacity without any data loss. + +* ### How do I change the storage location? - To change the storage location, include the following bind mount in your compose file: + To change the storage location, include the following bind mount in your compose file: - ```yaml - volumes: - - /var/win:/storage - ``` + ```yaml + volumes: + - /var/win:/storage + ``` - Replace the example path `/var/win` with the desired storage folder. + Replace the example path `/var/win` with the desired storage folder. - * ### How do I perform a manual installation? +* ### How do I perform a manual installation? - It's best to use the automatic installation, as it optimizes various settings for use with this container. + It's best to use the automatic installation, as it optimizes various settings for use with this container. - However, if you insist on performing the installation manually, start a clean container with the following environment variable: + However, if you insist on performing the installation manually, start a clean container with the following environment variable: - ```yaml - environment: - MANUAL: "Y" - ``` + ```yaml + environment: + MANUAL: "Y" + ``` - Then follow these steps: + Then follow these steps: - - Start the container and connect to [port 8006](http://localhost:8006) of the container in your web browser. After the download is finished, you will see the Windows installation screen. + - Start the container and connect to [port 8006](http://localhost:8006) of the container in your web browser. After the download is finished, you will see the Windows installation screen. - - Start the installation by clicking `Install now`. On the next screen, press 'OK' when prompted to `Load driver` and select the `VirtIO SCSI` driver from the list that matches your Windows version. So for Windows 11, select `D:\amd64\w11\vioscsi.inf` and click 'Next'. + - Start the installation by clicking `Install now`. On the next screen, press 'OK' when prompted to `Load driver` and select the `VirtIO SCSI` driver from the list that matches your Windows version. So for Windows 11, select `D:\amd64\w11\vioscsi.inf` and click 'Next'. - - Accept the license agreement and select your preferred Windows edition, like Home or Pro. + - Accept the license agreement and select your preferred Windows edition, like Home or Pro. - - Choose `Custom: Install Windows only (advanced)`, and click `Load driver` on the next screen. Select 'Browse' and navigate to the `D:\NetKVM\w11\amd64` folder, and click 'OK'. Select the `VirtIO Ethernet Adapter` from the list and click 'Next'. + - Choose `Custom: Install Windows only (advanced)`, and click `Load driver` on the next screen. Select 'Browse' and navigate to the `D:\NetKVM\w11\amd64` folder, and click 'OK'. Select the `VirtIO Ethernet Adapter` from the list and click 'Next'. - - Select `Drive 0` and click 'Next'. + - Select `Drive 0` and click 'Next'. - - Wait until Windows finishes copying files and completes the installation. + - Wait until Windows finishes copying files and completes the installation. - - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (E:). Double-click on `virtio-win-gt-x64.msi` and proceed to install the VirtIO drivers. + - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (E:). Double-click on `virtio-win-gt-x64.msi` and proceed to install the VirtIO drivers. - Enjoy your brand new machine, and don't forget to star this repo! + Enjoy your brand new machine, and don't forget to star this repo! - * ### How do I install a custom image? +* ### How do I install a custom image? - In order to download a custom ISO image, start a clean container with the URL specified in the `VERSION` environment variable: - - ```yaml - environment: - VERSION: "https://example.com/win.iso" - ``` + In order to download a custom ISO image, start a clean container with the URL specified in the `VERSION` environment variable: + + ```yaml + environment: + VERSION: "https://example.com/win.iso" + ``` - Alternatively, you can also rename a local file to `custom.iso` and place it in an empty `/storage` folder to skip the download. + Alternatively, you can also rename a local file to `custom.iso` and place it in an empty `/storage` folder to skip the download. - * ### How do I pass-through a disk? +* ### How do I pass-through a disk? - It is possible to pass-through disk devices directly by adding them to your compose file in this way: + It is possible to pass-through disk devices directly by adding them to your compose file in this way: - ```yaml - environment: - DEVICE: "/dev/sda" - DEVICE2: "/dev/sdb" - devices: - - /dev/sda - - /dev/sdb - ``` + ```yaml + environment: + DEVICE: "/dev/sda" + DEVICE2: "/dev/sdb" + devices: + - /dev/sda + - /dev/sdb + ``` - Use `DEVICE` if you want it to become your main drive, and use `DEVICE2` and higher to add them as secondary drives. - - * ### How do I verify if my system supports KVM? + Use `DEVICE` if you want it to become your main drive, and use `DEVICE2` and higher to add them as secondary drives. + +* ### How do I verify if my system supports KVM? - To verify if your system supports KVM, run the following commands: + To verify if your system supports KVM, run the following commands: - ```bash - sudo apt install cpu-checker - sudo kvm-ok - ``` + ```bash + sudo apt install cpu-checker + sudo kvm-ok + ``` - If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. + If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. - * ### Is this project legal? +* ### Is this project legal? - Yes, this project contains only open-source code and does not distribute any copyrighted material. Neither does it try to circumvent any copyright protection measures. So under all applicable laws, this project would be considered legal. + Yes, this project contains only open-source code and does not distribute any copyrighted material. Neither does it try to circumvent any copyright protection measures. So under all applicable laws, this project would be considered legal. ## Disclaimer From 0c97430ea9b5d7c3ee316f28a4bf8398d5b6ce05 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 28 Jan 2024 08:40:11 +0100 Subject: [PATCH 085/505] feat: Improved Windows configuration (#121) --- assets/win10x64-ltsc.xml | 119 +++++++++++++++++++++------------------ assets/win10x64.xml | 119 +++++++++++++++++++++------------------ assets/win11x64.xml | 119 +++++++++++++++++++++------------------ assets/win2016-eval.xml | 45 ++++++++------- assets/win2019-eval.xml | 48 ++++++++-------- assets/win2022-eval.xml | 48 ++++++++-------- assets/win7x64.xml | 50 ++++++++++------ assets/win81x64.xml | 60 +++++++++++++------- 8 files changed, 341 insertions(+), 267 deletions(-) diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 6b2f003..b339642 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -20,13 +20,13 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>300</Size> + <Size>256</Size> </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> <Order>2</Order> <Type>EFI</Type> - <Size>100</Size> + <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> @@ -139,6 +139,15 @@ <PathAndCredentials wcm:action="add" wcm:keyValue="10"> <Path>D:\vioserial\w10\amd64</Path> </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\w10\amd64</Path> + </PathAndCredentials> </DriverPaths> </component> </settings> @@ -146,9 +155,6 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> - <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <ComputerName>*</ComputerName> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -180,18 +186,27 @@ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <RunSynchronous> <RunSynchronousCommand wcm:action="add"> @@ -200,99 +215,102 @@ </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>2</Order> - <Path>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</Path> - </RunSynchronousCommand> - <RunSynchronousCommand wcm:action="add"> - <Order>3</Order> - <Path>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</Path> - </RunSynchronousCommand> - <RunSynchronousCommand wcm:action="add"> - <Order>4</Order> - <Path>fsutil.exe behavior set disableLastAccess 1</Path> - </RunSynchronousCommand> - <RunSynchronousCommand wcm:action="add"> - <Order>5</Order> <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>3</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>4</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>5</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>6</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>7</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>8</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>9</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>10</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>11</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>12</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <Path>reg.exe unload "HKU\mount"</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> </RunSynchronous> </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> <settings pass="oobeSystem"> - <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <InputLocale>0409:00000409</InputLocale> - <SystemLocale>en-US</SystemLocale> - <UILanguage>en-US</UILanguage> - <UserLocale>en-US</UserLocale> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAccounts> @@ -330,9 +348,6 @@ <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> - <VMModeOptimizations> - <SkipWinREInitialization>true</SkipWinREInitialization> - </VMModeOptimizations> </OOBE> <RegisteredOrganization>Dockur</RegisteredOrganization> <RegisteredOwner>Windows for Docker</RegisteredOwner> @@ -349,49 +364,41 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable screensaver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>10</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index bde8809..e9aa13c 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -20,13 +20,13 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>300</Size> + <Size>256</Size> </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> <Order>2</Order> <Type>EFI</Type> - <Size>100</Size> + <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> @@ -135,6 +135,15 @@ <PathAndCredentials wcm:action="add" wcm:keyValue="10"> <Path>D:\vioserial\w10\amd64</Path> </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\w10\amd64</Path> + </PathAndCredentials> </DriverPaths> </component> </settings> @@ -142,9 +151,6 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> - <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <ComputerName>*</ComputerName> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -176,18 +182,27 @@ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <RunSynchronous> <RunSynchronousCommand wcm:action="add"> @@ -196,99 +211,102 @@ </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>2</Order> - <Path>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</Path> - </RunSynchronousCommand> - <RunSynchronousCommand wcm:action="add"> - <Order>3</Order> - <Path>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</Path> - </RunSynchronousCommand> - <RunSynchronousCommand wcm:action="add"> - <Order>4</Order> - <Path>fsutil.exe behavior set disableLastAccess 1</Path> - </RunSynchronousCommand> - <RunSynchronousCommand wcm:action="add"> - <Order>5</Order> <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>3</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>4</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>5</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>6</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>7</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>8</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>9</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>10</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>11</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>12</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <Path>reg.exe unload "HKU\mount"</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> </RunSynchronous> </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> <settings pass="oobeSystem"> - <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <InputLocale>0409:00000409</InputLocale> - <SystemLocale>en-US</SystemLocale> - <UILanguage>en-US</UILanguage> - <UserLocale>en-US</UserLocale> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAccounts> @@ -326,9 +344,6 @@ <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> - <VMModeOptimizations> - <SkipWinREInitialization>true</SkipWinREInitialization> - </VMModeOptimizations> </OOBE> <RegisteredOrganization>Dockur</RegisteredOrganization> <RegisteredOwner>Windows for Docker</RegisteredOwner> @@ -345,49 +360,41 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable screensaver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>10</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index d9dde21..fa42146 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -20,13 +20,13 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>300</Size> + <Size>256</Size> </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> <Order>2</Order> <Type>EFI</Type> - <Size>100</Size> + <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> @@ -153,6 +153,15 @@ <PathAndCredentials wcm:action="add" wcm:keyValue="10"> <Path>D:\vioserial\w11\amd64</Path> </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\w11\amd64</Path> + </PathAndCredentials> </DriverPaths> </component> </settings> @@ -160,9 +169,6 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> - <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <ComputerName>*</ComputerName> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -194,18 +200,27 @@ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <RunSynchronous> <RunSynchronousCommand wcm:action="add"> @@ -214,99 +229,102 @@ </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>2</Order> - <Path>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</Path> - </RunSynchronousCommand> - <RunSynchronousCommand wcm:action="add"> - <Order>3</Order> - <Path>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</Path> - </RunSynchronousCommand> - <RunSynchronousCommand wcm:action="add"> - <Order>4</Order> - <Path>fsutil.exe behavior set disableLastAccess 1</Path> - </RunSynchronousCommand> - <RunSynchronousCommand wcm:action="add"> - <Order>5</Order> <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>3</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>4</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>5</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>6</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>7</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>8</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>9</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>10</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>11</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>12</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <Path>reg.exe unload "HKU\mount"</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> </RunSynchronousCommand> </RunSynchronous> </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> <settings pass="oobeSystem"> - <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <InputLocale>0409:00000409</InputLocale> - <SystemLocale>en-US</SystemLocale> - <UILanguage>en-US</UILanguage> - <UserLocale>en-US</UserLocale> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAccounts> @@ -344,9 +362,6 @@ <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> - <VMModeOptimizations> - <SkipWinREInitialization>true</SkipWinREInitialization> - </VMModeOptimizations> </OOBE> <RegisteredOrganization>Dockur</RegisteredOrganization> <RegisteredOwner>Windows for Docker</RegisteredOwner> @@ -373,49 +388,41 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>8</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable screensaver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>12</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 1c0bc0a..4a4eac6 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -21,13 +21,13 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>300</Size> + <Size>256</Size> </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> <Order>2</Order> <Type>EFI</Type> - <Size>100</Size> + <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> @@ -141,6 +141,15 @@ <PathAndCredentials wcm:action="add" wcm:keyValue="10"> <Path>D:\vioserial\2k16\amd64</Path> </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\2k16\amd64</Path> + </PathAndCredentials> </DriverPaths> </component> </settings> @@ -148,9 +157,6 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> - <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <ComputerName>*</ComputerName> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -178,18 +184,21 @@ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> <SystemLocale>en-US</SystemLocale> @@ -220,6 +229,12 @@ </component> </settings> <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAccounts> <LocalAccounts> @@ -272,49 +287,41 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable screensaver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>10</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index c3a4106..bdb9f4d 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -21,13 +21,13 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>300</Size> + <Size>256</Size> </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> <Order>2</Order> <Type>EFI</Type> - <Size>100</Size> + <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> @@ -141,6 +141,15 @@ <PathAndCredentials wcm:action="add" wcm:keyValue="10"> <Path>D:\vioserial\2k19\amd64</Path> </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\2k19\amd64</Path> + </PathAndCredentials> </DriverPaths> </component> </settings> @@ -148,9 +157,6 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> - <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <ComputerName>*</ComputerName> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -182,18 +188,21 @@ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> <SystemLocale>en-US</SystemLocale> @@ -224,6 +233,12 @@ </component> </settings> <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAccounts> <LocalAccounts> @@ -260,9 +275,6 @@ <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> - <VMModeOptimizations> - <SkipWinREInitialization>true</SkipWinREInitialization> - </VMModeOptimizations> </OOBE> <RegisteredOrganization>Dockur</RegisteredOrganization> <RegisteredOwner>Windows for Docker</RegisteredOwner> @@ -279,49 +291,41 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable screensaver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>10</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 0799b24..425465e 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -21,13 +21,13 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>300</Size> + <Size>256</Size> </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> <Order>2</Order> <Type>EFI</Type> - <Size>100</Size> + <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> @@ -141,6 +141,15 @@ <PathAndCredentials wcm:action="add" wcm:keyValue="10"> <Path>D:\vioserial\2k22\amd64</Path> </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\2k22\amd64</Path> + </PathAndCredentials> </DriverPaths> </component> </settings> @@ -148,9 +157,6 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> - <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <ComputerName>*</ComputerName> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -182,18 +188,21 @@ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> <SystemLocale>en-US</SystemLocale> @@ -224,6 +233,12 @@ </component> </settings> <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAccounts> <LocalAccounts> @@ -260,9 +275,6 @@ <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> - <VMModeOptimizations> - <SkipWinREInitialization>true</SkipWinREInitialization> - </VMModeOptimizations> </OOBE> <RegisteredOrganization>Dockur</RegisteredOrganization> <RegisteredOwner>Windows for Docker</RegisteredOwner> @@ -279,49 +291,41 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable screensaver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>10</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index 41bcd5d..ec0da4f 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -124,9 +124,6 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> - <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <ComputerName>*</ComputerName> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -140,30 +137,55 @@ <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <SkipAutoActivation>true</SkipAutoActivation> </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + </component> <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableWER>1</DisableWER> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> <SystemLocale>en-US</SystemLocale> <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -200,6 +222,8 @@ <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> @@ -213,49 +237,41 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable screensaver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index d4d6591..a76acfa 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -20,13 +20,13 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>300</Size> + <Size>256</Size> </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> <Order>2</Order> <Type>EFI</Type> - <Size>100</Size> + <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> @@ -142,6 +142,15 @@ <PathAndCredentials wcm:action="add" wcm:keyValue="10"> <Path>D:\vioserial\w10\amd64</Path> </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\w10\amd64</Path> + </PathAndCredentials> </DriverPaths> </component> </settings> @@ -149,9 +158,6 @@ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <EnableLUA>false</EnableLUA> </component> - <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <ComputerName>*</ComputerName> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -179,26 +185,50 @@ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>about:blank</Home_Page> + <Home_Page>https://google.com</Home_Page> <Help_Page>about:blank</Help_Page> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <CEIPEnabled>0</CEIPEnabled> </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> <SystemLocale>en-US</SystemLocale> <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAccounts> <LocalAccounts> @@ -251,49 +281,41 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <RequiresUserInput>false</RequiresUserInput> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>6</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable screensaver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>10</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> From 63de796e1289a4ae4e16fc5c29891732ca8cb80c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 28 Jan 2024 18:02:35 +0100 Subject: [PATCH 086/505] feat: Improved Windows configuration (#122) --- assets/win10x64-ltsc.xml | 42 ++++++++++++++++++---------------------- assets/win10x64.xml | 42 ++++++++++++++++++---------------------- assets/win11x64.xml | 42 ++++++++++++++++++---------------------- assets/win2016-eval.xml | 42 ++++++++++++++++++---------------------- assets/win2019-eval.xml | 42 ++++++++++++++++++---------------------- assets/win2022-eval.xml | 42 ++++++++++++++++++---------------------- assets/win7x64.xml | 10 ++++++++++ assets/win81x64.xml | 42 ++++++++++++++++++---------------------- 8 files changed, 143 insertions(+), 161 deletions(-) diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index b339642..7f111ff 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -16,56 +16,42 @@ <DiskID>0</DiskID> <WillWipeDisk>true</WillWipeDisk> <CreatePartitions> - <!-- Windows RE Tools partition --> - <CreatePartition wcm:action="add"> - <Order>1</Order> - <Type>Primary</Type> - <Size>256</Size> - </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> - <Order>2</Order> + <Order>1</Order> <Type>EFI</Type> <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> - <Order>3</Order> + <Order>2</Order> <Type>MSR</Type> <Size>128</Size> </CreatePartition> <!-- Windows partition --> <CreatePartition wcm:action="add"> - <Order>4</Order> + <Order>3</Order> <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <!-- Windows RE Tools partition --> + <!-- System partition (ESP) --> <ModifyPartition wcm:action="add"> <Order>1</Order> <PartitionID>1</PartitionID> - <Label>WINRE</Label> - <Format>NTFS</Format> - <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> - </ModifyPartition> - <!-- System partition (ESP) --> - <ModifyPartition wcm:action="add"> - <Order>2</Order> - <PartitionID>2</PartitionID> <Label>System</Label> <Format>FAT32</Format> </ModifyPartition> <!-- MSR partition does not need to be modified --> <ModifyPartition wcm:action="add"> - <Order>3</Order> - <PartitionID>3</PartitionID> + <Order>2</Order> + <PartitionID>2</PartitionID> </ModifyPartition> <!-- Windows partition --> <ModifyPartition wcm:action="add"> - <Order>4</Order> - <PartitionID>4</PartitionID> + <Order>3</Order> + <PartitionID>3</PartitionID> <Label>Windows</Label> <Letter>C</Letter> <Format>NTFS</Format> @@ -83,7 +69,7 @@ </InstallFrom> <InstallTo> <DiskID>0</DiskID> - <PartitionID>4</PartitionID> + <PartitionID>3</PartitionID> </InstallTo> <InstallToAvailablePartition>false</InstallToAvailablePartition> </OSImage> @@ -399,6 +385,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index e9aa13c..6cc5d69 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -16,56 +16,42 @@ <DiskID>0</DiskID> <WillWipeDisk>true</WillWipeDisk> <CreatePartitions> - <!-- Windows RE Tools partition --> - <CreatePartition wcm:action="add"> - <Order>1</Order> - <Type>Primary</Type> - <Size>256</Size> - </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> - <Order>2</Order> + <Order>1</Order> <Type>EFI</Type> <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> - <Order>3</Order> + <Order>2</Order> <Type>MSR</Type> <Size>128</Size> </CreatePartition> <!-- Windows partition --> <CreatePartition wcm:action="add"> - <Order>4</Order> + <Order>3</Order> <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <!-- Windows RE Tools partition --> + <!-- System partition (ESP) --> <ModifyPartition wcm:action="add"> <Order>1</Order> <PartitionID>1</PartitionID> - <Label>WINRE</Label> - <Format>NTFS</Format> - <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> - </ModifyPartition> - <!-- System partition (ESP) --> - <ModifyPartition wcm:action="add"> - <Order>2</Order> - <PartitionID>2</PartitionID> <Label>System</Label> <Format>FAT32</Format> </ModifyPartition> <!-- MSR partition does not need to be modified --> <ModifyPartition wcm:action="add"> - <Order>3</Order> - <PartitionID>3</PartitionID> + <Order>2</Order> + <PartitionID>2</PartitionID> </ModifyPartition> <!-- Windows partition --> <ModifyPartition wcm:action="add"> - <Order>4</Order> - <PartitionID>4</PartitionID> + <Order>3</Order> + <PartitionID>3</PartitionID> <Label>Windows</Label> <Letter>C</Letter> <Format>NTFS</Format> @@ -77,7 +63,7 @@ <OSImage> <InstallTo> <DiskID>0</DiskID> - <PartitionID>4</PartitionID> + <PartitionID>3</PartitionID> </InstallTo> <InstallToAvailablePartition>false</InstallToAvailablePartition> </OSImage> @@ -395,6 +381,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index fa42146..c22e654 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -16,56 +16,42 @@ <DiskID>0</DiskID> <WillWipeDisk>true</WillWipeDisk> <CreatePartitions> - <!-- Windows RE Tools partition --> - <CreatePartition wcm:action="add"> - <Order>1</Order> - <Type>Primary</Type> - <Size>256</Size> - </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> - <Order>2</Order> + <Order>1</Order> <Type>EFI</Type> <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> - <Order>3</Order> + <Order>2</Order> <Type>MSR</Type> <Size>128</Size> </CreatePartition> <!-- Windows partition --> <CreatePartition wcm:action="add"> - <Order>4</Order> + <Order>3</Order> <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <!-- Windows RE Tools partition --> + <!-- System partition (ESP) --> <ModifyPartition wcm:action="add"> <Order>1</Order> <PartitionID>1</PartitionID> - <Label>WINRE</Label> - <Format>NTFS</Format> - <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> - </ModifyPartition> - <!-- System partition (ESP) --> - <ModifyPartition wcm:action="add"> - <Order>2</Order> - <PartitionID>2</PartitionID> <Label>System</Label> <Format>FAT32</Format> </ModifyPartition> <!-- MSR partition does not need to be modified --> <ModifyPartition wcm:action="add"> - <Order>3</Order> - <PartitionID>3</PartitionID> + <Order>2</Order> + <PartitionID>2</PartitionID> </ModifyPartition> <!-- Windows partition --> <ModifyPartition wcm:action="add"> - <Order>4</Order> - <PartitionID>4</PartitionID> + <Order>3</Order> + <PartitionID>3</PartitionID> <Label>Windows</Label> <Letter>C</Letter> <Format>NTFS</Format> @@ -77,7 +63,7 @@ <OSImage> <InstallTo> <DiskID>0</DiskID> - <PartitionID>4</PartitionID> + <PartitionID>3</PartitionID> </InstallTo> <InstallToAvailablePartition>false</InstallToAvailablePartition> </OSImage> @@ -423,6 +409,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 4a4eac6..936cb4c 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -17,56 +17,42 @@ <DiskID>0</DiskID> <WillWipeDisk>true</WillWipeDisk> <CreatePartitions> - <!-- Windows RE Tools partition --> - <CreatePartition wcm:action="add"> - <Order>1</Order> - <Type>Primary</Type> - <Size>256</Size> - </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> - <Order>2</Order> + <Order>1</Order> <Type>EFI</Type> <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> - <Order>3</Order> + <Order>2</Order> <Type>MSR</Type> <Size>128</Size> </CreatePartition> <!-- Windows partition --> <CreatePartition wcm:action="add"> - <Order>4</Order> + <Order>3</Order> <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <!-- Windows RE Tools partition --> + <!-- System partition (ESP) --> <ModifyPartition wcm:action="add"> <Order>1</Order> <PartitionID>1</PartitionID> - <Label>WINRE</Label> - <Format>NTFS</Format> - <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> - </ModifyPartition> - <!-- System partition (ESP) --> - <ModifyPartition wcm:action="add"> - <Order>2</Order> - <PartitionID>2</PartitionID> <Label>System</Label> <Format>FAT32</Format> </ModifyPartition> <!-- MSR partition does not need to be modified --> <ModifyPartition wcm:action="add"> - <Order>3</Order> - <PartitionID>3</PartitionID> + <Order>2</Order> + <PartitionID>2</PartitionID> </ModifyPartition> <!-- Windows partition --> <ModifyPartition wcm:action="add"> - <Order>4</Order> - <PartitionID>4</PartitionID> + <Order>3</Order> + <PartitionID>3</PartitionID> <Label>Windows</Label> <Letter>C</Letter> <Format>NTFS</Format> @@ -84,7 +70,7 @@ </InstallFrom> <InstallTo> <DiskID>0</DiskID> - <PartitionID>4</PartitionID> + <PartitionID>3</PartitionID> </InstallTo> <WillShowUI>OnError</WillShowUI> <InstallToAvailablePartition>false</InstallToAvailablePartition> @@ -322,6 +308,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index bdb9f4d..d4251aa 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -17,56 +17,42 @@ <DiskID>0</DiskID> <WillWipeDisk>true</WillWipeDisk> <CreatePartitions> - <!-- Windows RE Tools partition --> - <CreatePartition wcm:action="add"> - <Order>1</Order> - <Type>Primary</Type> - <Size>256</Size> - </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> - <Order>2</Order> + <Order>1</Order> <Type>EFI</Type> <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> - <Order>3</Order> + <Order>2</Order> <Type>MSR</Type> <Size>128</Size> </CreatePartition> <!-- Windows partition --> <CreatePartition wcm:action="add"> - <Order>4</Order> + <Order>3</Order> <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <!-- Windows RE Tools partition --> + <!-- System partition (ESP) --> <ModifyPartition wcm:action="add"> <Order>1</Order> <PartitionID>1</PartitionID> - <Label>WINRE</Label> - <Format>NTFS</Format> - <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> - </ModifyPartition> - <!-- System partition (ESP) --> - <ModifyPartition wcm:action="add"> - <Order>2</Order> - <PartitionID>2</PartitionID> <Label>System</Label> <Format>FAT32</Format> </ModifyPartition> <!-- MSR partition does not need to be modified --> <ModifyPartition wcm:action="add"> - <Order>3</Order> - <PartitionID>3</PartitionID> + <Order>2</Order> + <PartitionID>2</PartitionID> </ModifyPartition> <!-- Windows partition --> <ModifyPartition wcm:action="add"> - <Order>4</Order> - <PartitionID>4</PartitionID> + <Order>3</Order> + <PartitionID>3</PartitionID> <Label>Windows</Label> <Letter>C</Letter> <Format>NTFS</Format> @@ -84,7 +70,7 @@ </InstallFrom> <InstallTo> <DiskID>0</DiskID> - <PartitionID>4</PartitionID> + <PartitionID>3</PartitionID> </InstallTo> <WillShowUI>OnError</WillShowUI> <InstallToAvailablePartition>false</InstallToAvailablePartition> @@ -326,6 +312,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 425465e..41afd0d 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -17,56 +17,42 @@ <DiskID>0</DiskID> <WillWipeDisk>true</WillWipeDisk> <CreatePartitions> - <!-- Windows RE Tools partition --> - <CreatePartition wcm:action="add"> - <Order>1</Order> - <Type>Primary</Type> - <Size>256</Size> - </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> - <Order>2</Order> + <Order>1</Order> <Type>EFI</Type> <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> - <Order>3</Order> + <Order>2</Order> <Type>MSR</Type> <Size>128</Size> </CreatePartition> <!-- Windows partition --> <CreatePartition wcm:action="add"> - <Order>4</Order> + <Order>3</Order> <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <!-- Windows RE Tools partition --> + <!-- System partition (ESP) --> <ModifyPartition wcm:action="add"> <Order>1</Order> <PartitionID>1</PartitionID> - <Label>WINRE</Label> - <Format>NTFS</Format> - <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> - </ModifyPartition> - <!-- System partition (ESP) --> - <ModifyPartition wcm:action="add"> - <Order>2</Order> - <PartitionID>2</PartitionID> <Label>System</Label> <Format>FAT32</Format> </ModifyPartition> <!-- MSR partition does not need to be modified --> <ModifyPartition wcm:action="add"> - <Order>3</Order> - <PartitionID>3</PartitionID> + <Order>2</Order> + <PartitionID>2</PartitionID> </ModifyPartition> <!-- Windows partition --> <ModifyPartition wcm:action="add"> - <Order>4</Order> - <PartitionID>4</PartitionID> + <Order>3</Order> + <PartitionID>3</PartitionID> <Label>Windows</Label> <Letter>C</Letter> <Format>NTFS</Format> @@ -84,7 +70,7 @@ </InstallFrom> <InstallTo> <DiskID>0</DiskID> - <PartitionID>4</PartitionID> + <PartitionID>3</PartitionID> </InstallTo> <WillShowUI>OnError</WillShowUI> <InstallToAvailablePartition>false</InstallToAvailablePartition> @@ -326,6 +312,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index ec0da4f..c725ab7 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -272,6 +272,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index a76acfa..5d8a491 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -16,56 +16,42 @@ <DiskID>0</DiskID> <WillWipeDisk>true</WillWipeDisk> <CreatePartitions> - <!-- Windows RE Tools partition --> - <CreatePartition wcm:action="add"> - <Order>1</Order> - <Type>Primary</Type> - <Size>256</Size> - </CreatePartition> <!-- System partition (ESP) --> <CreatePartition wcm:action="add"> - <Order>2</Order> + <Order>1</Order> <Type>EFI</Type> <Size>128</Size> </CreatePartition> <!-- Microsoft reserved partition (MSR) --> <CreatePartition wcm:action="add"> - <Order>3</Order> + <Order>2</Order> <Type>MSR</Type> <Size>128</Size> </CreatePartition> <!-- Windows partition --> <CreatePartition wcm:action="add"> - <Order>4</Order> + <Order>3</Order> <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <!-- Windows RE Tools partition --> + <!-- System partition (ESP) --> <ModifyPartition wcm:action="add"> <Order>1</Order> <PartitionID>1</PartitionID> - <Label>WINRE</Label> - <Format>NTFS</Format> - <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> - </ModifyPartition> - <!-- System partition (ESP) --> - <ModifyPartition wcm:action="add"> - <Order>2</Order> - <PartitionID>2</PartitionID> <Label>System</Label> <Format>FAT32</Format> </ModifyPartition> <!-- MSR partition does not need to be modified --> <ModifyPartition wcm:action="add"> - <Order>3</Order> - <PartitionID>3</PartitionID> + <Order>2</Order> + <PartitionID>2</PartitionID> </ModifyPartition> <!-- Windows partition --> <ModifyPartition wcm:action="add"> - <Order>4</Order> - <PartitionID>4</PartitionID> + <Order>3</Order> + <PartitionID>3</PartitionID> <Label>Windows</Label> <Letter>C</Letter> <Format>NTFS</Format> @@ -83,7 +69,7 @@ </InstallFrom> <InstallTo> <DiskID>0</DiskID> - <PartitionID>4</PartitionID> + <PartitionID>3</PartitionID> </InstallTo> <InstallToAvailablePartition>false</InstallToAvailablePartition> </OSImage> @@ -316,6 +302,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> From cf033a03ca773b840f3ef8fcd6f717e6acd14ebd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 28 Jan 2024 19:02:03 +0100 Subject: [PATCH 087/505] feat: Initial Windows Server 2025 support (#123) --- assets/win2025-eval.xml | 331 ++++++++++++++++++++++++++++++++++++++++ src/install.sh | 2 + 2 files changed, 333 insertions(+) create mode 100644 assets/win2025-eval.xml diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml new file mode 100644 index 0000000..3c633c3 --- /dev/null +++ b/assets/win2025-eval.xml @@ -0,0 +1,331 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Windows Server 2025 SERVERSTANDARD</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey /> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\2k22\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/src/install.sh b/src/install.sh index 4d026cc..9c4f09b 100644 --- a/src/install.sh +++ b/src/install.sh @@ -94,6 +94,7 @@ printVersion() { [[ "$id" == "win10"* ]] && desc="Windows 10" [[ "$id" == "win11"* ]] && desc="Windows 11" [[ "$id" == "winvista"* ]] && desc="Windows Vista" + [[ "$id" == "win2025"* ]] && desc="Windows Server 2025" [[ "$id" == "win2022"* ]] && desc="Windows Server 2022" [[ "$id" == "win2019"* ]] && desc="Windows Server 2019" [[ "$id" == "win2016"* ]] && desc="Windows Server 2016" @@ -353,6 +354,7 @@ getVersion() { [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" [[ "${name,,}" == *"windows vista"* ]] && detected="winvistax64" + [[ "${name,,}" == *"server 2025"* ]] && detected="win2025-eval" [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" From 8207169089e185fc15623da9548b230de0851f0f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 28 Jan 2024 19:09:05 +0100 Subject: [PATCH 088/505] feat: Windows Server support (#124) --- src/install.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index 9c4f09b..cfaa2f2 100644 --- a/src/install.sh +++ b/src/install.sh @@ -98,6 +98,8 @@ printVersion() { [[ "$id" == "win2022"* ]] && desc="Windows Server 2022" [[ "$id" == "win2019"* ]] && desc="Windows Server 2019" [[ "$id" == "win2016"* ]] && desc="Windows Server 2016" + [[ "$id" == "win2012"* ]] && desc="Windows Server 2012" + [[ "$id" == "win2008"* ]] && desc="Windows Server 2008" [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC" echo "$desc" @@ -358,7 +360,9 @@ getVersion() { [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" - + [[ "${name,,}" == *"server 2012"* ]] && detected="win2012-eval" + [[ "${name,,}" == *"server 2008"* ]] && detected="win2008-eval" + if [[ "${name,,}" == *"windows 10"* ]]; then if [[ "${name,,}" == *"ltsc"* ]]; then detected="win10x64-ltsc" From 2016dc8422ed2aa868e84c93ab8678f5fa3d02cb Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 29 Jan 2024 05:19:23 +0100 Subject: [PATCH 089/505] feat: Show download progress (#126) --- src/install.sh | 68 +++++++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/src/install.sh b/src/install.sh index cfaa2f2..2557d3e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -185,8 +185,7 @@ abortInstall() { startInstall() { - local magic desc - local msg="Windows is being started, please wait..." + html "Starting Windows..." if [ -f "$STORAGE/$CUSTOM" ]; then @@ -207,36 +206,24 @@ startInstall() { BASE="$VERSION.iso" - if ! skipInstall && [ ! -f "$STORAGE/$BASE" ]; then - - desc=$(printVersion "$VERSION") - [ -z "$desc" ] && desc="Windows" - msg="$desc is being downloaded, please wait..." - fi - else BASE=$(basename "${VERSION%%\?*}") : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') - if ! skipInstall && [ ! -f "$STORAGE/$BASE" ]; then - msg="Image '$BASE' is being downloaded, please wait..." - fi - fi [[ "${BASE,,}" == "custom."* ]] && BASE="windows.iso" fi - html "$msg" - [ -z "$MANUAL" ] && MANUAL="N" if [ -f "$STORAGE/$BASE" ]; then # Check if the ISO was already processed by our script + local magic="" magic=$(dd if="$STORAGE/$BASE" seek=0 bs=1 count=1 status=none | tr -d '\000') magic="$(printf '%s' "$magic" | od -A n -t x1 -v | tr -d ' \n')" @@ -277,34 +264,53 @@ downloadImage() { local iso="$1" local url="$2" - local progress + local file="$iso" + local desc="$BASE" + local rc progress + rm -f "$iso" + if [[ "$EXTERNAL" != [Yy1]* ]]; then + + file="$iso.PART" + desc=$(printVersion "$VERSION") + [ -z "$desc" ] && desc="Windows" + + fi + + local msg="Downloading $desc..." + info "$msg" && html "$msg" + + /run/progress.sh "$file" "Downloading $desc ([P])..." & + if [[ "$EXTERNAL" != [Yy1]* ]]; then cd "$TMP" - if ! /run/mido.sh "$url"; then - return 1 - fi + { /run/mido.sh "$url"; rc=$?; } || : cd /run - [ ! -f "$iso" ] && return 1 - return 0 - fi + fKill "progress.sh" + (( rc != 0 )) && return 1 - info "Downloading $BASE as boot image..." - - # Check if running with interactive TTY or redirected to docker log - if [ -t 1 ]; then - progress="--progress=bar:noscroll" else - progress="--progress=dot:giga" - fi - { wget "$url" -O "$iso" -q --no-check-certificate --show-progress "$progress"; rc=$?; } || : - (( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60 + # Check if running with interactive TTY or redirected to docker log + if [ -t 1 ]; then + progress="--progress=bar:noscroll" + else + progress="--progress=dot:giga" + fi + + { wget "$url" -O "$iso" -q --no-check-certificate --show-progress "$progress"; rc=$?; } || : + + fKill "progress.sh" + (( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60 + + fi [ ! -f "$iso" ] && return 1 + + html "Download finished successfully..." return 0 } From 178f55ff1739566200ca5014cf1a7b5eebd4ab3a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 29 Jan 2024 07:36:13 +0100 Subject: [PATCH 090/505] feat: Show custom names (#127) --- src/install.sh | 108 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 77 insertions(+), 31 deletions(-) diff --git a/src/install.sh b/src/install.sh index 2557d3e..4fb9402 100644 --- a/src/install.sh +++ b/src/install.sh @@ -18,8 +18,8 @@ fi [[ "${VERSION,,}" == "8" ]] && VERSION="win81x64" [[ "${VERSION,,}" == "81" ]] && VERSION="win81x64" [[ "${VERSION,,}" == "8.1" ]] && VERSION="win81x64" -[[ "${VERSION,,}" == "win81" ]] && VERSION="win81x64" [[ "${VERSION,,}" == "win8" ]] && VERSION="win81x64" +[[ "${VERSION,,}" == "win81" ]] && VERSION="win81x64" [[ "${VERSION,,}" == "7" ]] && VERSION="win7x64" [[ "${VERSION,,}" == "win7" ]] && VERSION="win7x64" @@ -106,6 +106,76 @@ printVersion() { return 0 } +getName() { + + local file="$1" + local desc="" + + [[ "${file,,}" == "win11"* ]] && desc="Windows 11" + [[ "${file,,}" == "win10"* ]] && desc="Windows 10" + [[ "${file,,}" == "win8.1"* ]] && desc="Windows 8" + [[ "${file,,}" == "win8"* ]] && desc="Windows 8" + [[ "${file,,}" == "win7"* ]] && desc="Windows 7" + [[ "${file,,}" == "tiny10"* ]] && desc="Tiny 10" + [[ "${file,,}" == "tiny11"* ]] && desc="Tiny 11" + [[ "${file,,}" == "tiny11_core"* ]] && desc="Tiny 11 Core" + [[ "${file,,}" == *"windows11"* ]] && desc="Windows 11" + [[ "${file,,}" == *"windows10"* ]] && desc="Windows 10" + [[ "${file,,}" == *"windows8.1"* ]] && desc="Windows 8" + [[ "${file,,}" == *"windows8"* ]] && desc="Windows 8" + [[ "${file,,}" == *"windows7"* ]] && desc="Windows 7" + [[ "${file,,}" == *"windows_11"* ]] && desc="Windows 11" + [[ "${file,,}" == *"windows_10"* ]] && desc="Windows 10" + [[ "${file,,}" == *"windows_8.1"* ]] && desc="Windows 8" + [[ "${file,,}" == *"windows_8"* ]] && desc="Windows 8" + [[ "${file,,}" == *"windows_7"* ]] && desc="Windows 7" + [[ "${file,,}" == *"windows_xp"* ]] && desc="Windows XP" + [[ "${file,,}" == *"windows_vista"* ]] && desc="Windows Vista" + [[ "${file,,}" == *"server2008"* ]] && desc="Windows Server 2008" + [[ "${file,,}" == *"server2012"* ]] && desc="Windows Server 2012" + [[ "${file,,}" == *"server2016"* ]] && desc="Windows Server 2016" + [[ "${file,,}" == *"server2019"* ]] && desc="Windows Server 2019" + [[ "${file,,}" == *"server2022"* ]] && desc="Windows Server 2022" + [[ "${file,,}" == *"server2025"* ]] && desc="Windows Server 2025" + [[ "${file,,}" == *"server_2008"* ]] && desc="Windows Server 2008" + [[ "${file,,}" == *"server_2012"* ]] && desc="Windows Server 2012" + [[ "${file,,}" == *"server_2016"* ]] && desc="Windows Server 2016" + [[ "${file,,}" == *"server_2019"* ]] && desc="Windows Server 2019" + [[ "${file,,}" == *"server_2022"* ]] && desc="Windows Server 2022" + [[ "${file,,}" == *"server_2025"* ]] && desc="Windows Server 2025" + + echo "$desc" + return 0 +} + +getVersion() { + + local name="$1" + local detected="" + + [[ "${name,,}" == *"windows 7"* ]] && detected="win7x64" + [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" + [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" + [[ "${name,,}" == *"windows vista"* ]] && detected="winvistax64" + [[ "${name,,}" == *"server 2025"* ]] && detected="win2025-eval" + [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" + [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" + [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" + [[ "${name,,}" == *"server 2012"* ]] && detected="win2012-eval" + [[ "${name,,}" == *"server 2008"* ]] && detected="win2008-eval" + + if [[ "${name,,}" == *"windows 10"* ]]; then + if [[ "${name,,}" == *"ltsc"* ]]; then + detected="win10x64-ltsc" + else + detected="win10x64" + fi + fi + + echo "$detected" + return 0 +} + replaceXML() { local dir="$1" @@ -265,8 +335,7 @@ downloadImage() { local iso="$1" local url="$2" local file="$iso" - local desc="$BASE" - local rc progress + local desc rc progress rm -f "$iso" @@ -276,6 +345,11 @@ downloadImage() { desc=$(printVersion "$VERSION") [ -z "$desc" ] && desc="Windows" + else + + desc=$(getName "$BASE") + [ -z "$desc" ] && desc="$BASE" + fi local msg="Downloading $desc..." @@ -353,34 +427,6 @@ extractImage() { return 0 } -getVersion() { - - local name="$1" - local detected="" - - [[ "${name,,}" == *"windows 7"* ]] && detected="win7x64" - [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" - [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" - [[ "${name,,}" == *"windows vista"* ]] && detected="winvistax64" - [[ "${name,,}" == *"server 2025"* ]] && detected="win2025-eval" - [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" - [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" - [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" - [[ "${name,,}" == *"server 2012"* ]] && detected="win2012-eval" - [[ "${name,,}" == *"server 2008"* ]] && detected="win2008-eval" - - if [[ "${name,,}" == *"windows 10"* ]]; then - if [[ "${name,,}" == *"ltsc"* ]]; then - detected="win10x64-ltsc" - else - detected="win10x64" - fi - fi - - echo "$detected" - return 0 -} - detectImage() { XML="" From c66cc5cf651fa6d26a727896da98ad28d938f9a2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 29 Jan 2024 08:35:27 +0100 Subject: [PATCH 091/505] feat: Add Windows Server 2012 support (#128) --- assets/win2012r2-eval.xml | 327 ++++++++++++++++++++++++++++++++++++++ readme.md | 7 +- src/install.sh | 8 +- 3 files changed, 337 insertions(+), 5 deletions(-) create mode 100644 assets/win2012r2-eval.xml diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml new file mode 100644 index 0000000..2f87332 --- /dev/null +++ b/assets/win2012r2-eval.xml @@ -0,0 +1,327 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/image/index</Key> + <Value>2</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey /> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\2k16\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> + <Description>Install VirtIO drivers</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/readme.md b/readme.md index ea5b388..f0f5e06 100644 --- a/readme.md +++ b/readme.md @@ -80,9 +80,10 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | |||||| - | `win22` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | - | `win19` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | - | `win16` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | + | `2022` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | + | `2019` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | + | `2016` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | + | `2012` | Windows Server 2012 | Microsoft | Fast | 4.3 GB | |||||| | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | diff --git a/src/install.sh b/src/install.sh index 4fb9402..d9d8a0a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -39,6 +39,10 @@ fi [[ "${VERSION,,}" == "win16" ]] && VERSION="win2016-eval" [[ "${VERSION,,}" == "win2016" ]] && VERSION="win2016-eval" +[[ "${VERSION,,}" == "2012" ]] && VERSION="win2012r2-eval" +[[ "${VERSION,,}" == "w12r2" ]] && VERSION="win2012r2-eval" +[[ "${VERSION,,}" == "win2012" ]] && VERSION="win2012r2-eval" + [[ "${VERSION,,}" == "ltsc10" ]] && VERSION="win10x64-enterprise-ltsc-eval" [[ "${VERSION,,}" == "10ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" [[ "${VERSION,,}" == "win10-ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" @@ -161,8 +165,8 @@ getVersion() { [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" - [[ "${name,,}" == *"server 2012"* ]] && detected="win2012-eval" - [[ "${name,,}" == *"server 2008"* ]] && detected="win2008-eval" + [[ "${name,,}" == *"server 2012"* ]] && detected="win2012r2-eval" + [[ "${name,,}" == *"server 2008"* ]] && detected="win2008r2" if [[ "${name,,}" == *"windows 10"* ]]; then if [[ "${name,,}" == *"ltsc"* ]]; then From a9ceb9387ee424b7bc68479939df3ec5677e384e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 29 Jan 2024 08:37:42 +0100 Subject: [PATCH 092/505] docs: Readme (#129) --- readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index f0f5e06..7ae53bc 100644 --- a/readme.md +++ b/readme.md @@ -80,10 +80,10 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | |||||| - | `2022` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | - | `2019` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | - | `2016` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | - | `2012` | Windows Server 2012 | Microsoft | Fast | 4.3 GB | + | `win22` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | + | `win19` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | + | `win16` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | + | `w12r2` | Windows Server 2012 | Microsoft | Fast | 4.3 GB | |||||| | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | From f89c48515633b768d8b9eac55f5f72e7417e691c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 29 Jan 2024 09:12:32 +0100 Subject: [PATCH 093/505] feat: Add Windows Server 2008 support (#130) --- assets/win2008r2.xml | 288 +++++++++++++++++++++++++++++++++++++++++++ readme.md | 3 +- src/install.sh | 4 +- 3 files changed, 292 insertions(+), 3 deletions(-) create mode 100644 assets/win2008r2.xml diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml new file mode 100644 index 0000000..921be8c --- /dev/null +++ b/assets/win2008r2.xml @@ -0,0 +1,288 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + <TypeID>0x27</TypeID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>1</Value> + <Key>/IMAGE/INDEX</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey /> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\2k8R2\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/readme.md b/readme.md index 7ae53bc..d66c058 100644 --- a/readme.md +++ b/readme.md @@ -83,7 +83,8 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | `win22` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | | `win19` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | | `win16` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | - | `w12r2` | Windows Server 2012 | Microsoft | Fast | 4.3 GB | + | `2012` | Windows Server 2012 R2| Microsoft | Fast | 4.3 GB | + | `2008` | Windows Server 2008 R2 | Microsoft | Fast | 3.0 GB | |||||| | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | diff --git a/src/install.sh b/src/install.sh index d9d8a0a..19f99c9 100644 --- a/src/install.sh +++ b/src/install.sh @@ -454,7 +454,7 @@ detectImage() { dsc=$(printVersion "$DETECTED") [ -z "$dsc" ] && dsc="$DETECTED" - warn "got $desc, but no matching XML file exists, $FB." + warn "got $dsc, but no matching XML file exists, $FB." return 0 fi @@ -508,7 +508,7 @@ prepareImage() { local iso="$1" local dir="$2" - if [[ "${BOOT_MODE,,}" == "windows" ]]; then + if [[ "${BOOT_MODE,,}" == "windows" ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then if [[ "${DETECTED,,}" != "win7x64"* ]] && [[ "${DETECTED,,}" != "winvistax64"* ]]; then if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then From 40a750f148a0a8e2eb491d498c6d55958a76bda5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 29 Jan 2024 09:17:28 +0100 Subject: [PATCH 094/505] feat: Windows Server 2008 support (#131) --- src/install.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index 19f99c9..286120d 100644 --- a/src/install.sh +++ b/src/install.sh @@ -40,9 +40,11 @@ fi [[ "${VERSION,,}" == "win2016" ]] && VERSION="win2016-eval" [[ "${VERSION,,}" == "2012" ]] && VERSION="win2012r2-eval" -[[ "${VERSION,,}" == "w12r2" ]] && VERSION="win2012r2-eval" [[ "${VERSION,,}" == "win2012" ]] && VERSION="win2012r2-eval" +[[ "${VERSION,,}" == "2008" ]] && VERSION="win2008r2" +[[ "${VERSION,,}" == "win2008" ]] && VERSION="win2008r2" + [[ "${VERSION,,}" == "ltsc10" ]] && VERSION="win10x64-enterprise-ltsc-eval" [[ "${VERSION,,}" == "10ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" [[ "${VERSION,,}" == "win10-ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" From de8f08a7af5b24b0fc432c46a0763efd26a8293e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 29 Jan 2024 09:23:44 +0100 Subject: [PATCH 095/505] docs: Readme (#132) --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index d66c058..2f89f19 100644 --- a/readme.md +++ b/readme.md @@ -80,9 +80,9 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | |||||| - | `win22` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | - | `win19` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | - | `win16` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | + | `2022` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | + | `2019` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | + | `2016` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | | `2012` | Windows Server 2012 R2| Microsoft | Fast | 4.3 GB | | `2008` | Windows Server 2008 R2 | Microsoft | Fast | 3.0 GB | |||||| From 152abf14433398ae9bbf8eef05d27b30b15395ef Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 29 Jan 2024 11:19:18 +0100 Subject: [PATCH 096/505] build: Add Hadolint (#133) --- .github/workflows/check.yml | 6 ++++++ .github/workflows/test.yml | 1 + 2 files changed, 7 insertions(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 133ad84..9dd2180 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -17,3 +17,9 @@ jobs: with: path: "assets" file-endings: ".xml" + - name: Lint Dockerfile + uses: hadolint/hadolint-action@v3.1.0 + with: + dockerfile: Dockerfile + ignore: DL3008 + failure-threshold: warning diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b4b88a3..4903636 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,6 +6,7 @@ on: - '**/*.xml' - '.github/workflows/test.yml' - '.github/workflows/check.yml' + - 'Dockerfile' name: "Test" permissions: {} From 783a4ef023ee31f208a33a1a7ef0532f133e2d16 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 29 Jan 2024 17:19:34 +0100 Subject: [PATCH 097/505] feat: Added Windows Vista support (#135) --- assets/win7x64.xml | 2 +- assets/winvistax64.xml | 250 +++++++++++++++++++++++++++++++++++++++++ readme.md | 1 + src/install.sh | 12 ++ 4 files changed, 264 insertions(+), 1 deletion(-) create mode 100644 assets/winvistax64.xml diff --git a/assets/win7x64.xml b/assets/win7x64.xml index c725ab7..a3d30a2 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -103,7 +103,7 @@ <Path>D:\qemupciserial\w7\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w7\amd64</Path> + <Path>D:\qxldod\w8\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="7"> <Path>D:\vioinput\w7\amd64</Path> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml new file mode 100644 index 0000000..c425c40 --- /dev/null +++ b/assets/winvistax64.xml @@ -0,0 +1,250 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows Vista Ultimate</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>VMCB9-FDRV6-6CDQM-RV23K-RP8F7</Key> + </ProductKey> + </UserData> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k8\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k8\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\vioscsi\2k8\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-Licensing-SLC" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-Licensing-SLC-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <ProductKey>VMCB9-FDRV6-6CDQM-RV23K-RP8F7</ProductKey> + <TimeZone>Pacific Standard Time</TimeZone> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <Home_Page>about:blank</Home_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>false</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + <Description>Set AutoLogonCount to 0</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> + <Description>Disable firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable RDP</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off sidebar</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/readme.md b/readme.md index 2f89f19..f917c28 100644 --- a/readme.md +++ b/readme.md @@ -79,6 +79,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | + | `vista` | Windows Vista SP2 | Bob Pony | Medium | 3.6 GB | |||||| | `2022` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | | `2019` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | diff --git a/src/install.sh b/src/install.sh index 286120d..c57ad05 100644 --- a/src/install.sh +++ b/src/install.sh @@ -24,6 +24,9 @@ fi [[ "${VERSION,,}" == "7" ]] && VERSION="win7x64" [[ "${VERSION,,}" == "win7" ]] && VERSION="win7x64" +[[ "${VERSION,,}" == "vista" ]] && VERSION="winvistax64" +[[ "${VERSION,,}" == "winvista" ]] && VERSION="winvistax64" + [[ "${VERSION,,}" == "22" ]] && VERSION="win2022-eval" [[ "${VERSION,,}" == "2022" ]] && VERSION="win2022-eval" [[ "${VERSION,,}" == "win22" ]] && VERSION="win2022-eval" @@ -59,6 +62,11 @@ if [[ "${VERSION,,}" == "win7x64" ]]; then VERSION="https://dl.bobpony.com/windows/7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" fi +if [[ "${VERSION,,}" == "winvistax64" ]]; then + DETECTED="winvistax64" + VERSION="https://dl.bobpony.com/windows/vista/en_windows_vista_sp2_x64_dvd_342267.iso" +fi + if [[ "${VERSION,,}" == "core11" ]]; then DETECTED="win11x64" VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" @@ -122,6 +130,8 @@ getName() { [[ "${file,,}" == "win8.1"* ]] && desc="Windows 8" [[ "${file,,}" == "win8"* ]] && desc="Windows 8" [[ "${file,,}" == "win7"* ]] && desc="Windows 7" + [[ "${file,,}" == "winxp"* ]] && desc="Windows XP" + [[ "${file,,}" == "winvista"* ]] && desc="Windows Vista" [[ "${file,,}" == "tiny10"* ]] && desc="Tiny 10" [[ "${file,,}" == "tiny11"* ]] && desc="Tiny 11" [[ "${file,,}" == "tiny11_core"* ]] && desc="Tiny 11 Core" @@ -130,6 +140,8 @@ getName() { [[ "${file,,}" == *"windows8.1"* ]] && desc="Windows 8" [[ "${file,,}" == *"windows8"* ]] && desc="Windows 8" [[ "${file,,}" == *"windows7"* ]] && desc="Windows 7" + [[ "${file,,}" == *"windowsxp"* ]] && desc="Windows XP" + [[ "${file,,}" == *"windowsvista"* ]] && desc="Windows Vista" [[ "${file,,}" == *"windows_11"* ]] && desc="Windows 11" [[ "${file,,}" == *"windows_10"* ]] && desc="Windows 10" [[ "${file,,}" == *"windows_8.1"* ]] && desc="Windows 8" From 9c8eee7a4de96e6afe0fb18712d907515867008f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 29 Jan 2024 19:38:27 +0100 Subject: [PATCH 098/505] fix: Delete win2025 xml (#136) --- assets/win2025-eval.xml | 331 ---------------------------------------- 1 file changed, 331 deletions(-) delete mode 100644 assets/win2025-eval.xml diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml deleted file mode 100644 index 3c633c3..0000000 --- a/assets/win2025-eval.xml +++ /dev/null @@ -1,331 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> - <settings pass="windowsPE"> - <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <SetupUILanguage> - <UILanguage>en-US</UILanguage> - </SetupUILanguage> - <InputLocale>0409:00000409</InputLocale> - <SystemLocale>en-US</SystemLocale> - <UILanguage>en-US</UILanguage> - <UILanguageFallback>en-US</UILanguageFallback> - <UserLocale>en-US</UserLocale> - </component> - <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DiskConfiguration> - <Disk wcm:action="add"> - <DiskID>0</DiskID> - <WillWipeDisk>true</WillWipeDisk> - <CreatePartitions> - <!-- System partition (ESP) --> - <CreatePartition wcm:action="add"> - <Order>1</Order> - <Type>EFI</Type> - <Size>128</Size> - </CreatePartition> - <!-- Microsoft reserved partition (MSR) --> - <CreatePartition wcm:action="add"> - <Order>2</Order> - <Type>MSR</Type> - <Size>128</Size> - </CreatePartition> - <!-- Windows partition --> - <CreatePartition wcm:action="add"> - <Order>3</Order> - <Type>Primary</Type> - <Extend>true</Extend> - </CreatePartition> - </CreatePartitions> - <ModifyPartitions> - <!-- System partition (ESP) --> - <ModifyPartition wcm:action="add"> - <Order>1</Order> - <PartitionID>1</PartitionID> - <Label>System</Label> - <Format>FAT32</Format> - </ModifyPartition> - <!-- MSR partition does not need to be modified --> - <ModifyPartition wcm:action="add"> - <Order>2</Order> - <PartitionID>2</PartitionID> - </ModifyPartition> - <!-- Windows partition --> - <ModifyPartition wcm:action="add"> - <Order>3</Order> - <PartitionID>3</PartitionID> - <Label>Windows</Label> - <Letter>C</Letter> - <Format>NTFS</Format> - </ModifyPartition> - </ModifyPartitions> - </Disk> - </DiskConfiguration> - <ImageInstall> - <OSImage> - <InstallFrom> - <MetaData wcm:action="add"> - <Key>/IMAGE/NAME</Key> - <Value>Windows Server 2025 SERVERSTANDARD</Value> - </MetaData> - </InstallFrom> - <InstallTo> - <DiskID>0</DiskID> - <PartitionID>3</PartitionID> - </InstallTo> - <WillShowUI>OnError</WillShowUI> - <InstallToAvailablePartition>false</InstallToAvailablePartition> - </OSImage> - </ImageInstall> - <DynamicUpdate> - <Enable>true</Enable> - <WillShowUI>Never</WillShowUI> - </DynamicUpdate> - <UpgradeData> - <Upgrade>false</Upgrade> - <WillShowUI>Never</WillShowUI> - </UpgradeData> - <UserData> - <AcceptEula>true</AcceptEula> - <FullName>Docker</FullName> - <Organization>Windows for Docker</Organization> - <ProductKey /> - </UserData> - <EnableFirewall>false</EnableFirewall> - <Diagnostics> - <OptIn>false</OptIn> - </Diagnostics> - </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\2k22\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> - </settings> - <settings pass="offlineServicing"> - <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <EnableLUA>false</EnableLUA> - </component> - </settings> - <settings pass="generalize"> - <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> - </component> - <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <SkipRearm>1</SkipRearm> - </component> - </settings> - <settings pass="specialize"> - <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <SkipAutoActivation>true</SkipAutoActivation> - </component> - <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <ComputerName>*</ComputerName> - <OEMInformation> - <Manufacturer>Dockur</Manufacturer> - <Model>Windows for Docker</Model> - <SupportHours>24/7</SupportHours> - <SupportPhone /> - <SupportProvider>Dockur</SupportProvider> - <SupportURL>https://github.com/dockur/windows/issues</SupportURL> - </OEMInformation> - <OEMName>Windows for Docker</OEMName> - </component> - <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableWER>1</DisableWER> - </component> - <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>https://google.com</Home_Page> - <Help_Page>about:blank</Help_Page> - </component> - <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableAccelerators>true</DisableAccelerators> - <DisableFirstRunWizard>true</DisableFirstRunWizard> - <Home_Page>https://google.com</Home_Page> - <Help_Page>about:blank</Help_Page> - </component> - <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <CEIPEnabled>0</CEIPEnabled> - </component> - <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DisableSR>1</DisableSR> - </component> - <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <InputLocale>0409:00000409</InputLocale> - <SystemLocale>en-US</SystemLocale> - <UILanguage>en-US</UILanguage> - <UILanguageFallback>en-US</UILanguageFallback> - <UserLocale>en-US</UserLocale> - </component> - <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> - </component> - <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> - </component> - <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <fDenyTSConnections>false</fDenyTSConnections> - </component> - <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <UserAuthentication>0</UserAuthentication> - </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> - </settings> - <settings pass="oobeSystem"> - <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <PreventDeviceEncryption>true</PreventDeviceEncryption> - </component> - <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> - </component> - <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <UserAccounts> - <LocalAccounts> - <LocalAccount wcm:action="add"> - <Name>Docker</Name> - <Group>Administrators</Group> - <Password> - <Value /> - <PlainText>true</PlainText> - </Password> - </LocalAccount> - </LocalAccounts> - <AdministratorPassword> - <Value>password</Value> - <PlainText>true</PlainText> - </AdministratorPassword> - </UserAccounts> - <AutoLogon> - <Username>Docker</Username> - <Enabled>true</Enabled> - <LogonCount>1</LogonCount> - <Password> - <Value /> - <PlainText>true</PlainText> - </Password> - </AutoLogon> - <OOBE> - <HideEULAPage>true</HideEULAPage> - <HideLocalAccountScreen>true</HideLocalAccountScreen> - <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> - <HideOnlineAccountScreens>true</HideOnlineAccountScreens> - <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> - <ProtectYourPC>3</ProtectYourPC> - <SkipUserOOBE>true</SkipUserOOBE> - <SkipMachineOOBE>true</SkipMachineOOBE> - </OOBE> - <RegisteredOrganization>Dockur</RegisteredOrganization> - <RegisteredOwner>Windows for Docker</RegisteredOwner> - <FirstLogonCommands> - <SynchronousCommand wcm:action="add"> - <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> - <Description>Password Never Expires</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>4</Order> - <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> - <Description>Disable Hibernation</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>5</Order> - <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> - <Description>Disable monitor blanking</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>6</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable first-run experience in Edge</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Show file extensions in Explorer</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>10</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Zero Hibernation File</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>11</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>12</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> - </SynchronousCommand> - </FirstLogonCommands> - </component> - </settings> -</unattend> From 5a9be7ffb548affa3d83fd8fc71eb2d7e8cfb0d4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 30 Jan 2024 16:47:42 +0100 Subject: [PATCH 099/505] docs: Readme (#138) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index f917c28..5b79fe0 100644 --- a/readme.md +++ b/readme.md @@ -63,7 +63,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti * ### How do I select the Windows version? - By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to download: + By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to be downloaded: ```yaml environment: From 890a7e441386db97a1d005dbe9fe8c7c9e483432 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 30 Jan 2024 16:49:53 +0100 Subject: [PATCH 100/505] docs: Readme (#139) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 5b79fe0..6835974 100644 --- a/readme.md +++ b/readme.md @@ -72,7 +72,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Select from the values below: - | **Value** | **Description** | **Server** | **Transfer** | **Size** | + | **Value** | **Description** | **Source** | **Transfer** | **Size** | |---|---|---|---|---| | `win11` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | | `win10` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | From b807b422cd1becd519c58eef74748a38fc2612ba Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 31 Jan 2024 04:38:22 +0100 Subject: [PATCH 101/505] docs: Readme (#141) --- readme.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/readme.md b/readme.md index 6835974..6354f3d 100644 --- a/readme.md +++ b/readme.md @@ -165,6 +165,57 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Alternatively, you can also rename a local file to `custom.iso` and place it in an empty `/storage` folder to skip the download. +* ### How do I assign an individual IP address to the container? + + By default, the container uses bridge networking, which shares the IP address with the host. + + If you want to assign an individual IP address to the container, you can create a macvlan network as follows: + + ```bash + docker network create -d macvlan \ + --subnet=192.168.0.0/24 \ + --gateway=192.168.0.1 \ + --ip-range=192.168.0.100/28 \ + -o parent=eth0 vlan + ``` + + Be sure to modify these values to match your local subnet. + + Once you have created the network, change your compose file to look as follows: + + ```yaml + services: + windows: + container_name: windows + ..<snip>.. + networks: + vlan: + ipv4_address: 192.168.0.100 + + networks: + vlan: + external: true + ``` + + An added benefit of this approach is that you won't have to perform any port mapping anymore, since all ports will be exposed by default. + + Please note that this IP address won't be accessible from the Docker host due to the design of macvlan, which doesn't permit communication between the two. If this is a concern, you need to create a [second macvlan](https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access) as a workaround. + +* ### How can Windows acquire an IP address from my router? + + After configuring the container for macvlan (see above), it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC. + + To enable this mode, add the following lines to your compose file: + + ```yaml + environment: + DHCP: "Y" + device_cgroup_rules: + - 'c *:* rwm' + ``` + + Please note that in this mode, the container and Windows will each have their own separate IPs. The container will keep the macvlan IP, and Windows will use the DHCP IP. + * ### How do I pass-through a disk? It is possible to pass-through disk devices directly by adding them to your compose file in this way: From ae57b1353c6bf3fd4f2fd9bb06e1f010c77fe568 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 31 Jan 2024 13:40:50 +0100 Subject: [PATCH 102/505] docs: USB pass-through (#143) --- readme.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/readme.md b/readme.md index 6354f3d..7441bd2 100644 --- a/readme.md +++ b/readme.md @@ -230,6 +230,17 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti ``` Use `DEVICE` if you want it to become your main drive, and use `DEVICE2` and higher to add them as secondary drives. + +* ### How do I pass-through a USB device? + + To pass-through a USB device, first lookup its vendor and product id via the `lsusb` command, then add them to your compose file like this: + + ```yaml + environment: + ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234" + devices: + - /dev/bus/usb + ``` * ### How do I verify if my system supports KVM? From 12159883547a787d1d00bc610b3fbda957ff603c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 1 Feb 2024 14:16:54 +0100 Subject: [PATCH 103/505] feat: Windows XP support (#144) --- .github/workflows/check.yml | 2 +- readme.md | 29 ++--- src/install.sh | 234 ++++++++++++++++++++++++++++++++---- src/mido.sh | 6 +- 4 files changed, 227 insertions(+), 44 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 9dd2180..2c1ce5a 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,7 +11,7 @@ jobs: - 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 + 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: diff --git a/readme.md b/readme.md index 7441bd2..f35d487 100644 --- a/readme.md +++ b/readme.md @@ -74,22 +74,23 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | **Value** | **Description** | **Source** | **Transfer** | **Size** | |---|---|---|---|---| - | `win11` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | - | `win10` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | - | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | - | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | - | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | - | `vista` | Windows Vista SP2 | Bob Pony | Medium | 3.6 GB | + | `win11` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | + | `win10` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | + | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | + | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | + | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | + | `vista` | Windows Vista SP2 | Bob Pony | Medium | 3.6 GB | + | `winxp` | Windows XP SP3 | Bob Pony | Medium | 0.6 GB | |||||| - | `2022` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | - | `2019` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | - | `2016` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | - | `2012` | Windows Server 2012 R2| Microsoft | Fast | 4.3 GB | - | `2008` | Windows Server 2008 R2 | Microsoft | Fast | 3.0 GB | + | `2022` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | + | `2019` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | + | `2016` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | + | `2012` | Windows Server 2012 R2 | Microsoft | Fast | 4.3 GB | + | `2008` | Windows Server 2008 R2 | Microsoft | Fast | 3.0 GB | |||||| - | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | - | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | - | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | + | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | + | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | + | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | * ### How do I increase the amount of CPU or RAM? diff --git a/src/install.sh b/src/install.sh index c57ad05..f698cce 100644 --- a/src/install.sh +++ b/src/install.sh @@ -27,6 +27,9 @@ fi [[ "${VERSION,,}" == "vista" ]] && VERSION="winvistax64" [[ "${VERSION,,}" == "winvista" ]] && VERSION="winvistax64" +[[ "${VERSION,,}" == "xp" ]] && VERSION="winxpx86" +[[ "${VERSION,,}" == "winxp" ]] && VERSION="winxpx86" + [[ "${VERSION,,}" == "22" ]] && VERSION="win2022-eval" [[ "${VERSION,,}" == "2022" ]] && VERSION="win2022-eval" [[ "${VERSION,,}" == "win22" ]] && VERSION="win2022-eval" @@ -67,6 +70,11 @@ if [[ "${VERSION,,}" == "winvistax64" ]]; then VERSION="https://dl.bobpony.com/windows/vista/en_windows_vista_sp2_x64_dvd_342267.iso" fi +if [[ "${VERSION,,}" == "winxpx86" ]]; then + DETECTED="winxpx86" + VERSION="https://dl.bobpony.com/windows/xp/professional/en_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73974.iso" +fi + if [[ "${VERSION,,}" == "core11" ]]; then DETECTED="win11x64" VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" @@ -92,6 +100,7 @@ CUSTOM="custom.iso" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.IMG" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="CUSTOM.IMG" +MACHINE="q35" TMP="$STORAGE/tmp" DIR="$TMP/unpack" FB="falling back to manual installation!" @@ -107,6 +116,7 @@ printVersion() { [[ "$id" == "win8"* ]] && desc="Windows 8" [[ "$id" == "win10"* ]] && desc="Windows 10" [[ "$id" == "win11"* ]] && desc="Windows 11" + [[ "$id" == "winxp"* ]] && desc="Windows XP" [[ "$id" == "winvista"* ]] && desc="Windows Vista" [[ "$id" == "win2025"* ]] && desc="Windows Server 2025" [[ "$id" == "win2022"* ]] && desc="Windows Server 2022" @@ -250,7 +260,7 @@ finishInstall() { cp /run/version "$STORAGE/windows.ver" if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then - touch "$STORAGE/windows.old" + echo "$MACHINE" > "$STORAGE/windows.old" else rm -f "$STORAGE/windows.old" fi @@ -448,6 +458,7 @@ extractImage() { detectImage() { XML="" + local dir="$1" if [ -n "$CUSTOM" ]; then DETECTED="" @@ -464,22 +475,32 @@ detectImage() { return 0 fi - local dsc - dsc=$(printVersion "$DETECTED") - [ -z "$dsc" ] && dsc="$DETECTED" + if [[ "${DETECTED,,}" != "winxp"* ]]; then + + local dsc + dsc=$(printVersion "$DETECTED") + [ -z "$dsc" ] && dsc="$DETECTED" + + warn "got $dsc, but no matching XML file exists, $FB." + fi - warn "got $dsc, but no matching XML file exists, $FB." return 0 fi info "Detecting Windows version from ISO image..." - local dir="$1" + if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then + DETECTED="winxpx86" + info "Detected: Windows XP" + return 0 + fi + local tag result name name2 desc local loc="$dir/sources/install.wim" [ ! -f "$loc" ] && loc="$dir/sources/install.esd" if [ ! -f "$loc" ]; then + warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" return 1 @@ -517,27 +538,137 @@ detectImage() { return 0 } -prepareImage() { +prepareXP() { local iso="$1" local dir="$2" + local arch="x86" + local target="$dir/I386" - if [[ "${BOOT_MODE,,}" == "windows" ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then - if [[ "${DETECTED,,}" != "win7x64"* ]] && [[ "${DETECTED,,}" != "winvistax64"* ]]; then - - if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then - return 0 - fi - - if [ ! -f "$dir/$ETFS" ]; then - warn "failed to locate file 'etfsboot.com' in ISO image, falling back to legacy boot!" - else - warn "failed to locate file 'efisys_noprompt.bin' in ISO image, falling back to legacy boot!" - fi - - fi + if [ -d "$dir/AMD64" ]; then + arch="amd64" + target="$dir/AMD64" fi + MACHINE="pc-q35-2.10" + BOOT_MODE="windows_legacy" + ETFS="[BOOT]/Boot-NoEmul.img" + + [[ "$MANUAL" == [Yy1]* ]] && return 0 + + local drivers="$TMP/drivers" + rm -rf "$drivers" + + if ! 7z x /run/drivers.iso -o"$drivers" > /dev/null; then + error "Failed to extract driver ISO file!" + exit 66 + fi + + cp "$drivers/viostor/xp/$arch/viostor.sys" "$target" + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/xp/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/xp/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/xp/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/xp/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/xp/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/xp/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + + sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" + + cp -a "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" + cp -a "$drivers/sata/xp/$arch/." "$target" + + sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" + + rm -f "$target/winnt.sif" + rm -f "$target/Winnt.sif" + rm -f "$target/winnt.SIF" + rm -f "$target/WinNT.sif" + rm -f "$target/WINNT.sif" + rm -f "$target/WINNT.SIF" + + local key="M6TF9-8XQ2M-YQK9F-7TBB2-XGG88" + [[ "${arch,,}" == "amd64" ]] && key="B66VY-4D94T-TPPD4-43F72-8X4FY" + + local sif="$target/WINNT.SIF" + { echo "[Data]" + echo "AutoPartition=1" + echo "MsDosInitiated=\"0\"" + echo "UnattendedInstall=\"Yes\"" + echo "AutomaticUpdates=\"Yes\"" + echo "" + echo "[Unattended]" + echo "UnattendSwitch=Yes" + echo "UnattendMode=FullUnattended" + echo "FileSystem=NTFS" + echo "OemSkipEula=Yes" + echo "OemPreinstall=Yes" + echo "Repartition=Yes" + echo "WaitForReboot=\"No\"" + echo "DriverSigningPolicy=\"Ignore\"" + echo "NonDriverSigningPolicy=\"Ignore\"" + echo "OemPnPDriversPath=\"Drivers\viostor;Drivers\NetKVM;Drivers\sata\"" + echo "NoWaitAfterTextMode=1" + echo "NoWaitAfterGUIMode=1" + echo "FileSystem-ConvertNTFS" + echo "ExtendOemPartition=0" + echo "Hibernation=\"No\"" + echo "" + echo "[GuiUnattended]" + echo "OEMSkipRegional=1" + echo "OemSkipWelcome=1" + echo "AdminPassword=*" + echo "TimeZone=0" + echo "AutoLogon=Yes" + echo "AutoLogonCount=99999" + echo "" + echo "[UserData]" + echo "FullName=\"Docker\"" + echo "ComputerName=\"*\"" + echo "OrgName=\"Windows for Docker\"" + echo "ProductKey=$key" + echo "" + echo "[Identification]" + echo "JoinWorkgroup" + echo "" + echo "[Networking]" + echo "InstallDefaultComponents=Yes" + echo "" + echo "[RegionalSettings]" + echo "Language=00000409" + echo "" + echo "[TerminalServices]" + echo "AllowConnections=1" + } > "$sif" + + return 0 +} + +prepareLegacy() { + + local iso="$1" + local dir="$2" + ETFS="boot.img" BOOT_MODE="windows_legacy" @@ -553,6 +684,44 @@ prepareImage() { return 0 } +prepareImage() { + + local iso="$1" + local dir="$2" + + if [[ "${BOOT_MODE,,}" == "windows" ]]; then + if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then + if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; then + + if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then + return 0 + fi + + if [ ! -f "$dir/$ETFS" ]; then + warn "failed to locate file 'etfsboot.com' in ISO image, falling back to legacy boot!" + else + warn "failed to locate file 'efisys_noprompt.bin' in ISO image, falling back to legacy boot!" + fi + + fi + fi + fi + + if [[ "${DETECTED,,}" == "winxp"* ]]; then + if ! prepareXP "$iso" "$dir"; then + error "Failed to prepare Windows XP ISO!" + return 1 + fi + else + if ! prepareLegacy "$iso" "$dir"; then + error "Failed to prepare Windows ISO!" + return 1 + fi + fi + + return 0 +} + updateImage() { local iso="$1" @@ -627,12 +796,23 @@ buildImage() { else - if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ - -udf -allow-limited-size -quiet "$dir" 2> "$log"; then - [ -f "$log" ] && echo "$(<"$log")" - return 1 - fi + if [[ "${DETECTED,,}" != "winxp"* ]]; then + if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ + -udf -allow-limited-size -quiet "$dir" 2> "$log"; then + [ -f "$log" ] && echo "$(<"$log")" + return 1 + fi + + else + + if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ + -relaxed-filenames -V "$label" -quiet "$dir" 2> "$log"; then + [ -f "$log" ] && echo "$(<"$log")" + return 1 + fi + + fi fi local error="" @@ -655,6 +835,8 @@ buildImage() { if ! startInstall; then if [ -f "$STORAGE/windows.old" ]; then + MACHINE=$(<"$STORAGE/windows.old") + [ -z "$MACHINE" ] && MACHINE="q35" BOOT_MODE="windows_legacy" fi diff --git a/src/mido.sh b/src/mido.sh index bab64b2..caf268f 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -374,13 +374,13 @@ consumer_download() { if ! [ "$iso_download_link_html" ]; then # This should only happen if there's been some change to how this API works - echo_err "Microsoft servers gave us an empty response to our request for an automated download. Please manually download this ISO in a web browser: $url" + echo_err "Microsoft servers gave us an empty response to our request for an automated download. Please check the FAQ on how to boot from a local file and manually download this ISO in a web browser: $url" manual_verification="true" return 1 fi if echo "$iso_download_link_html" | grep -q "We are unable to complete your request at this time."; then - echo_err "Microsoft blocked the automated download request based on your IP address. Please manually download this ISO in a web browser here: $url" + echo_err "Microsoft blocked the automated download request based on your IP address. Please check the FAQ on how to boot from a local file and manually download this ISO in a web browser here: $url" manual_verification="true" return 1 fi @@ -392,7 +392,7 @@ consumer_download() { if ! [ "$iso_download_link" ]; then # This should only happen if there's been some change to the download endpoint web address - echo_err "Microsoft servers gave us no download link to our request for an automated download. Please manually download this ISO in a web browser: $url" + echo_err "Microsoft servers gave us no download link to our request for an automated download. Please check the FAQ on how to boot from a local file and manually download this ISO in a web browser: $url" manual_verification="true" return 1 fi From 32ede2ec235cf750385ce261fcb99f067bb8b169 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 2 Feb 2024 13:01:24 +0100 Subject: [PATCH 104/505] docs: Readme (#146) --- readme.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/readme.md b/readme.md index f35d487..ce512a6 100644 --- a/readme.md +++ b/readme.md @@ -126,6 +126,17 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Replace the example path `/var/win` with the desired storage folder. +* ### How do I install a custom image? + + In order to download a custom ISO image, start a clean container with the URL specified in the `VERSION` environment variable: + + ```yaml + environment: + VERSION: "https://example.com/win.iso" + ``` + + Alternatively, you can also rename a local file to `custom.iso` and place it in an empty `/storage` folder to skip the download. + * ### How do I perform a manual installation? It's best to use the automatic installation, as it optimizes various settings for use with this container. @@ -155,17 +166,6 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Enjoy your brand new machine, and don't forget to star this repo! -* ### How do I install a custom image? - - In order to download a custom ISO image, start a clean container with the URL specified in the `VERSION` environment variable: - - ```yaml - environment: - VERSION: "https://example.com/win.iso" - ``` - - Alternatively, you can also rename a local file to `custom.iso` and place it in an empty `/storage` folder to skip the download. - * ### How do I assign an individual IP address to the container? By default, the container uses bridge networking, which shares the IP address with the host. From 08648d119409357bec12388f774bd044469d7d31 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 3 Feb 2024 19:53:35 +0100 Subject: [PATCH 105/505] docs: Windows ARM (#148) --- readme.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index ce512a6..a67d388 100644 --- a/readme.md +++ b/readme.md @@ -91,7 +91,9 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | - + + To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). + * ### How do I increase the amount of CPU or RAM? By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. From 14c149782ae3085a951de023330c118662b848f7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 4 Feb 2024 19:45:32 +0100 Subject: [PATCH 106/505] feat: Alternative download method for Win 10 & 11 (#150) --- Dockerfile | 2 + src/install.sh | 208 ++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 199 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index b6b00e1..c5378dd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,9 @@ RUN apt-get update \ curl \ 7zip \ wimtools \ + cabextract \ genisoimage \ + libxml2-utils \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/src/install.sh b/src/install.sh index f698cce..c87c284 100644 --- a/src/install.sh +++ b/src/install.sh @@ -100,6 +100,7 @@ CUSTOM="custom.iso" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.IMG" [ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="CUSTOM.IMG" +ESD_URL="" MACHINE="q35" TMP="$STORAGE/tmp" DIR="$TMP/unpack" @@ -358,6 +359,74 @@ startInstall() { return 0 } +getESD() { + + local dir="$1" + local file="$2" + local architecture="x64" + local winCatalog size + + case "${VERSION,,}" in + win11x64) + winCatalog="https://go.microsoft.com/fwlink?linkid=2156292" + ;; + win10x64) + winCatalog="https://go.microsoft.com/fwlink/?LinkId=841361" + ;; + *) + error "Invalid ESD version specified: $VERSION" + return 1 + ;; + esac + + local msg="Downloading product information from Microsoft..." + info "$msg" && html "$msg" + + rm -rf "$dir" + mkdir -p "$dir" + + local wFile="catalog.cab" + + { wget "$winCatalog" -O "$dir/$wFile" -q --no-check-certificate; rc=$?; } || : + (( rc != 0 )) && error "Failed to download $winCatalog , reason: $rc" && return 1 + + cd "$dir" + + if ! cabextract "$wFile" > /dev/null; then + cd /run + error "Failed to extract CAB file!" && return 1 + fi + + cd /run + + if [ ! -f "$dir/products.xml" ]; then + error "Failed to find products.xml!" && return 1 + fi + + local esdLang="en-us" + local editionName="Professional" + local edQuery='//File[Architecture="'${architecture}'"][Edition="'${editionName}'"]' + + echo -e '<Catalog>' > "${dir}/products_filter.xml" + xmllint --nonet --xpath "${edQuery}" "${dir}/products.xml" >> "${dir}/products_filter.xml" 2>/dev/null + echo -e '</Catalog>'>> "${dir}/products_filter.xml" + xmllint --nonet --xpath '//File[LanguageCode="'${esdLang}'"]' "${dir}/products_filter.xml" >"${dir}/esd_edition.xml" + + size=$(stat -c%s "${dir}/esd_edition.xml") + if ((size<20)); then + error "Failed to find Windows product!" && return 1 + fi + + ESD_URL=$(xmllint --nonet --xpath '//FilePath' "${dir}/esd_edition.xml" | sed -E -e 's/<[\/]?FilePath>//g') + + if [ -z "$ESD_URL" ]; then + error "Failed to find ESD url!" && return 1 + fi + + rm -rf "$dir" + return 0 +} + downloadImage() { local iso="$1" @@ -382,7 +451,6 @@ downloadImage() { local msg="Downloading $desc..." info "$msg" && html "$msg" - /run/progress.sh "$file" "Downloading $desc ([P])..." & if [[ "$EXTERNAL" != [Yy1]* ]]; then @@ -392,30 +460,140 @@ downloadImage() { cd /run fKill "progress.sh" - (( rc != 0 )) && return 1 - else + if (( rc == 0 )); then - # Check if running with interactive TTY or redirected to docker log - if [ -t 1 ]; then - progress="--progress=bar:noscroll" - else - progress="--progress=dot:giga" + [ ! -f "$iso" ] && return 1 + + html "Download finished successfully..." + return 0 fi - { wget "$url" -O "$iso" -q --no-check-certificate --show-progress "$progress"; rc=$?; } || : + if [[ "$VERSION" != "win10x64"* ]] && [[ "$VERSION" != "win11x64" ]]; then + return 1 + fi - fKill "progress.sh" - (( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60 + info "Failed to download $desc using Mido, will try a different method now..." + + ISO="$TMP/$VERSION.esd" + iso="$ISO" + file="$ISO" + rm -f "$iso" + + if ! getESD "$TMP/esd" "$iso"; then + return 1 + fi + + url="$ESD_URL" + msg="Downloading $desc..." + info "$msg" && html "$msg" + /run/progress.sh "$iso" "Downloading $desc ([P])..." & fi + # Check if running with interactive TTY or redirected to docker log + if [ -t 1 ]; then + progress="--progress=bar:noscroll" + else + progress="--progress=dot:giga" + fi + + { wget "$url" -O "$iso" -q --no-check-certificate --show-progress "$progress"; rc=$?; } || : + + fKill "progress.sh" + (( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60 + [ ! -f "$iso" ] && return 1 html "Download finished successfully..." return 0 } +extractESD() { + + local iso="$1" + local dir="$2" + local size size_gb space space_gb desc + + desc=$(printVersion "$VERSION") + local msg="Extracting $desc bootdisk..." + info "$msg" && html "$msg" + + size=16106127360 + size_gb=$(( (size + 1073741823)/1073741824 )) + space=$(df --output=avail -B 1 "$TMP" | tail -n 1) + space_gb=$(( (space + 1073741823)/1073741824 )) + + if ((size<10000000)); then + error "Invalid ESD file: Size is smaller than 10 MB" && exit 62 + fi + + if (( size > space )); then + error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && exit 63 + fi + + rm -rf "$dir" + mkdir -p "$dir" + + local esdImageCount + esdImageCount=$(wimlib-imagex info "${iso}" | awk '/Image Count:/ {print $3}') + + wimlib-imagex apply "$iso" 1 "${dir}" --quiet 2>/dev/null || { + retVal=$? + error "Extracting bootdisk failed" && return $retVal + } + + local bootWimFile="${dir}/sources/boot.wim" + local installWimFile="${dir}/sources/install.wim" + + local msg="Extracting $desc environment..." + info "$msg" && html "$msg" + + wimlib-imagex export "${iso}" 2 "${bootWimFile}" --compress=LZX --chunk-size 32K --quiet || { + retVal=$? + error "Adding WinPE failed" && return ${retVal} + } + + local msg="Extracting $desc setup..." + info "$msg" && html "$msg" + + wimlib-imagex export "${iso}" 3 "$bootWimFile" --compress=LZX --chunk-size 32K --boot --quiet || { + retVal=$? + error "Adding Windows Setup failed" && return ${retVal} + } + + local msg="Extracting $desc image..." + info "$msg" && html "$msg" + + local edition imageIndex imageEdition + + case "${VERSION,,}" in + win11x64) + edition="11 pro" + ;; + win10x64) + edition="10 pro" + ;; + *) + error "Invalid version specified: $VERSION" + return 1 + ;; + esac + + for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do + imageEdition=$(wimlib-imagex info "${iso}" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//') + [[ "${imageEdition,,}" != *"$edition"* ]] && continue + wimlib-imagex export "${iso}" ${imageIndex} "${installWimFile}" --compress=LZMS --chunk-size 128K --quiet || { + retVal=$? + error "Addition of ${imageIndex} to the image failed" && return $retVal + } + return 0 + done + + error "Failed to find product in install.wim!" + return 1 +} + extractImage() { local iso="$1" @@ -423,6 +601,14 @@ extractImage() { local desc="downloaded ISO" local size size_gb space space_gb + if [[ "${iso,,}" == *".esd" ]]; then + if ! extractESD "$iso" "$dir"; then + error "Failed to extract ESD file!" + exit 67 + fi + return 0 + fi + if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then desc=$(printVersion "$VERSION") [ -z "$desc" ] && desc="downloaded ISO" From 249c5b7731da2864faabfc102b8596cfb0d229b6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 5 Feb 2024 16:09:58 +0100 Subject: [PATCH 107/505] docs: Readme (#152) --- readme.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index a67d388..72d0914 100644 --- a/readme.md +++ b/readme.md @@ -258,7 +258,10 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti * ### Is this project legal? - Yes, this project contains only open-source code and does not distribute any copyrighted material. Neither does it try to circumvent any copyright protection measures. So under all applicable laws, this project would be considered legal. + Yes, this project contains only open-source code and does not distribute any copyrighted material. Neither does it try to circumvent any copyright protection measures. So under all applicable laws, this project would be considered legal. + +## Stars +[![Stars](https://starchart.cc/dockur/windows.svg?variant=adaptive)](https://starchart.cc/dockur/windows) ## Disclaimer From 42a529530665b9087281eaf616a0e509e8cc1a5f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 6 Feb 2024 03:47:32 +0100 Subject: [PATCH 108/505] feat: Detect SeaBIOS status (#153) --- src/power.sh | 50 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/src/power.sh b/src/power.sh index e7f9b97..4280441 100644 --- a/src/power.sh +++ b/src/power.sh @@ -22,6 +22,29 @@ _trap() { done } +ready() { + + [ -f "$STORAGE/windows.boot" ] && return 0 + [ ! -f "$QEMU_PTY" ] && return 1 + + if [ -f "$STORAGE/windows.old" ]; then + local last + local bios="Booting from Hard Disk" + last=$(grep "^B.*" "$QEMU_PTY" | tail -1) + if [[ "${last,,}" == "${bios,,}"* ]]; then + return 0 + fi + return 1 + fi + + local line="Windows Boot Manager" + if grep -Fq "$line" "$QEMU_PTY"; then + return 0 + fi + + return 1 +} + finish() { local pid @@ -40,6 +63,14 @@ finish() { done fi + if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$STORAGE/$BASE" ]; then + # Remove CD-ROM ISO after install + if ready; then + rm -f "$STORAGE/$BASE" + touch "$STORAGE/windows.boot" + fi + fi + pid="/var/run/tpm.pid" [ -f "$pid" ] && pKill "$(<"$pid")" @@ -116,17 +147,9 @@ _graceful_shutdown() { finish "$code" && return "$code" fi - local remove_iso="" - - if [ ! -f "$STORAGE/windows.old" ]; then - if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$QEMU_PTY" ]; then - if grep -Fq "Windows Boot Manager" "$QEMU_PTY"; then - [ -f "$STORAGE/$BASE" ] && remove_iso="y" - else - info "Cannot send ACPI signal during Windows setup, aborting..." - finish "$code" && return "$code" - fi - fi + if ! ready; then + info "Cannot send ACPI signal during Windows setup, aborting..." + finish "$code" && return "$code" fi # Send ACPI shutdown signal @@ -151,11 +174,6 @@ _graceful_shutdown() { if [ "$cnt" -ge "$QEMU_TIMEOUT" ]; then error "Shutdown timeout reached, aborting..." - else - if [ -n "$remove_iso" ]; then - rm -f "$STORAGE/$BASE" - touch "$STORAGE/windows.boot" - fi fi finish "$code" && return "$code" From 4e9ac3ef379bf6be27676f6c5355a9bd8fd5fa36 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 7 Feb 2024 23:48:38 +0100 Subject: [PATCH 109/505] feat: Add shared network folder (#157) --- Dockerfile | 3 +++ src/entry.sh | 1 + src/install.sh | 7 +++++- src/power.sh | 7 ++++-- src/samba.sh | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 src/samba.sh diff --git a/Dockerfile b/Dockerfile index c5378dd..543151a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,10 @@ RUN apt-get update \ && apt-get --no-install-recommends -y install \ curl \ 7zip \ + wsdd \ + samba \ wimtools \ + dos2unix \ cabextract \ genisoimage \ libxml2-utils \ diff --git a/src/entry.sh b/src/entry.sh index 412ee75..a9d3111 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -12,6 +12,7 @@ cd /run . disk.sh # Initialize disks . display.sh # Initialize graphics . network.sh # Initialize network +. samba.sh # Configure samba . boot.sh # Configure boot . proc.sh # Initialize processor . power.sh # Configure shutdown diff --git a/src/install.sh b/src/install.sh index c87c284..37f6aac 100644 --- a/src/install.sh +++ b/src/install.sh @@ -835,11 +835,16 @@ prepareXP() { echo "ProductKey=$key" echo "" echo "[Identification]" - echo "JoinWorkgroup" + echo "JoinWorkgroup = WORKGROUP" echo "" echo "[Networking]" echo "InstallDefaultComponents=Yes" echo "" + echo "[URL]" + echo "Home_Page = http://www.google.com" + echo "Search_Page = http://www.google.com/ie_rsearch.html" + echo "AutoConfig = 0" + echo "" echo "[RegionalSettings]" echo "Language=00000409" echo "" diff --git a/src/power.sh b/src/power.sh index 4280441..cce28f2 100644 --- a/src/power.sh +++ b/src/power.sh @@ -29,8 +29,8 @@ ready() { if [ -f "$STORAGE/windows.old" ]; then local last - local bios="Booting from Hard Disk" - last=$(grep "^B.*" "$QEMU_PTY" | tail -1) + local bios="Booting from Hard" + last=$(grep "^Booting.*" "$QEMU_PTY" | tail -1) if [[ "${last,,}" == "${bios,,}"* ]]; then return 0 fi @@ -74,6 +74,9 @@ finish() { pid="/var/run/tpm.pid" [ -f "$pid" ] && pKill "$(<"$pid")" + fKill "wsdd" + fKill "smbd" + closeNetwork sleep 0.5 diff --git a/src/samba.sh b/src/samba.sh new file mode 100644 index 0000000..03d1e8b --- /dev/null +++ b/src/samba.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +[[ "$DHCP" == [Yy1]* ]] && return 0 + +SHARE="$STORAGE/shared" + +mkdir -p "$SHARE" +chmod -R 777 "$SHARE" + +SAMBA="/etc/samba/smb.conf" + +{ echo "[global]" + echo " server string = Dockur" + echo " netbios name = dockur" + echo " workgroup = WORKGROUP" + echo " interfaces = dockerbridge" + echo " bind interfaces only = yes" + echo " security = user" + echo " guest account = nobody" + echo " map to guest = Bad User" + echo " server min protocol = SMB2" + echo "" + echo " # disable printing services" + echo " load printers = no" + echo " printing = bsd" + echo " printcap name = /dev/null" + echo " disable spoolss = yes" + echo "" + echo "[Data]" + echo " path = $SHARE" + echo " comment = Shared" + echo " writable = yes" + echo " guest ok = yes" + echo " guest only = yes" + echo " force user = root" + echo " force group = root" +} > "$SAMBA" + +{ echo "--------------------------------------------------------" + echo " $APP for Docker v$(</run/version)..." + echo " For support visit $SUPPORT" + echo "--------------------------------------------------------" + echo "" + echo "Using this folder you can share files with the host machine." + echo "" + echo "To change the storage location, include the following bind mount in your compose file:" + echo "" + echo " volumes:" + echo " - \"/home/user/example:/storage/shared\"" + echo "" + echo "Or in your run command:" + echo "" + echo " -v \"/home/user/example:/storage/shared\"" + echo "" + echo "Replace the example path /home/user/example with the desired storage folder." + echo "" +} | unix2dos > "$SHARE/readme.txt" + +smbd -D +wsdd -i dockerbridge -p -n "host.local" & + +return 0 From 45582e8fd6103cc3a97be7f5cdba4ab43f5b9641 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 8 Feb 2024 02:53:52 +0100 Subject: [PATCH 110/505] fix: Allow guest access to network shares (#158) --- assets/win10x64-ltsc.xml | 5 +++++ assets/win10x64.xml | 5 +++++ assets/win11x64.xml | 5 +++++ assets/win2016-eval.xml | 5 +++++ assets/win2019-eval.xml | 5 +++++ assets/win2022-eval.xml | 5 +++++ assets/win81x64.xml | 5 +++++ 7 files changed, 35 insertions(+) diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 7f111ff..4edf664 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -395,6 +395,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 6cc5d69..1520a2b 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -391,6 +391,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index c22e654..0b1459a 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -419,6 +419,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 936cb4c..7fee274 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -318,6 +318,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index d4251aa..8debaaa 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -322,6 +322,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 41afd0d..2818bbb 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -322,6 +322,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 5d8a491..9578b9d 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -312,6 +312,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> <Description>Install VirtIO drivers</Description> </SynchronousCommand> From 4534f66d7398f02213336c300ad9d6d0cce83bc8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 8 Feb 2024 04:18:25 +0100 Subject: [PATCH 111/505] fix: Disable screensaver on Vista (#159) --- assets/winvistax64.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index c425c40..b8f0dae 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -244,6 +244,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off sidebar</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> From b92d2589b1fc2034194e92b663249d2c3eb7d044 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 8 Feb 2024 17:49:26 +0100 Subject: [PATCH 112/505] feat: Improve Windows configuration (#161) --- assets/win10x64-ltsc.xml | 16 +++------------- assets/win10x64.xml | 16 +++------------- assets/win11x64.xml | 16 +++------------- assets/win2008r2.xml | 22 +++++++++++----------- assets/win2012r2-eval.xml | 11 +++-------- assets/win2016-eval.xml | 16 +++------------- assets/win2019-eval.xml | 16 +++------------- assets/win2022-eval.xml | 16 +++------------- assets/win7x64.xml | 22 +++++++++++----------- assets/win81x64.xml | 16 +++------------- assets/winvistax64.xml | 22 +++++++++++----------- src/install.sh | 2 +- src/samba.sh | 2 +- 13 files changed, 59 insertions(+), 134 deletions(-) diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 4edf664..036f0d7 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -318,7 +318,7 @@ <AutoLogon> <Username>Docker</Username> <Enabled>true</Enabled> - <LogonCount>1</LogonCount> + <LogonCount>65432</LogonCount> <Password> <Value /> <PlainText>true</PlainText> @@ -340,8 +340,8 @@ <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> @@ -393,16 +393,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>12</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Allow guest access to network shares</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>13</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> - </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 1520a2b..9c3cef8 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -314,7 +314,7 @@ <AutoLogon> <Username>Docker</Username> <Enabled>true</Enabled> - <LogonCount>1</LogonCount> + <LogonCount>65432</LogonCount> <Password> <Value /> <PlainText>true</PlainText> @@ -336,8 +336,8 @@ <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> @@ -389,16 +389,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>12</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Allow guest access to network shares</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>13</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> - </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 0b1459a..7e2bf4d 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -332,7 +332,7 @@ <AutoLogon> <Username>Docker</Username> <Enabled>true</Enabled> - <LogonCount>1</LogonCount> + <LogonCount>65432</LogonCount> <Password> <Value /> <PlainText>true</PlainText> @@ -354,8 +354,8 @@ <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> @@ -417,16 +417,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>14</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Allow guest access to network shares</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> - </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 921be8c..275a8b9 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -205,7 +205,7 @@ <AutoLogon> <Username>Docker</Username> <Enabled>true</Enabled> - <LogonCount>1</LogonCount> + <LogonCount>65432</LogonCount> <Password> <Value /> <PlainText>true</PlainText> @@ -224,8 +224,8 @@ <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> @@ -259,29 +259,29 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>12</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 2f87332..0583fa1 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -241,7 +241,7 @@ <AutoLogon> <Username>Docker</Username> <Enabled>true</Enabled> - <LogonCount>1</LogonCount> + <LogonCount>65432</LogonCount> <Password> <Value /> <PlainText>true</PlainText> @@ -263,8 +263,8 @@ <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> @@ -316,11 +316,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>12</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> - </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 7fee274..7dca306 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -241,7 +241,7 @@ <AutoLogon> <Username>Docker</Username> <Enabled>true</Enabled> - <LogonCount>1</LogonCount> + <LogonCount>65432</LogonCount> <Password> <Value /> <PlainText>true</PlainText> @@ -263,8 +263,8 @@ <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> @@ -316,16 +316,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>12</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Allow guest access to network shares</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>13</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> - </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 8debaaa..3e849f7 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -245,7 +245,7 @@ <AutoLogon> <Username>Docker</Username> <Enabled>true</Enabled> - <LogonCount>1</LogonCount> + <LogonCount>65432</LogonCount> <Password> <Value /> <PlainText>true</PlainText> @@ -267,8 +267,8 @@ <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> @@ -320,16 +320,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>12</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Allow guest access to network shares</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>13</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> - </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 2818bbb..5a2488d 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -245,7 +245,7 @@ <AutoLogon> <Username>Docker</Username> <Enabled>true</Enabled> - <LogonCount>1</LogonCount> + <LogonCount>65432</LogonCount> <Password> <Value /> <PlainText>true</PlainText> @@ -267,8 +267,8 @@ <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> @@ -320,16 +320,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>12</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Allow guest access to network shares</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>13</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> - </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index a3d30a2..e9050e5 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -208,7 +208,7 @@ <AutoLogon> <Username>Docker</Username> <Enabled>true</Enabled> - <LogonCount>1</LogonCount> + <LogonCount>65432</LogonCount> <Password> <Value /> <PlainText>true</PlainText> @@ -227,8 +227,8 @@ <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> @@ -262,29 +262,29 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>12</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 9578b9d..7f39db4 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -235,7 +235,7 @@ <AutoLogon> <Username>Docker</Username> <Enabled>true</Enabled> - <LogonCount>1</LogonCount> + <LogonCount>65432</LogonCount> <Password> <Value /> <PlainText>true</PlainText> @@ -257,8 +257,8 @@ <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> @@ -310,16 +310,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>12</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Allow guest access to network shares</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>13</Order> - <CommandLine>msiexec /i E:\virtio-win-gt-x64.msi /qb!</CommandLine> - <Description>Install VirtIO drivers</Description> - </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index b8f0dae..06ceea7 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -148,7 +148,7 @@ <AutoLogon> <Username>Docker</Username> <Enabled>true</Enabled> - <LogonCount>1</LogonCount> + <LogonCount>65432</LogonCount> <Password> <Value /> <PlainText>true</PlainText> @@ -166,8 +166,8 @@ <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> - <Description>Set AutoLogonCount to 0</Description> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> @@ -201,29 +201,29 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>12</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> diff --git a/src/install.sh b/src/install.sh index 37f6aac..e37346a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -826,7 +826,7 @@ prepareXP() { echo "AdminPassword=*" echo "TimeZone=0" echo "AutoLogon=Yes" - echo "AutoLogonCount=99999" + echo "AutoLogonCount=65432" echo "" echo "[UserData]" echo "FullName=\"Docker\"" diff --git a/src/samba.sh b/src/samba.sh index 03d1e8b..6286492 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -58,6 +58,6 @@ SAMBA="/etc/samba/smb.conf" } | unix2dos > "$SHARE/readme.txt" smbd -D -wsdd -i dockerbridge -p -n "host.local" & +wsdd -i dockerbridge -p -n "host.lan" & return 0 From d937ed2400a694e24061c1164de05876ed230f8d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 8 Feb 2024 18:24:04 +0100 Subject: [PATCH 113/505] feat: Enable option for passwordless sign-in (#162) --- assets/win10x64-ltsc.xml | 21 +++++++++++++-------- assets/win10x64.xml | 21 +++++++++++++-------- assets/win11x64.xml | 35 ++++++++++++++++++++--------------- assets/win2012r2-eval.xml | 21 +++++++++++++-------- assets/win2016-eval.xml | 21 +++++++++++++-------- assets/win2019-eval.xml | 21 +++++++++++++-------- assets/win2022-eval.xml | 21 +++++++++++++-------- assets/win81x64.xml | 21 +++++++++++++-------- 8 files changed, 111 insertions(+), 71 deletions(-) diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 036f0d7..f9d0f11 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -350,46 +350,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 9c3cef8..a332efd 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -346,46 +346,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 7e2bf4d..3fa19df 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -364,59 +364,64 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> - <Description>Disable unsupported hardware notifications</Description> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> - <Description>Disable unsupported hardware notifications</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>5</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 0583fa1..7b22e00 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -273,46 +273,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 7dca306..e2200a0 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -273,46 +273,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 3e849f7..b01d491 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -277,46 +277,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 5a2488d..3bfc483 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -277,46 +277,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 7f39db4..f201a16 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -267,46 +267,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation Mode</Description> </SynchronousCommand> From d00e8b27b4e71ae5ee175d65708d47fb79af1e48 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 9 Feb 2024 15:02:23 +0100 Subject: [PATCH 114/505] build: Notify after build (#163) --- .github/workflows/build.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6db1a6a..b87501f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -92,3 +92,15 @@ jobs: uses: action-pack/bump@v2 with: token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Send mail + uses: action-pack/send-mail@v1 + with: + to: ${{secrets.MAILTO}} + from: Github Actions <${{secrets.MAILTO}}> + connection_url: ${{secrets.MAIL_CONNECTION}} + subject: Build of ${{ github.event.repository.name }} v${{ steps.meta.outputs.version }} completed + body: | + The build job of ${{ github.event.repository.name }} v${{ steps.meta.outputs.version }} was completed successfully! + + See https://github.com/${{ github.repository }}/actions for more information. From 80988bc1bbf171c3cf81eecfd8aed70e72569021 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 10 Feb 2024 00:11:46 +0100 Subject: [PATCH 115/505] docs: File sharing (#164) --- readme.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/readme.md b/readme.md index 72d0914..76c7287 100644 --- a/readme.md +++ b/readme.md @@ -128,6 +128,12 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Replace the example path `/var/win` with the desired storage folder. +* ### How do I share files with the host? + + Open File Explorer and click on the Network section, you will see a computer called `host.lan`, double-click it and it will show a folder called `Data`. + + Inside this folder you can access any files that are placed in `/storage/shared` (see above) on the host. + * ### How do I install a custom image? In order to download a custom ISO image, start a clean container with the URL specified in the `VERSION` environment variable: From 7c2cacac26327b62ac177dbdbc0b2dbd7f0f77b1 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 10 Feb 2024 01:02:45 +0100 Subject: [PATCH 116/505] docs: Readme (#165) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 76c7287..f60e286 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,6 @@ <h1 align="center">Windows<br /> <div align="center"> -<img src="https://github.com/dockur/windows/raw/master/.github/logo.png" title="Logo" style="max-width:100%;" width="128" /> +<a href="https://github.com/dockur/windows"><img src="https://github.com/dockur/windows/raw/master/.github/logo.png" title="Logo" style="max-width:100%;" width="128" /></a> </div> <div align="center"> From 132157edf6b8c30ac1e30caab2d254ccf746c67a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 12 Feb 2024 13:23:12 +0100 Subject: [PATCH 117/505] build: Update to wsdd v0.7.1 (#167) --- Dockerfile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 543151a..66de6e2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:latest / / +COPY --from=qemux/qemu-docker:4.13 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND "noninteractive" @@ -21,8 +21,11 @@ RUN apt-get update \ COPY ./src /run/ COPY ./assets /run/assets + +ADD https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py /usr/sbin/wsdd ADD https://github.com/qemus/virtiso/releases/download/v0.1.240/virtio-win-0.1.240.iso /run/drivers.iso -RUN chmod +x /run/*.sh + +RUN chmod +x /run/*.sh && chmod +x /usr/sbin/wsdd EXPOSE 8006 3389 VOLUME /storage From 7e970a8e183bd4df9fde2b5856dfa55e34e42fc1 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 16 Feb 2024 12:32:06 +0100 Subject: [PATCH 118/505] fix: Convert line endings (#171) --- src/install.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index e37346a..bf1db33 100644 --- a/src/install.sh +++ b/src/install.sh @@ -797,7 +797,8 @@ prepareXP() { [[ "${arch,,}" == "amd64" ]] && key="B66VY-4D94T-TPPD4-43F72-8X4FY" local sif="$target/WINNT.SIF" - { echo "[Data]" + + { echo "[Data]" echo "AutoPartition=1" echo "MsDosInitiated=\"0\"" echo "UnattendedInstall=\"Yes\"" @@ -850,7 +851,7 @@ prepareXP() { echo "" echo "[TerminalServices]" echo "AllowConnections=1" - } > "$sif" + } | unix2dos > "$sif" return 0 } From 8c148ebbf1a0c446f17f6896b312440da19ba54f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 16 Feb 2024 14:38:00 +0100 Subject: [PATCH 119/505] feat: Match files case insensitive (#172) --- src/install.sh | 81 ++++++++++++++++++++------------------------------ 1 file changed, 32 insertions(+), 49 deletions(-) diff --git a/src/install.sh b/src/install.sh index bf1db33..911a547 100644 --- a/src/install.sh +++ b/src/install.sh @@ -90,15 +90,9 @@ if [[ "${VERSION,,}" == "tiny10" ]]; then VERSION="https://archive.org/download/tiny-10-23-h2/tiny10%20x64%2023h2.iso" fi -CUSTOM="custom.iso" - -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.iso" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.ISO" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="CUSTOM.ISO" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.img" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="Custom.img" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="custom.IMG" -[ ! -f "$STORAGE/$CUSTOM" ] && CUSTOM="CUSTOM.IMG" +CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) +[ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname boot.iso -printf "%f\n" | head -n 1) +[ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) ESD_URL="" MACHINE="q35" @@ -205,31 +199,6 @@ getVersion() { return 0 } -replaceXML() { - - local dir="$1" - local asset="$2" - - local path="$dir/autounattend.xml" - [ -f "$path" ] && cp "$asset" "$path" - path="$dir/Autounattend.xml" - [ -f "$path" ] && cp "$asset" "$path" - path="$dir/AutoUnattend.xml" - [ -f "$path" ] && cp "$asset" "$path" - path="$dir/autounattend.XML" - [ -f "$path" ] && cp "$asset" "$path" - path="$dir/Autounattend.XML" - [ -f "$path" ] && cp "$asset" "$path" - path="$dir/AutoUnattend.XML" - [ -f "$path" ] && cp "$asset" "$path" - path="$dir/AUTOUNATTEND.xml" - [ -f "$path" ] && cp "$asset" "$path" - path="$dir/AUTOUNATTEND.XML" - [ -f "$path" ] && cp "$asset" "$path" - - return 0 -} - hasDisk() { [ -b "${DEVICE:-}" ] && return 0 @@ -313,6 +282,7 @@ startInstall() { fi + [[ "${BASE,,}" == "boot."* ]] && BASE="windows.iso" [[ "${BASE,,}" == "custom."* ]] && BASE="windows.iso" fi @@ -681,12 +651,19 @@ detectImage() { return 0 fi + local src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) + + if [ ! -d "$src" ]; then + warn "failed to locate 'sources' folder in ISO image, $FB" + BOOT_MODE="windows_legacy" + return 1 + fi + local tag result name name2 desc - local loc="$dir/sources/install.wim" - [ ! -f "$loc" ] && loc="$dir/sources/install.esd" + local loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) + [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) if [ ! -f "$loc" ]; then - warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" return 1 @@ -786,17 +763,10 @@ prepareXP() { sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" - rm -f "$target/winnt.sif" - rm -f "$target/Winnt.sif" - rm -f "$target/winnt.SIF" - rm -f "$target/WinNT.sif" - rm -f "$target/WINNT.sif" - rm -f "$target/WINNT.SIF" - local key="M6TF9-8XQ2M-YQK9F-7TBB2-XGG88" [[ "${arch,,}" == "amd64" ]] && key="B66VY-4D94T-TPPD4-43F72-8X4FY" - local sif="$target/WINNT.SIF" + find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; { echo "[Data]" echo "AutoPartition=1" @@ -851,8 +821,9 @@ prepareXP() { echo "" echo "[TerminalServices]" echo "AllowConnections=1" - } | unix2dos > "$sif" + } | unix2dos > "$target/WINNT.SIF" + rm -rf "$drivers" return 0 } @@ -864,6 +835,8 @@ prepareLegacy() { ETFS="boot.img" BOOT_MODE="windows_legacy" + rm -f "$dir/$ETFS" + local len offset len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") @@ -922,10 +895,20 @@ updateImage() { local index result [ ! -f "$asset" ] && return 0 - replaceXML "$dir" "$asset" - local loc="$dir/sources/boot.wim" - [ ! -f "$loc" ] && loc="$dir/sources/boot.esd" + local path=$(find "$dir" -maxdepth 1 -type f -iname autounattend.xml | head -n 1) + [ -n "$path" ] && cp "$asset" "$path" + + local src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) + + if [ ! -d "$src" ]; then + warn "failed to locate 'sources' folder in ISO image, $FB" + BOOT_MODE="windows_legacy" + return 1 + fi + + local loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) + [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) if [ ! -f "$loc" ]; then warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" From 41bab9d16da8554bdb994f51f196bbba042863b9 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 16 Feb 2024 14:43:03 +0100 Subject: [PATCH 120/505] fix: Shellcheck (#173) --- src/install.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/install.sh b/src/install.sh index 911a547..0b3a910 100644 --- a/src/install.sh +++ b/src/install.sh @@ -651,7 +651,8 @@ detectImage() { return 0 fi - local src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) + local src loc tag result name name2 desc + src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then warn "failed to locate 'sources' folder in ISO image, $FB" @@ -659,8 +660,7 @@ detectImage() { return 1 fi - local tag result name name2 desc - local loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) + loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) if [ ! -f "$loc" ]; then @@ -892,14 +892,14 @@ updateImage() { local iso="$1" local dir="$2" local asset="/run/assets/$3" - local index result + local path src loc index result [ ! -f "$asset" ] && return 0 - local path=$(find "$dir" -maxdepth 1 -type f -iname autounattend.xml | head -n 1) + path=$(find "$dir" -maxdepth 1 -type f -iname autounattend.xml | head -n 1) [ -n "$path" ] && cp "$asset" "$path" - local src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) + src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then warn "failed to locate 'sources' folder in ISO image, $FB" @@ -907,7 +907,7 @@ updateImage() { return 1 fi - local loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) + loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) if [ ! -f "$loc" ]; then From 01f9603c47c3106d46415fab7bc57099556cc170 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 16 Feb 2024 15:03:23 +0100 Subject: [PATCH 121/505] build: Update qemu-docker to 4.14 (#174) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 66de6e2..5758da6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.13 / / +COPY --from=qemux/qemu-docker:4.14 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND "noninteractive" From 0f2717fec446aba116f2e906836c417347696a56 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 16 Feb 2024 16:00:21 +0100 Subject: [PATCH 122/505] fix: Prevent re-entry during shutdown (#176) --- src/power.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/power.sh b/src/power.sh index cce28f2..5375e65 100644 --- a/src/power.sh +++ b/src/power.sh @@ -50,6 +50,8 @@ finish() { local pid local reason=$1 + touch "$QEMU_END" + if [ -f "$QEMU_PID" ]; then pid=$(<"$QEMU_PID") From 537c8e8247ce1103e28061d228539e7461ffe72f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 16 Feb 2024 16:57:06 +0100 Subject: [PATCH 123/505] docs: Remote desktop (#177) --- readme.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index f60e286..303e672 100644 --- a/readme.md +++ b/readme.md @@ -94,6 +94,14 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). +* ### How do I connect using RDP? + + The web-viewer is only ment to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. + + So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `docker` and by leaving the password empty. + + There is a good RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store. One for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) is in the Apple Store. For Linux you can use [rdesktop](http://www.rdesktop.org/) and for Windows you don't need to install anything as it is already ships as part of the operating system. + * ### How do I increase the amount of CPU or RAM? By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. @@ -136,7 +144,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti * ### How do I install a custom image? - In order to download a custom ISO image, start a clean container with the URL specified in the `VERSION` environment variable: + In order to download a custom ISO image, start a clean container with the URL of the ISO specified in the `VERSION` environment variable: ```yaml environment: From f49a336efae2b1b6298d569c0d86df8b4cb2e79b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 19 Feb 2024 13:40:44 +0100 Subject: [PATCH 124/505] docs: Readme (#180) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 303e672..487d8bf 100644 --- a/readme.md +++ b/readme.md @@ -96,7 +96,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti * ### How do I connect using RDP? - The web-viewer is only ment to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. + The web-viewer is mainly ment to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `docker` and by leaving the password empty. From 515b6f51a4c608ef0b79dd557485db11b71caf58 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 22 Feb 2024 15:16:02 +0100 Subject: [PATCH 125/505] docs: Readme (#186) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 487d8bf..da7b255 100644 --- a/readme.md +++ b/readme.md @@ -11,7 +11,7 @@ </div></h1> -Windows in a docker container. +Windows in a Docker container. ## Features From 8544ce03b252eb4dc6f184244568ba3461958d35 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 28 Feb 2024 06:41:21 +0100 Subject: [PATCH 126/505] fix: Windows XP location (#193) --- src/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/install.sh b/src/install.sh index 0b3a910..6208950 100644 --- a/src/install.sh +++ b/src/install.sh @@ -72,7 +72,7 @@ fi if [[ "${VERSION,,}" == "winxpx86" ]]; then DETECTED="winxpx86" - VERSION="https://dl.bobpony.com/windows/xp/professional/en_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73974.iso" + VERSION="https://dl.bobpony.com/windows/xp/professional/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" fi if [[ "${VERSION,,}" == "core11" ]]; then @@ -763,8 +763,8 @@ prepareXP() { sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" - local key="M6TF9-8XQ2M-YQK9F-7TBB2-XGG88" - [[ "${arch,,}" == "amd64" ]] && key="B66VY-4D94T-TPPD4-43F72-8X4FY" + # Windows XP Pro generic key (no activation) + local key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; From cbe7d6e56505abcc63e976200106adfe4e8f9e91 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 28 Feb 2024 06:59:45 +0100 Subject: [PATCH 127/505] docs: Disclaimer (#194) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index da7b255..ff0cd87 100644 --- a/readme.md +++ b/readme.md @@ -272,7 +272,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti * ### Is this project legal? - Yes, this project contains only open-source code and does not distribute any copyrighted material. Neither does it try to circumvent any copyright protection measures. So under all applicable laws, this project would be considered legal. + Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project would be considered legal. ## Stars [![Stars](https://starchart.cc/dockur/windows.svg?variant=adaptive)](https://starchart.cc/dockur/windows) From aed184eb543ae82715461370f5a9828ef8432f1c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 28 Feb 2024 08:53:10 +0100 Subject: [PATCH 128/505] docs: Docker run command (#195) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index ff0cd87..382d2df 100644 --- a/readme.md +++ b/readme.md @@ -44,7 +44,7 @@ services: Via `docker run` ```bash -docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows ``` ## FAQ From 05896606cd5bbdb7c1fc317824da208448015806 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 28 Feb 2024 07:53:26 +0000 Subject: [PATCH 129/505] chore(deps): update qemux/qemu-docker docker tag to v4.15 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 5758da6..2df1a2e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.14 / / +COPY --from=qemux/qemu-docker:4.15 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND "noninteractive" From 0fa4217d1bb5c17b98239aebf65de01a5b2128a8 Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine <eltociear@gmail.com> Date: Thu, 29 Feb 2024 00:44:54 +0900 Subject: [PATCH 130/505] chore: Update mido.sh Microsft -> Microsoft --- src/mido.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mido.sh b/src/mido.sh index caf268f..d52332b 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -571,7 +571,7 @@ verify_media() { # IMPORTANT: These checksums are not necessarily subject to being updated # Unfortunately, the maintenance burden would be too large and even if I did there would still be some time gap between Microsoft releasing a new ISO and me updating the checksum (also, users would have to update this script) # For these reasons, I've opted for a slightly more manual verification where you have to look up the checksum to see if it's a well-known Windows ISO checksum - # Ultimately, you have to trust Microsft because they could still include a backdoor in the verified ISO (keeping Windows air gapped could help with this) + # Ultimately, you have to trust Microsoft because they could still include a backdoor in the verified ISO (keeping Windows air gapped could help with this) # Community contributions for these checksums are welcome # # Leading backslash is to avoid prepending a newline while maintaining alignment From f50b5d15643d2ccee93d02ed669e0d30e0bff99a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 29 Feb 2024 13:36:41 +0100 Subject: [PATCH 131/505] build: Update VirtIO drivers to v0.1.248 (#205) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2df1a2e..35ea722 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,7 +23,7 @@ COPY ./src /run/ COPY ./assets /run/assets ADD https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py /usr/sbin/wsdd -ADD https://github.com/qemus/virtiso/releases/download/v0.1.240/virtio-win-0.1.240.iso /run/drivers.iso +ADD https://github.com/qemus/virtiso/releases/download/v0.1.248/virtio-win-0.1.248.iso /run/drivers.iso RUN chmod +x /run/*.sh && chmod +x /usr/sbin/wsdd From 68457e56d6bcf593641c793911f155b3d6626393 Mon Sep 17 00:00:00 2001 From: Asaf Hadad <123254078+asafhad@users.noreply.github.com> Date: Fri, 1 Mar 2024 17:38:40 +0200 Subject: [PATCH 132/505] Fix typo (#210) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 382d2df..55740bc 100644 --- a/readme.md +++ b/readme.md @@ -96,7 +96,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ * ### How do I connect using RDP? - The web-viewer is mainly ment to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. + The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `docker` and by leaving the password empty. From 77358f0632fdee730e72717c80ea484e5809472e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 11 Mar 2024 13:30:07 +0100 Subject: [PATCH 133/505] feat: Add option to disable Samba (#253) --- .github/workflows/build.yml | 7 +++++++ Dockerfile | 4 ++-- src/entry.sh | 7 ++++++- src/samba.sh | 3 +++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b87501f..a193a38 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -92,6 +92,13 @@ jobs: uses: action-pack/bump@v2 with: token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Push to Gitlab mirror + uses: action-pack/gitlab-sync@v3 + with: + url: ${{ secrets.GITLAB_URL }} + token: ${{ secrets.GITLAB_TOKEN }} + username: ${{ secrets.GITLAB_USERNAME }} - name: Send mail uses: action-pack/send-mail@v1 diff --git a/Dockerfile b/Dockerfile index 35ea722..ac3dd01 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.15 / / +COPY --from=qemux/qemu-docker:4.16 / / -ARG DEBCONF_NOWARNINGS="yes" +ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" ARG DEBCONF_NONINTERACTIVE_SEEN "true" diff --git a/src/entry.sh b/src/entry.sh index a9d3111..83b2457 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -23,6 +23,10 @@ trap - ERR info "Booting $APP using $VERS..." [[ "$DEBUG" == [Yy1]* ]] && echo "Arguments: $ARGS" && echo +if [[ "$CONSOLE" == [Yy]* ]]; then + exec qemu-system-x86_64 ${ARGS:+ $ARGS} +fi + { qemu-system-x86_64 ${ARGS:+ $ARGS} >"$QEMU_OUT" 2>"$QEMU_LOG"; rc=$?; } || : (( rc != 0 )) && error "$(<"$QEMU_LOG")" && exit 15 @@ -31,4 +35,5 @@ tail -fn +0 "$QEMU_LOG" 2>/dev/null & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & wait $! || : -sleep 1 && finish 0 +sleep 1 & wait $! +finish 0 diff --git a/src/samba.sh b/src/samba.sh index 6286492..1f8f3c1 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -1,7 +1,10 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${SAMBA:="Y"}" + [[ "$DHCP" == [Yy1]* ]] && return 0 +[[ "$SAMBA" != [Yy1]* ]] && return 0 SHARE="$STORAGE/shared" From 787f81552770bdef37c0750a0987312132950605 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 11 Mar 2024 14:14:45 +0100 Subject: [PATCH 134/505] fix: Disable Samba if networking is disabled (#254) --- src/samba.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/src/samba.sh b/src/samba.sh index 1f8f3c1..5cc1cc8 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -5,6 +5,7 @@ set -Eeuo pipefail [[ "$DHCP" == [Yy1]* ]] && return 0 [[ "$SAMBA" != [Yy1]* ]] && return 0 +[[ "$NETWORK" != [Yy1]* ]] && return 0 SHARE="$STORAGE/shared" From 59b98fe211077fc39d23e78f712a8296a94db90f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 12 Mar 2024 00:46:51 +0100 Subject: [PATCH 135/505] fix: Disable kernel networking in bridge mode (#257) --- Dockerfile | 2 +- readme.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ac3dd01..c3c3df7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.16 / / +COPY --from=qemux/qemu-docker:4.17 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/readme.md b/readme.md index 55740bc..8ce2a98 100644 --- a/readme.md +++ b/readme.md @@ -227,6 +227,8 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ ```yaml environment: DHCP: "Y" + devices: + - /dev/vhost-net device_cgroup_rules: - 'c *:* rwm' ``` From 6aee02b4e1f77ace74458d719893a9487d7156c9 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 13 Mar 2024 10:20:18 +0100 Subject: [PATCH 136/505] feat: Add flag to disable secure boot (#263) --- Dockerfile | 2 +- src/entry.sh | 3 ++- src/install.sh | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index c3c3df7..e2f6aa5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.17 / / +COPY --from=qemux/qemu-docker:4.18 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/src/entry.sh b/src/entry.sh index 83b2457..07866ca 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${BOOT_MODE:="windows"}" + APP="Windows" -BOOT_MODE="windows" SUPPORT="https://github.com/dockur/windows" cd /run diff --git a/src/install.sh b/src/install.sh index 6208950..e5b21f2 100644 --- a/src/install.sh +++ b/src/install.sh @@ -854,7 +854,7 @@ prepareImage() { local iso="$1" local dir="$2" - if [[ "${BOOT_MODE,,}" == "windows" ]]; then + if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; then From 8f6f73dab716edb93b8dcea7a22e088e69ab11fd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 15 Mar 2024 10:05:44 +0100 Subject: [PATCH 137/505] docs: Replace rDesktop by FreeRDP (#280) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 8ce2a98..5afeda2 100644 --- a/readme.md +++ b/readme.md @@ -100,7 +100,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `docker` and by leaving the password empty. - There is a good RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store. One for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) is in the Apple Store. For Linux you can use [rdesktop](http://www.rdesktop.org/) and for Windows you don't need to install anything as it is already ships as part of the operating system. + There is a good RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. * ### How do I increase the amount of CPU or RAM? From ab6ba410b3aba37c329c2d7f09bd669cae76bae0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 25 Mar 2024 15:18:37 +0100 Subject: [PATCH 138/505] build: Install wimtools from sid (#312) --- .github/workflows/check.yml | 2 +- Dockerfile | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 2c1ce5a..ea76481 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -21,5 +21,5 @@ jobs: uses: hadolint/hadolint-action@v3.1.0 with: dockerfile: Dockerfile - ignore: DL3008 + ignore: DL3008,DL4006,SC3037 failure-threshold: warning diff --git a/Dockerfile b/Dockerfile index e2f6aa5..1c1f450 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,26 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.18 / / +COPY --from=qemux/qemu-docker:4.19 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" ARG DEBCONF_NONINTERACTIVE_SEEN "true" -RUN apt-get update \ - && apt-get --no-install-recommends -y install \ +RUN apt-get update && \ + apt-get --no-install-recommends -y install \ curl \ 7zip \ wsdd \ samba \ - wimtools \ dos2unix \ cabextract \ genisoimage \ - libxml2-utils \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + libxml2-utils && \ + echo "deb http://deb.debian.org/debian/ sid main" >> /etc/apt/sources.list.d/sid.list && \ + echo -e "Package: *\nPin: release n=trixie\nPin-Priority: 900\nPackage: *\nPin: release n=sid\nPin-Priority: 400" | tee /etc/apt/preferences.d/preferences > /dev/null && \ + apt-get update && \ + apt-get -t sid --no-install-recommends -y install wimtools && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY ./src /run/ COPY ./assets /run/assets From 3a871e4ac5cf3b76b1f77bce577e8d3136136665 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 26 Mar 2024 02:28:13 +0100 Subject: [PATCH 139/505] fix: Folder sharing on XP and Vista (#313) --- docker-compose.yml | 2 ++ readme.md | 2 ++ src/samba.sh | 24 ++++++++++++++++++++---- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0f8bf97..fc2fbf9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,6 +3,8 @@ services: windows: image: dockurr/windows container_name: windows + environment: + VERSION: "win11" devices: - /dev/kvm cap_add: diff --git a/readme.md b/readme.md index 5afeda2..bfbc5f1 100644 --- a/readme.md +++ b/readme.md @@ -29,6 +29,8 @@ services: windows: image: dockurr/windows container_name: windows + environment: + VERSION: "win11" devices: - /dev/kvm cap_add: diff --git a/src/samba.sh b/src/samba.sh index 5cc1cc8..eb262af 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -23,7 +23,7 @@ SAMBA="/etc/samba/smb.conf" echo " security = user" echo " guest account = nobody" echo " map to guest = Bad User" - echo " server min protocol = SMB2" + echo " server min protocol = NT1" echo "" echo " # disable printing services" echo " load printers = no" @@ -41,7 +41,7 @@ SAMBA="/etc/samba/smb.conf" echo " force group = root" } > "$SAMBA" -{ echo "--------------------------------------------------------" +{ echo "--------------------------------------------------------" echo " $APP for Docker v$(</run/version)..." echo " For support visit $SUPPORT" echo "--------------------------------------------------------" @@ -61,7 +61,23 @@ SAMBA="/etc/samba/smb.conf" echo "" } | unix2dos > "$SHARE/readme.txt" -smbd -D -wsdd -i dockerbridge -p -n "host.lan" & +! smbd && smbd --debug-stdout + +isXP="N" + +if [ -f "$STORAGE/windows.old" ]; then + MT=$(<"$STORAGE/windows.old") + if [[ "${MT,,}" == "pc-q35-2"* ]]; then + isXP="Y" + fi +fi + +if [[ "$isXP" == [Yy1]* ]]; then + # Enable NetBIOS on Windows XP + ! nmbd && nmbd --debug-stdout +else + # Enable Web Service Discovery + wsdd -i dockerbridge -p -n "host.lan" & +fi return 0 From 463ec9fb49496ab10a84443560962ec8bb43b4f7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 28 Mar 2024 16:11:43 +0100 Subject: [PATCH 140/505] docs: Add video (#323) --- readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/readme.md b/readme.md index bfbc5f1..68faa1e 100644 --- a/readme.md +++ b/readme.md @@ -19,6 +19,10 @@ Windows in a Docker container. - KVM acceleration - Web-based viewer +## Video + +[![Youtube](https://img.youtube.com/vi/xhGYobuG508/0.jpg)](https://www.youtube.com/watch?v=xhGYobuG508) + ## Usage Via `docker-compose.yml` From 7921b1eb541a97cb0853f2ebedb92d9a2c4556c3 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 31 Mar 2024 04:45:27 +0200 Subject: [PATCH 141/505] build: Update wsdd to v0.8 (#328) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1c1f450..2508af2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,7 +25,7 @@ RUN apt-get update && \ COPY ./src /run/ COPY ./assets /run/assets -ADD https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py /usr/sbin/wsdd +ADD https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd ADD https://github.com/qemus/virtiso/releases/download/v0.1.248/virtio-win-0.1.248.iso /run/drivers.iso RUN chmod +x /run/*.sh && chmod +x /usr/sbin/wsdd From b02f65a41eac7dc8ca5776d803a6731f70897174 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 5 Apr 2024 16:34:35 +0200 Subject: [PATCH 142/505] feat: Improve Windows XP configuration (#350) --- Dockerfile | 2 +- src/install.sh | 59 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2508af2..910b559 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.19 / / +COPY --from=qemux/qemu-docker:4.20 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/src/install.sh b/src/install.sh index e5b21f2..35df436 100644 --- a/src/install.sh +++ b/src/install.sh @@ -768,7 +768,7 @@ prepareXP() { find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; - { echo "[Data]" + { echo "[Data]" echo "AutoPartition=1" echo "MsDosInitiated=\"0\"" echo "UnattendedInstall=\"Yes\"" @@ -811,10 +811,12 @@ prepareXP() { echo "[Networking]" echo "InstallDefaultComponents=Yes" echo "" + echo "[Branding]" + echo "BrandIEUsingUnattended=Yes" + echo "" echo "[URL]" echo "Home_Page = http://www.google.com" - echo "Search_Page = http://www.google.com/ie_rsearch.html" - echo "AutoConfig = 0" + echo "Search_Page = http://www.google.com" echo "" echo "[RegionalSettings]" echo "Language=00000409" @@ -823,6 +825,57 @@ prepareXP() { echo "AllowConnections=1" } | unix2dos > "$target/WINNT.SIF" + { echo "Windows Registry Editor Version 5.00" + echo "" + echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security]" + echo "\"FirstRunDisabled\"=dword:00000001" + echo "\"AntiVirusOverride\"=dword:00000001" + echo "\"FirewallOverride\"=dword:00000001" + echo "\"FirewallDisableNotify\"=dword:00000001" + echo "\"UpdatesDisableNotify\"=dword:00000001" + echo "\"AntiVirusDisableNotify\"=dword:00000001" + echo "" + echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wscsvc]" + echo "\"Start\"=dword:00000004" + echo "" + echo "[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\WindowsFirewall\StandardProfile]" + echo "\"EnableFirewall\"=dword:00000000" + echo "" + echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess]" + echo "\"Start\"=dword:00000004" + echo + echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List]" + echo "\"3389:TCP\"=\"3389:TCP:*:Enabled:@xpsp2res.dll,-22009\"" + echo "" + echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]" + echo "\"LimitBlankPasswordUse\"=dword:00000000" + echo "" + echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]" + echo "\"RunCount\"=dword:00000000" + echo "" + echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]" + echo "\"HideFileExt\"=dword:00000000" + echo "" + echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" + echo "\"DefaultUserName\"=\"Docker\"" + echo "\"DefaultDomainName\"=\"Dockur\"" + echo "\"AltDefaultUserName\"=\"Docker\"" + echo "\"AltDefaultDomainName\"=\"Dockur\"" + echo "\"AutoAdminLogon\"=\"1\"" + } | unix2dos > "$dir/\$OEM\$/install.reg" + + { echo "Set WshShell = WScript.CreateObject(\"WScript.Shell\")" + echo "Set WshNetwork = WScript.CreateObject(\"WScript.Network\")" + echo "Set oMachine = GetObject(\"WinNT://\" & WshNetwork.ComputerName)" + echo "Set oInfoUser = GetObject(\"WinNT://\" & WshNetwork.ComputerName & \"/Administrator,user\")" + echo "Set oUser = oMachine.MoveHere(oInfoUser.ADsPath,\"Docker\")" + } | unix2dos > "$dir/\$OEM\$/admin.vbs" + + { echo "[COMMANDS]" + echo "\"REGEDIT /s install.reg\"" + echo "\"Wscript admin.vbs\"" + } | unix2dos > "$dir/\$OEM\$/cmdlines.txt" + rm -rf "$drivers" return 0 } From da9ef0e06146d7a7471692538fe82728f92eec0d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 7 Apr 2024 01:59:20 +0200 Subject: [PATCH 143/505] docs: Readme (#356) --- docker-compose.yml => compose.yml | 0 readme.md | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename docker-compose.yml => compose.yml (100%) diff --git a/docker-compose.yml b/compose.yml similarity index 100% rename from docker-compose.yml rename to compose.yml diff --git a/readme.md b/readme.md index 68faa1e..f24d0da 100644 --- a/readme.md +++ b/readme.md @@ -25,7 +25,7 @@ Windows in a Docker container. ## Usage -Via `docker-compose.yml` +Via Docker Compose: ```yaml version: "3" @@ -47,7 +47,7 @@ services: restart: on-failure ``` -Via `docker run` +Via Docker CLI: ```bash docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows From 56cb787c55a076fcc86d679d0bf592bb6ba5548d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 13 Apr 2024 16:58:04 +0200 Subject: [PATCH 144/505] fix: Delete ISO when extraction fails (#372) --- .dockerignore | 4 +++- src/install.sh | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.dockerignore b/.dockerignore index 2cf7b5a..258778b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,6 +6,8 @@ .gitmodules Dockerfile Dockerfile.archive +compose.yml +compose.yaml docker-compose.yml - +docker-compose.yaml *.md diff --git a/src/install.sh b/src/install.sh index 35df436..0e2be7a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -316,6 +316,7 @@ startInstall() { fi + rm -rf "$TMP" mkdir -p "$TMP" if [ ! -f "$STORAGE/$CUSTOM" ]; then @@ -325,7 +326,6 @@ startInstall() { ISO="$STORAGE/$CUSTOM" fi - rm -f "$TMP/$BASE" return 0 } @@ -445,6 +445,9 @@ downloadImage() { info "Failed to download $desc using Mido, will try a different method now..." + rm -rf "$TMP" + mkdir -p "$TMP" + ISO="$TMP/$VERSION.esd" iso="$ISO" file="$ISO" @@ -573,6 +576,7 @@ extractImage() { if [[ "${iso,,}" == *".esd" ]]; then if ! extractESD "$iso" "$dir"; then + rm -f "$iso" error "Failed to extract ESD file!" exit 67 fi @@ -604,6 +608,7 @@ extractImage() { rm -rf "$dir" if ! 7z x "$iso" -o"$dir" > /dev/null; then + rm -f "$iso" error "Failed to extract ISO file!" exit 66 fi From 2a98081549f94e07b66b7f8e3d49b0e668ae0053 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:15:38 +0200 Subject: [PATCH 145/505] feat: Allow filenames in VERSION (#381) --- Dockerfile | 2 +- src/install.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 910b559..97fb4d2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.20 / / +COPY --from=qemux/qemu-docker:4.21 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/src/install.sh b/src/install.sh index 0e2be7a..c0c600b 100644 --- a/src/install.sh +++ b/src/install.sh @@ -93,6 +93,7 @@ fi CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname boot.iso -printf "%f\n" | head -n 1) [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) +[ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "${VERSION/\/storage\//}" -printf "%f\n" | head -n 1) ESD_URL="" MACHINE="q35" From 8a5f233e344a7968a07ba265ac91a6f327fada04 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 16 Apr 2024 16:22:28 +0200 Subject: [PATCH 146/505] fix: Verify files are not empty (#383) --- Dockerfile | 2 +- src/install.sh | 39 +++++++++++++++++++++------------------ src/power.sh | 14 +++++++------- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/Dockerfile b/Dockerfile index 97fb4d2..3e623a8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.21 / / +COPY --from=qemux/qemu-docker:4.22 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/src/install.sh b/src/install.sh index c0c600b..1878967 100644 --- a/src/install.sh +++ b/src/install.sh @@ -204,7 +204,7 @@ hasDisk() { [ -b "${DEVICE:-}" ] && return 0 - if [ -f "$STORAGE/data.img" ] || [ -f "$STORAGE/data.qcow2" ]; then + if [ -s "$STORAGE/data.img" ] || [ -s "$STORAGE/data.qcow2" ]; then return 0 fi @@ -310,6 +310,8 @@ startInstall() { else + rm -f "$STORAGE/$BASE" + if skipInstall; then BASE="" return 1 @@ -370,7 +372,7 @@ getESD() { cd /run - if [ ! -f "$dir/products.xml" ]; then + if [ ! -s "$dir/products.xml" ]; then error "Failed to find products.xml!" && return 1 fi @@ -434,7 +436,7 @@ downloadImage() { if (( rc == 0 )); then - [ ! -f "$iso" ] && return 1 + [ ! -s "$iso" ] && return 1 html "Download finished successfully..." return 0 @@ -477,7 +479,7 @@ downloadImage() { fKill "progress.sh" (( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60 - [ ! -f "$iso" ] && return 1 + [ ! -s "$iso" ] && return 1 html "Download finished successfully..." return 0 @@ -632,7 +634,7 @@ detectImage() { if [ -n "$DETECTED" ]; then - if [ -f "/run/assets/$DETECTED.xml" ]; then + if [ -s "/run/assets/$DETECTED.xml" ]; then [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" return 0 fi @@ -651,7 +653,7 @@ detectImage() { info "Detecting Windows version from ISO image..." - if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then + if [ -s "$dir/WIN51" ] || [ -s "$dir/SETUPXP.HTM" ]; then DETECTED="winxpx86" info "Detected: Windows XP" return 0 @@ -667,9 +669,9 @@ detectImage() { fi loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) - [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) + [ ! -s "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) - if [ ! -f "$loc" ]; then + if [ ! -s "$loc" ]; then warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" return 1 @@ -697,7 +699,7 @@ detectImage() { desc=$(printVersion "$DETECTED") [ -z "$desc" ] && desc="$DETECTED" - if [ -f "/run/assets/$DETECTED.xml" ]; then + if [ -s "/run/assets/$DETECTED.xml" ]; then [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" info "Detected: $desc" else @@ -917,7 +919,7 @@ prepareImage() { if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; then - if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then + if [ -s "$dir/$ETFS" ] && [ -s "$dir/$EFISYS" ]; then return 0 fi @@ -953,7 +955,7 @@ updateImage() { local asset="/run/assets/$3" local path src loc index result - [ ! -f "$asset" ] && return 0 + [ ! -s "$asset" ] && return 0 path=$(find "$dir" -maxdepth 1 -type f -iname autounattend.xml | head -n 1) [ -n "$path" ] && cp "$asset" "$path" @@ -967,9 +969,9 @@ updateImage() { fi loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) - [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) + [ ! -s "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) - if [ ! -f "$loc" ]; then + if [ ! -s "$loc" ]; then warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" return 1 @@ -1024,7 +1026,7 @@ buildImage() { if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log"; then - [ -f "$log" ] && echo "$(<"$log")" + [ -s "$log" ] && echo "$(<"$log")" return 1 fi @@ -1034,7 +1036,7 @@ buildImage() { if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ -udf -allow-limited-size -quiet "$dir" 2> "$log"; then - [ -f "$log" ] && echo "$(<"$log")" + [ -s "$log" ] && echo "$(<"$log")" return 1 fi @@ -1042,7 +1044,7 @@ buildImage() { if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ -relaxed-filenames -V "$label" -quiet "$dir" 2> "$log"; then - [ -f "$log" ] && echo "$(<"$log")" + [ -s "$log" ] && echo "$(<"$log")" return 1 fi @@ -1052,7 +1054,7 @@ buildImage() { local error="" local hide="Warning: creating filesystem that does not conform to ISO-9660." - [ -f "$log" ] && error="$(<"$log")" + [ -s "$log" ] && error="$(<"$log")" [[ "$error" != "$hide" ]] && echo "$error" if [ -f "$STORAGE/$BASE" ]; then @@ -1078,7 +1080,8 @@ if ! startInstall; then return 0 fi -if [ ! -f "$ISO" ]; then +if [ ! -s "$ISO" ]; then + rm -f "$ISO" if ! downloadImage "$ISO" "$VERSION"; then error "Failed to download $VERSION" exit 61 diff --git a/src/power.sh b/src/power.sh index 5375e65..cc28f8d 100644 --- a/src/power.sh +++ b/src/power.sh @@ -25,7 +25,7 @@ _trap() { ready() { [ -f "$STORAGE/windows.boot" ] && return 0 - [ ! -f "$QEMU_PTY" ] && return 1 + [ ! -s "$QEMU_PTY" ] && return 1 if [ -f "$STORAGE/windows.old" ]; then local last @@ -52,7 +52,7 @@ finish() { touch "$QEMU_END" - if [ -f "$QEMU_PID" ]; then + if [ -s "$QEMU_PID" ]; then pid=$(<"$QEMU_PID") error "Forcefully terminating Windows, reason: $reason..." @@ -61,7 +61,7 @@ finish() { while isAlive "$pid"; do sleep 1 # Workaround for zombie pid - [ ! -f "$QEMU_PID" ] && break + [ ! -s "$QEMU_PID" ] && break done fi @@ -74,7 +74,7 @@ finish() { fi pid="/var/run/tpm.pid" - [ -f "$pid" ] && pKill "$(<"$pid")" + [ -s "$pid" ] && pKill "$(<"$pid")" fKill "wsdd" fKill "smbd" @@ -91,7 +91,7 @@ terminal() { local dev="" - if [ -f "$QEMU_OUT" ]; then + if [ -s "$QEMU_OUT" ]; then local msg msg=$(<"$QEMU_OUT") @@ -139,7 +139,7 @@ _graceful_shutdown() { touch "$QEMU_END" info "Received $1, sending ACPI shutdown signal..." - if [ ! -f "$QEMU_PID" ]; then + if [ ! -s "$QEMU_PID" ]; then error "QEMU PID file does not exist?" finish "$code" && return "$code" fi @@ -168,7 +168,7 @@ _graceful_shutdown() { ! isAlive "$pid" && break # Workaround for zombie pid - [ ! -f "$QEMU_PID" ] && break + [ ! -s "$QEMU_PID" ] && break info "Waiting for Windows to shutdown... ($cnt/$QEMU_TIMEOUT)" From 2512925c56b3265b1ced721102d1beb7bb91c1b2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Apr 2024 17:59:30 +0200 Subject: [PATCH 147/505] docs: Add issue templates (#388) --- .github/ISSUE_TEMPLATE/BUG_REPORT.yml | 47 ++++++++++++++++++++++ .github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml | 36 +++++++++++++++++ .github/ISSUE_TEMPLATE/QUESTION.yml | 17 ++++++++ 3 files changed, 100 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/BUG_REPORT.yml create mode 100644 .github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml create mode 100644 .github/ISSUE_TEMPLATE/QUESTION.yml diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml new file mode 100644 index 0000000..df5c08d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -0,0 +1,47 @@ +name: "\U0001F41E Bug Report" +description: Create a report to help us improve the container +title: "[Bug]: " +labels: ["bug"] +body: + - type: input + id: os + attributes: + label: OS version + description: The Linux distribution and kernel version as shown by `uname -a` + validations: + required: true + - type: input + id: docker + attributes: + label: Docker version + description: The Docker version as shown by `docker -v` + validations: + required: true + - type: textarea + id: summary + attributes: + label: Summary + description: A clear and concise description of what the problem is. + validations: + required: true + - type: textarea + id: compose + attributes: + label: Docker Compose file + description: The Docker Compose file (or otherwise `run` command) of the container + validations: + required: true + - type: textarea + id: log + attributes: + label: Docker log + description: The Docker logfile of the container + validations: + required: true + - type: textarea + id: screenshot + attributes: + label: Screenshots + description: Screenshot of the problem + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml new file mode 100644 index 0000000..d3b3695 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml @@ -0,0 +1,36 @@ +name: "\U0001F680 Feature request" +description: Suggest an idea for improving the container +labels: ["enhancement"] +body: + - type: textarea + id: problem + attributes: + label: Is your proposal related to a problem? + description: | + Provide a clear and concise description of what the problem is. + For example, "I'm always frustrated when..." + validations: + required: true + - type: textarea + id: solution + attributes: + label: Describe the solution you'd like. + description: | + Provide a clear and concise description of what you want to happen. + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Describe alternatives you've considered. + description: | + Let us know about other solutions you've tried or researched. + validations: + required: true + - type: textarea + id: context + attributes: + label: Additional context + description: | + Is there anything else you can add about the proposal? + You might want to link to related issues here, if you haven't already. diff --git a/.github/ISSUE_TEMPLATE/QUESTION.yml b/.github/ISSUE_TEMPLATE/QUESTION.yml new file mode 100644 index 0000000..84dd3ac --- /dev/null +++ b/.github/ISSUE_TEMPLATE/QUESTION.yml @@ -0,0 +1,17 @@ +name: "? Question" +description: General questions about the container +title: "Question: " +labels: ["question"] +body: + - type: markdown + attributes: + value: | + Have a question about Windows for Docker? + Please make sure to check the [FAQ](https://github.com/dockur/windows/blob/master/readme.md) first! + - type: textarea + id: question + attributes: + label: Question + description: What's the question you have about the container? + validations: + required: true From 923ef5d4d31f51f5369104d479d5c8581402d5aa Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:16:17 +0200 Subject: [PATCH 148/505] Update BUG_REPORT.yml (#389) --- .github/ISSUE_TEMPLATE/BUG_REPORT.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml index df5c08d..8e1fa88 100644 --- a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -41,7 +41,7 @@ body: - type: textarea id: screenshot attributes: - label: Screenshots + label: Screenshots (optional) description: Screenshot of the problem validations: required: false From a220f6706eff96105a8940893a018703763556c4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:34:23 +0200 Subject: [PATCH 149/505] docs: Update issue templates (#390) --- .github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml | 1 + .github/ISSUE_TEMPLATE/QUESTION.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml index d3b3695..eb95b34 100644 --- a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml @@ -1,5 +1,6 @@ name: "\U0001F680 Feature request" description: Suggest an idea for improving the container +title: "[Feature]: " labels: ["enhancement"] body: - type: textarea diff --git a/.github/ISSUE_TEMPLATE/QUESTION.yml b/.github/ISSUE_TEMPLATE/QUESTION.yml index 84dd3ac..ceefd41 100644 --- a/.github/ISSUE_TEMPLATE/QUESTION.yml +++ b/.github/ISSUE_TEMPLATE/QUESTION.yml @@ -1,6 +1,6 @@ name: "? Question" description: General questions about the container -title: "Question: " +title: "[Question]: " labels: ["question"] body: - type: markdown From 3e4e37886c6344a8944f3345c9ff9fcf3fc5922f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:57:00 +0200 Subject: [PATCH 150/505] docs: Update issue template (#391) --- .github/ISSUE_TEMPLATE/BUG_REPORT.yml | 33 ++++++++++++++++++++------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml index 8e1fa88..30fc4bb 100644 --- a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -3,11 +3,27 @@ description: Create a report to help us improve the container title: "[Bug]: " labels: ["bug"] body: + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have searched the existing issues + required: true + - type: input + id: cpu + attributes: + label: Machine specifications + description: The processor and RAM amount of your machine + placeholder: e.g. Intel N5105 / 16 GB + validations: + required: true - type: input id: os attributes: - label: OS version - description: The Linux distribution and kernel version as shown by `uname -a` + label: Operating system + description: The Linux distribution and kernel version as shown by `uname -a` + placeholder: e.g. Ubuntu 24.04 / Kernel 6.8.0-22-generic validations: required: true - type: input @@ -15,33 +31,34 @@ body: attributes: label: Docker version description: The Docker version as shown by `docker -v` + placeholder: e.g. Docker version 26.0.1, build d260a54 validations: required: true - type: textarea id: summary attributes: - label: Summary - description: A clear and concise description of what the problem is. + label: Description + description: A clear and concise description of the problem. validations: required: true - type: textarea id: compose attributes: - label: Docker Compose file - description: The Docker Compose file (or otherwise `run` command) of the container + label: Docker compose file + description: The Docker compose file (or otherwise `run` command). validations: required: true - type: textarea id: log attributes: label: Docker log - description: The Docker logfile of the container + description: The Docker logfile of the container. validations: required: true - type: textarea id: screenshot attributes: label: Screenshots (optional) - description: Screenshot of the problem + description: Screenshots of the problem. validations: required: false From 3d4dd48694f9cfabdaa376ad1014c0e4d2eb5e9b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:59:55 +0200 Subject: [PATCH 151/505] docs: Update issue template (#392) --- .github/ISSUE_TEMPLATE/BUG_REPORT.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml index 30fc4bb..58fc2eb 100644 --- a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -14,7 +14,7 @@ body: id: cpu attributes: label: Machine specifications - description: The processor and RAM amount of your machine + description: The processor and RAM amount in your machine. placeholder: e.g. Intel N5105 / 16 GB validations: required: true @@ -22,7 +22,7 @@ body: id: os attributes: label: Operating system - description: The Linux distribution and kernel version as shown by `uname -a` + description: The Linux distribution and kernel version as shown by `uname -a`. placeholder: e.g. Ubuntu 24.04 / Kernel 6.8.0-22-generic validations: required: true @@ -30,7 +30,7 @@ body: id: docker attributes: label: Docker version - description: The Docker version as shown by `docker -v` + description: The Docker version as shown by `docker -v`. placeholder: e.g. Docker version 26.0.1, build d260a54 validations: required: true @@ -44,7 +44,7 @@ body: - type: textarea id: compose attributes: - label: Docker compose file + label: Docker compose description: The Docker compose file (or otherwise `run` command). validations: required: true From 4f575ebff27108fb80b1527bc06d977a77bbbded Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Apr 2024 22:35:39 +0200 Subject: [PATCH 152/505] feat: Add support for IoT version of Windows 10 (#394) --- assets/win10x64-iot.xml | 406 ++++++++++++++++++++++++++++++++++++++++ assets/win10x64.xml | 2 +- src/install.sh | 25 ++- 3 files changed, 425 insertions(+), 8 deletions(-) create mode 100644 assets/win10x64-iot.xml diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml new file mode 100644 index 0000000..d0c3518 --- /dev/null +++ b/assets/win10x64-iot.xml @@ -0,0 +1,406 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/image/index</Key> + <Value>2</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key /> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\w10\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>5</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>6</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>7</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>8</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>9</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>10</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>11</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>12</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>13</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>14</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>15</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>16</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>17</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>18</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>19</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="auditSystem" /> + <settings pass="auditUser" /> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index a332efd..af4da13 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -348,7 +348,7 @@ <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/src/install.sh b/src/install.sh index 1878967..cdaa009 100644 --- a/src/install.sh +++ b/src/install.sh @@ -93,7 +93,10 @@ fi CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname boot.iso -printf "%f\n" | head -n 1) [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) -[ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "${VERSION/\/storage\//}" -printf "%f\n" | head -n 1) + +if [ -z "$CUSTOM" ] && [[ "${VERSION,,}" != "http"* ]]; then + CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "${VERSION/\/storage\//}" -printf "%f\n" | head -n 1) +fi ESD_URL="" MACHINE="q35" @@ -120,8 +123,11 @@ printVersion() { [[ "$id" == "win2016"* ]] && desc="Windows Server 2016" [[ "$id" == "win2012"* ]] && desc="Windows Server 2012" [[ "$id" == "win2008"* ]] && desc="Windows Server 2008" - [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC" - + [[ "$id" == "win10x64-iot" ]] && desc="Windows 10 IoT" + [[ "$id" == "win11x64-iot" ]] && desc="Windows 11 IoT" + [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC" + [[ "$id" == "win11x64-ltsc" ]] && desc="Windows 11 LTSC" + echo "$desc" return 0 } @@ -181,18 +187,23 @@ getVersion() { [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" [[ "${name,,}" == *"windows vista"* ]] && detected="winvistax64" + + [[ "${name,,}" == *"server 2008"* ]] && detected="win2008r2" [[ "${name,,}" == *"server 2025"* ]] && detected="win2025-eval" [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" [[ "${name,,}" == *"server 2012"* ]] && detected="win2012r2-eval" - [[ "${name,,}" == *"server 2008"* ]] && detected="win2008r2" if [[ "${name,,}" == *"windows 10"* ]]; then - if [[ "${name,,}" == *"ltsc"* ]]; then - detected="win10x64-ltsc" + if [[ "${name,,}" == *" iot "* ]]; then + detected="win10x64-iot" else - detected="win10x64" + if [[ "${name,,}" == *"ltsc"* ]]; then + detected="win10x64-ltsc" + else + detected="win10x64" + fi fi fi From 968602f9bcc8d604b7a3c776289f16a63d032b35 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 19 Apr 2024 00:00:17 +0200 Subject: [PATCH 153/505] feat: Improved compatibility with old CPU's (#397) --- Dockerfile | 2 +- src/entry.sh | 1 + src/install.sh | 43 +++++++++++++++++++++++++------------------ 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3e623a8..92e1652 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.22 / / +COPY --from=qemux/qemu-docker:4.23 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/src/entry.sh b/src/entry.sh index 07866ca..1286590 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -33,6 +33,7 @@ fi terminal tail -fn +0 "$QEMU_LOG" 2>/dev/null & +( sleep 6; [ ! -f "$QEMU_END" ] && info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." ) & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & wait $! || : diff --git a/src/install.sh b/src/install.sh index cdaa009..c0cc3a5 100644 --- a/src/install.sh +++ b/src/install.sh @@ -95,7 +95,9 @@ CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) if [ -z "$CUSTOM" ] && [[ "${VERSION,,}" != "http"* ]]; then - CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "${VERSION/\/storage\//}" -printf "%f\n" | head -n 1) + FN="${VERSION/\/storage\//}" + [[ "$FN" == "."* ]] && FN="${FN:1}" + CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "$FN" -printf "%f\n" | head -n 1) fi ESD_URL="" @@ -125,9 +127,9 @@ printVersion() { [[ "$id" == "win2008"* ]] && desc="Windows Server 2008" [[ "$id" == "win10x64-iot" ]] && desc="Windows 10 IoT" [[ "$id" == "win11x64-iot" ]] && desc="Windows 11 IoT" - [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC" + [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC" [[ "$id" == "win11x64-ltsc" ]] && desc="Windows 11 LTSC" - + echo "$desc" return 0 } @@ -234,6 +236,7 @@ skipInstall() { finishInstall() { local iso="$1" + local aborted="$2" # Mark ISO as prepared via magic byte printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none @@ -247,6 +250,10 @@ finishInstall() { rm -f "$STORAGE/windows.old" fi + if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then + [[ "${DETECTED,,}" == "win11"* ]] && TPM="Y" + fi + rm -rf "$TMP" return 0 } @@ -259,7 +266,7 @@ abortInstall() { mv -f "$iso" "$STORAGE/$BASE" fi - finishInstall "$STORAGE/$BASE" + finishInstall "$STORAGE/$BASE" "Y" return 0 } @@ -310,7 +317,7 @@ startInstall() { if [[ "$magic" == "16" ]]; then - if hasDisk || [[ "$MANUAL" = [Yy1]* ]]; then + if hasDisk || [[ "$MANUAL" == [Yy1]* ]]; then return 1 fi @@ -447,7 +454,7 @@ downloadImage() { if (( rc == 0 )); then - [ ! -s "$iso" ] && return 1 + [ ! -s "$iso" ] || [ ! -f "$iso" ] && return 1 html "Download finished successfully..." return 0 @@ -490,7 +497,7 @@ downloadImage() { fKill "progress.sh" (( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60 - [ ! -s "$iso" ] && return 1 + [ ! -s "$iso" ] || [ ! -f "$iso" ] && return 1 html "Download finished successfully..." return 0 @@ -645,7 +652,7 @@ detectImage() { if [ -n "$DETECTED" ]; then - if [ -s "/run/assets/$DETECTED.xml" ]; then + if [ -f "/run/assets/$DETECTED.xml" ]; then [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" return 0 fi @@ -664,7 +671,7 @@ detectImage() { info "Detecting Windows version from ISO image..." - if [ -s "$dir/WIN51" ] || [ -s "$dir/SETUPXP.HTM" ]; then + if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then DETECTED="winxpx86" info "Detected: Windows XP" return 0 @@ -680,9 +687,9 @@ detectImage() { fi loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) - [ ! -s "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) + [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) - if [ ! -s "$loc" ]; then + if [ ! -f "$loc" ]; then warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" return 1 @@ -710,7 +717,7 @@ detectImage() { desc=$(printVersion "$DETECTED") [ -z "$desc" ] && desc="$DETECTED" - if [ -s "/run/assets/$DETECTED.xml" ]; then + if [ -f "/run/assets/$DETECTED.xml" ]; then [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" info "Detected: $desc" else @@ -930,7 +937,7 @@ prepareImage() { if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; then - if [ -s "$dir/$ETFS" ] && [ -s "$dir/$EFISYS" ]; then + if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then return 0 fi @@ -966,7 +973,7 @@ updateImage() { local asset="/run/assets/$3" local path src loc index result - [ ! -s "$asset" ] && return 0 + [ ! -s "$asset" ] || [ ! -f "$asset" ] && return 0 path=$(find "$dir" -maxdepth 1 -type f -iname autounattend.xml | head -n 1) [ -n "$path" ] && cp "$asset" "$path" @@ -980,9 +987,9 @@ updateImage() { fi loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) - [ ! -s "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) + [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) - if [ ! -s "$loc" ]; then + if [ ! -f "$loc" ]; then warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" return 1 @@ -1091,7 +1098,7 @@ if ! startInstall; then return 0 fi -if [ ! -s "$ISO" ]; then +if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then rm -f "$ISO" if ! downloadImage "$ISO" "$VERSION"; then error "Failed to download $VERSION" @@ -1126,7 +1133,7 @@ if ! buildImage "$DIR"; then exit 65 fi -finishInstall "$STORAGE/$BASE" +finishInstall "$STORAGE/$BASE" "N" html "Successfully prepared image for installation..." return 0 From 1f07402717b431474ec001e29405aee7573a385f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 20 Apr 2024 01:45:13 +0200 Subject: [PATCH 154/505] fix: Disable secure boot by default (#399) --- Dockerfile | 3 ++- src/install.sh | 39 +++++++++++++++++++++++++++++++++++---- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 92e1652..bfbed8f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.23 / / +COPY --from=qemux/qemu-docker:4.24 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" @@ -7,6 +7,7 @@ ARG DEBCONF_NONINTERACTIVE_SEEN "true" RUN apt-get update && \ apt-get --no-install-recommends -y install \ + bc \ curl \ 7zip \ wsdd \ diff --git a/src/install.sh b/src/install.sh index c0cc3a5..7018232 100644 --- a/src/install.sh +++ b/src/install.sh @@ -250,8 +250,9 @@ finishInstall() { rm -f "$STORAGE/windows.old" fi + # Enable secure boot + TPM on manual installs as Win11 requires if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then - [[ "${DETECTED,,}" == "win11"* ]] && TPM="Y" + [[ "${DETECTED,,}" == "win11"* ]] && BOOT_MODE="windows_secure" fi rm -rf "$TMP" @@ -1084,9 +1085,7 @@ buildImage() { return 0 } -###################################### - -if ! startInstall; then +bootWindows() { if [ -f "$STORAGE/windows.old" ]; then MACHINE=$(<"$STORAGE/windows.old") @@ -1094,7 +1093,39 @@ if ! startInstall; then BOOT_MODE="windows_legacy" fi + local creation="1.10" + local minimal="2.14" + + if [ -f "$STORAGE/windows.ver" ]; then + creation=$(<"$STORAGE/windows.ver") + [[ "${creation}" != *"."* ]] && creation="$minimal" + fi + + # Force secure boot on installs created prior to v2.14 + if (( $(echo "$creation < $minimal" | bc -l) )); then + if [[ "${BOOT_MODE,,}" == "windows" ]]; then + BOOT_MODE="windows_secure" + if [ -f "$STORAGE/windows.rom" ] && [ ! -f "$STORAGE/$BOOT_MODE.rom" ]; then + mv "$STORAGE/windows.rom" "$STORAGE/$BOOT_MODE.rom" + fi + if [ -f "$STORAGE/windows.vars" ] && [ ! -f "$STORAGE/$BOOT_MODE.vars" ]; then + mv "$STORAGE/windows.vars" "$STORAGE/$BOOT_MODE.vars" + fi + fi + fi + rm -rf "$TMP" + + return 0 +} + +###################################### + +if ! startInstall; then + if ! bootWindows; then + error "Failed to boot Windows!" + exit 68 + fi return 0 fi From 60107560baa5cca2b28df8406358b601323d5f6e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 20 Apr 2024 01:50:49 +0200 Subject: [PATCH 155/505] feat: Print system info to log (#400) --- src/entry.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/entry.sh b/src/entry.sh index 1286590..70b7a63 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -21,13 +21,9 @@ cd /run trap - ERR -info "Booting $APP using $VERS..." +info "Booting ${APP}${BOOT_DESC} on ${CPU} using QEMU v${VERS} with kernel $(uname -r)..." [[ "$DEBUG" == [Yy1]* ]] && echo "Arguments: $ARGS" && echo -if [[ "$CONSOLE" == [Yy]* ]]; then - exec qemu-system-x86_64 ${ARGS:+ $ARGS} -fi - { qemu-system-x86_64 ${ARGS:+ $ARGS} >"$QEMU_OUT" 2>"$QEMU_LOG"; rc=$?; } || : (( rc != 0 )) && error "$(<"$QEMU_LOG")" && exit 15 From 77f43f35d2ba56414a18b5156fbd56fde86e85c5 Mon Sep 17 00:00:00 2001 From: Ilia Karpov <42714629+WSHAPER@users.noreply.github.com> Date: Sun, 21 Apr 2024 22:17:21 +0200 Subject: [PATCH 156/505] docs: Update local copy instructions (#403) --- readme.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index f24d0da..520d897 100644 --- a/readme.md +++ b/readme.md @@ -157,7 +157,14 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ VERSION: "https://example.com/win.iso" ``` - Alternatively, you can also rename a local file to `custom.iso` and place it in an empty `/storage` folder to skip the download. + Alternatively, you can also use a local file directly, and skip the download, by binding it in your compose file in this way: + + ```yaml + volumes: + - /home/user/example.iso:/storage/custom.iso + ``` + + Replace the example path `/home/user/example.iso` with the filename of the desired ISO file. * ### How do I perform a manual installation? From bafa48a1b7f140883d80dc4e23b0b5caea542fa5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 21 Apr 2024 22:33:49 +0200 Subject: [PATCH 157/505] feat: Added support for the Enterprise Evaluations (#406) --- assets/win10x64-enterprise-eval.xml | 398 ++++++++++++++++++++++++++ assets/win10x64-ltsc.xml | 2 +- assets/win11x64-enterprise-eval.xml | 426 ++++++++++++++++++++++++++++ assets/win81x64-enterprise-eval.xml | 312 ++++++++++++++++++++ src/entry.sh | 2 +- src/install.sh | 30 +- 6 files changed, 1162 insertions(+), 8 deletions(-) create mode 100644 assets/win10x64-enterprise-eval.xml create mode 100644 assets/win11x64-enterprise-eval.xml create mode 100644 assets/win81x64-enterprise-eval.xml diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml new file mode 100644 index 0000000..db51ceb --- /dev/null +++ b/assets/win10x64-enterprise-eval.xml @@ -0,0 +1,398 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey /> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\w10\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>5</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>6</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>7</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>8</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>9</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>10</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>11</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>12</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>13</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>14</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>15</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>16</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>17</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>18</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>19</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="auditSystem" /> + <settings pass="auditUser" /> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index f9d0f11..606b417 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -352,7 +352,7 @@ <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml new file mode 100644 index 0000000..9a2e177 --- /dev/null +++ b/assets/win11x64-enterprise-eval.xml @@ -0,0 +1,426 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey /> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\MoSetup" /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\w11\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>5</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>6</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>7</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>8</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>9</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>10</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>11</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>12</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>13</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>14</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>15</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>16</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>17</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>18</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>19</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="auditSystem" /> + <settings pass="auditUser" /> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml new file mode 100644 index 0000000..4c25d10 --- /dev/null +++ b/assets/win81x64-enterprise-eval.xml @@ -0,0 +1,312 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey /> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\w10\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation Mode</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/src/entry.sh b/src/entry.sh index 70b7a63..3c30e5e 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -21,7 +21,7 @@ cd /run trap - ERR -info "Booting ${APP}${BOOT_DESC} on ${CPU} using QEMU v${VERS} with kernel $(uname -r)..." +info "Booting ${APP}${BOOT_DESC} on a ${CPU} using QEMU v${VERS} with kernel $(uname -r)..." [[ "$DEBUG" == [Yy1]* ]] && echo "Arguments: $ARGS" && echo { qemu-system-x86_64 ${ARGS:+ $ARGS} >"$QEMU_OUT" 2>"$QEMU_LOG"; rc=$?; } || : diff --git a/src/install.sh b/src/install.sh index 7018232..1266a9e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -129,6 +129,9 @@ printVersion() { [[ "$id" == "win11x64-iot" ]] && desc="Windows 11 IoT" [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC" [[ "$id" == "win11x64-ltsc" ]] && desc="Windows 11 LTSC" + [[ "$id" == "win81x64-enterprise-eval" ]] && desc="Windows 8 Enterprise" + [[ "$id" == "win10x64-enterprise-eval" ]] && desc="Windows 10 Enterprise" + [[ "$id" == "win11x64-enterprise-eval" ]] && desc="Windows 11 Enterprise" echo "$desc" return 0 @@ -141,7 +144,6 @@ getName() { [[ "${file,,}" == "win11"* ]] && desc="Windows 11" [[ "${file,,}" == "win10"* ]] && desc="Windows 10" - [[ "${file,,}" == "win8.1"* ]] && desc="Windows 8" [[ "${file,,}" == "win8"* ]] && desc="Windows 8" [[ "${file,,}" == "win7"* ]] && desc="Windows 7" [[ "${file,,}" == "winxp"* ]] && desc="Windows XP" @@ -151,14 +153,12 @@ getName() { [[ "${file,,}" == "tiny11_core"* ]] && desc="Tiny 11 Core" [[ "${file,,}" == *"windows11"* ]] && desc="Windows 11" [[ "${file,,}" == *"windows10"* ]] && desc="Windows 10" - [[ "${file,,}" == *"windows8.1"* ]] && desc="Windows 8" [[ "${file,,}" == *"windows8"* ]] && desc="Windows 8" [[ "${file,,}" == *"windows7"* ]] && desc="Windows 7" [[ "${file,,}" == *"windowsxp"* ]] && desc="Windows XP" [[ "${file,,}" == *"windowsvista"* ]] && desc="Windows Vista" [[ "${file,,}" == *"windows_11"* ]] && desc="Windows 11" [[ "${file,,}" == *"windows_10"* ]] && desc="Windows 10" - [[ "${file,,}" == *"windows_8.1"* ]] && desc="Windows 8" [[ "${file,,}" == *"windows_8"* ]] && desc="Windows 8" [[ "${file,,}" == *"windows_7"* ]] && desc="Windows 7" [[ "${file,,}" == *"windows_xp"* ]] && desc="Windows XP" @@ -186,8 +186,6 @@ getVersion() { local detected="" [[ "${name,,}" == *"windows 7"* ]] && detected="win7x64" - [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" - [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" [[ "${name,,}" == *"windows vista"* ]] && detected="winvistax64" [[ "${name,,}" == *"server 2008"* ]] && detected="win2008r2" @@ -197,6 +195,22 @@ getVersion() { [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" [[ "${name,,}" == *"server 2012"* ]] && detected="win2012r2-eval" + if [[ "${name,,}" == *"windows 8"* ]]; then + if [[ "${name,,}" == *"enterprise evaluation"* ]]; then + detected="win81x64-enterprise-eval" + else + detected="win81x64" + fi + fi + + if [[ "${name,,}" == *"windows 11"* ]]; then + if [[ "${name,,}" == *"enterprise evaluation"* ]]; then + detected="win11x64-enterprise-eval" + else + detected="win11x64" + fi + fi + if [[ "${name,,}" == *"windows 10"* ]]; then if [[ "${name,,}" == *" iot "* ]]; then detected="win10x64-iot" @@ -204,7 +218,11 @@ getVersion() { if [[ "${name,,}" == *"ltsc"* ]]; then detected="win10x64-ltsc" else - detected="win10x64" + if [[ "${name,,}" == *"enterprise evaluation"* ]]; then + detected="win10x64-enterprise-eval" + else + detected="win10x64" + fi fi fi fi From a6a65a67d12df9e01e937a28363980b41e5ae4e8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:50:01 +0200 Subject: [PATCH 158/505] feat: Add support for read-only images (#407) --- src/install.sh | 74 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/src/install.sh b/src/install.sh index 1266a9e..1065d75 100644 --- a/src/install.sh +++ b/src/install.sh @@ -90,7 +90,8 @@ if [[ "${VERSION,,}" == "tiny10" ]]; then VERSION="https://archive.org/download/tiny-10-23-h2/tiny10%20x64%2023h2.iso" fi -CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) +CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname windows.iso -printf "%f\n" | head -n 1) +[ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname boot.iso -printf "%f\n" | head -n 1) [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) @@ -256,8 +257,18 @@ finishInstall() { local iso="$1" local aborted="$2" - # Mark ISO as prepared via magic byte - printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none + if [ ! -s "$iso" ] || [ ! -f "$iso" ]; then + error "Failed to find ISO: $iso" + return 1 + fi + + if [ -w "$iso" ] && [[ "$aborted" != [Yy1]* ]]; then + # Mark ISO as prepared via magic byte + if ! printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none; then + error "Failed to set magic byte!" + return 1 + fi + fi rm -f "$STORAGE/windows.boot" cp /run/version "$STORAGE/windows.ver" @@ -270,7 +281,10 @@ finishInstall() { # Enable secure boot + TPM on manual installs as Win11 requires if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then - [[ "${DETECTED,,}" == "win11"* ]] && BOOT_MODE="windows_secure" + if [[ "${DETECTED,,}" == "win11"* ]]; then + BOOT_MODE="windows_secure" + echo "$BOOT_MODE" > "$STORAGE/windows.mode" + fi fi rm -rf "$TMP" @@ -282,10 +296,17 @@ abortInstall() { local iso="$1" if [[ "$iso" != "$STORAGE/$BASE" ]]; then - mv -f "$iso" "$STORAGE/$BASE" + if ! mv -f "$iso" "$STORAGE/$BASE"; then + error "Failed to move ISO: $iso" + exit 69 + fi + fi + + if ! finishInstall "$STORAGE/$BASE" "Y"; then + error "Failed to finish installation!" + exit 69 fi - finishInstall "$STORAGE/$BASE" "Y" return 0 } @@ -293,6 +314,8 @@ startInstall() { html "Starting Windows..." + [ -z "$MANUAL" ] && MANUAL="N" + if [ -f "$STORAGE/$CUSTOM" ]; then EXTERNAL="Y" @@ -319,14 +342,8 @@ startInstall() { BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') fi - - [[ "${BASE,,}" == "boot."* ]] && BASE="windows.iso" - [[ "${BASE,,}" == "custom."* ]] && BASE="windows.iso" - fi - [ -z "$MANUAL" ] && MANUAL="N" - if [ -f "$STORAGE/$BASE" ]; then # Check if the ISO was already processed by our script @@ -345,15 +362,11 @@ startInstall() { EXTERNAL="Y" CUSTOM="$BASE" - else - - rm -f "$STORAGE/$BASE" - - if skipInstall; then - BASE="" - return 1 - fi + fi + if skipInstall; then + [ ! -f "$STORAGE/$BASE" ] && BASE="" + return 1 fi rm -rf "$TMP" @@ -1109,6 +1122,14 @@ bootWindows() { MACHINE=$(<"$STORAGE/windows.old") [ -z "$MACHINE" ] && MACHINE="q35" BOOT_MODE="windows_legacy" + rm -rf "$TMP" + return 0 + fi + + if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then + BOOT_MODE=$(<"$STORAGE/windows.mode") + rm -rf "$TMP" + return 0 fi local creation="1.10" @@ -1123,6 +1144,7 @@ bootWindows() { if (( $(echo "$creation < $minimal" | bc -l) )); then if [[ "${BOOT_MODE,,}" == "windows" ]]; then BOOT_MODE="windows_secure" + echo "$BOOT_MODE" > "$STORAGE/windows.mode" if [ -f "$STORAGE/windows.rom" ] && [ ! -f "$STORAGE/$BOOT_MODE.rom" ]; then mv "$STORAGE/windows.rom" "$STORAGE/$BOOT_MODE.rom" fi @@ -1133,7 +1155,6 @@ bootWindows() { fi rm -rf "$TMP" - return 0 } @@ -1175,14 +1196,21 @@ if ! updateImage "$ISO" "$DIR" "$XML"; then return 0 fi -rm -f "$ISO" +if ! rm -f "$ISO" 2> /dev/null; then + BASE="windows.iso" + ISO="$STORAGE/$BASE" + rm -f "$ISO" +fi if ! buildImage "$DIR"; then error "Failed to build image!" exit 65 fi -finishInstall "$STORAGE/$BASE" "N" +if ! finishInstall "$STORAGE/$BASE" "N"; then + error "Failed to finish installation!" + exit 69 +fi html "Successfully prepared image for installation..." return 0 From adece2e5595866e1ba8f4efdacfed79db615cfde Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 24 Apr 2024 20:16:43 +0200 Subject: [PATCH 159/505] feat: Disabled sleep mode and improved download (#413) --- assets/win10x64-enterprise-eval.xml | 7 +- assets/win10x64-iot.xml | 7 +- assets/win10x64-ltsc.xml | 7 +- assets/win10x64.xml | 7 +- assets/win11x64-enterprise-eval.xml | 9 +- assets/win11x64.xml | 9 +- assets/win2008r2.xml | 7 +- assets/win2012r2-eval.xml | 7 +- assets/win2016-eval.xml | 7 +- assets/win2019-eval.xml | 7 +- assets/win2022-eval.xml | 7 +- assets/win7x64.xml | 7 +- assets/win81x64-enterprise-eval.xml | 7 +- assets/win81x64.xml | 7 +- assets/winvistax64.xml | 15 +- src/entry.sh | 2 +- src/install.sh | 345 +++++++++++++++------------- 17 files changed, 283 insertions(+), 181 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index db51ceb..2e2330b 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -390,7 +390,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index d0c3518..72d4a95 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -398,7 +398,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 606b417..88845ae 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -396,7 +396,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index af4da13..a8e6911 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -392,7 +392,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 9a2e177..476cde8 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -408,15 +408,20 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 3fa19df..8f2809f 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -410,15 +410,20 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 275a8b9..1af605f 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -280,7 +280,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 7b22e00..14a9b79 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -319,7 +319,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index e2200a0..289f3f7 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -319,7 +319,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index b01d491..ab4222f 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -323,7 +323,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 3bfc483..6b553b4 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -323,7 +323,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index e9050e5..398116b 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -283,7 +283,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 4c25d10..adc9fff 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -304,7 +304,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index f201a16..8788142 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -313,7 +313,12 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index 06ceea7..c15f547 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -222,30 +222,35 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Hibernation Mode</Description> + <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> <Description>Add RDP in firewall</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> <Description>Disable firewall</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable RDP</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off sidebar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> diff --git a/src/entry.sh b/src/entry.sh index 3c30e5e..1e081eb 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -29,7 +29,7 @@ info "Booting ${APP}${BOOT_DESC} on a ${CPU} using QEMU v${VERS} with kernel $(u terminal tail -fn +0 "$QEMU_LOG" 2>/dev/null & -( sleep 6; [ ! -f "$QEMU_END" ] && info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." ) & +( sleep 10; [ ! -f "$QEMU_END" ] && info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." ) & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & wait $! || : diff --git a/src/install.sh b/src/install.sh index 1065d75..7ecbb86 100644 --- a/src/install.sh +++ b/src/install.sh @@ -2,8 +2,10 @@ set -Eeuo pipefail : "${MANUAL:=""}" +: "${VERSION:=""}" : "${DETECTED:=""}" -: "${VERSION:="win11x64"}" + +[ -z "$VERSION" ] && VERSION="win11x64" if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then VERSION="${VERSION:1:-1}" @@ -103,6 +105,7 @@ fi ESD_URL="" MACHINE="q35" +PLATFORM="x64" TMP="$STORAGE/tmp" DIR="$TMP/unpack" FB="falling back to manual installation!" @@ -112,7 +115,7 @@ EFISYS="efi/microsoft/boot/efisys_noprompt.bin" printVersion() { local id="$1" - local desc="" + local desc="$2" [[ "$id" == "win7"* ]] && desc="Windows 7" [[ "$id" == "win8"* ]] && desc="Windows 8" @@ -134,6 +137,8 @@ printVersion() { [[ "$id" == "win10x64-enterprise-eval" ]] && desc="Windows 10 Enterprise" [[ "$id" == "win11x64-enterprise-eval" ]] && desc="Windows 11 Enterprise" + [ -z "$desc" ] && desc="Windows" + echo "$desc" return 0 } @@ -141,7 +146,7 @@ printVersion() { getName() { local file="$1" - local desc="" + local desc="$2" [[ "${file,,}" == "win11"* ]] && desc="Windows 11" [[ "${file,,}" == "win10"* ]] && desc="Windows 10" @@ -177,6 +182,8 @@ getName() { [[ "${file,,}" == *"server_2022"* ]] && desc="Windows Server 2022" [[ "${file,,}" == *"server_2025"* ]] && desc="Windows Server 2025" + [ -z "$desc" ] && desc="Windows" + echo "$desc" return 0 } @@ -258,15 +265,13 @@ finishInstall() { local aborted="$2" if [ ! -s "$iso" ] || [ ! -f "$iso" ]; then - error "Failed to find ISO: $iso" - return 1 + error "Failed to find ISO: $iso" && return 1 fi if [ -w "$iso" ] && [[ "$aborted" != [Yy1]* ]]; then # Mark ISO as prepared via magic byte if ! printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none; then - error "Failed to set magic byte!" - return 1 + error "Failed to set magic byte!" && return 1 fi fi @@ -297,17 +302,13 @@ abortInstall() { if [[ "$iso" != "$STORAGE/$BASE" ]]; then if ! mv -f "$iso" "$STORAGE/$BASE"; then - error "Failed to move ISO: $iso" - exit 69 + error "Failed to move ISO: $iso" && return 1 fi fi - if ! finishInstall "$STORAGE/$BASE" "Y"; then - error "Failed to finish installation!" - exit 69 - fi + finishInstall "$STORAGE/$BASE" "Y" && return 0 - return 0 + return 1 } startInstall() { @@ -344,6 +345,11 @@ startInstall() { fi fi + if skipInstall; then + [ ! -f "$STORAGE/$BASE" ] && BASE="" + return 1 + fi + if [ -f "$STORAGE/$BASE" ]; then # Check if the ISO was already processed by our script @@ -364,11 +370,6 @@ startInstall() { fi - if skipInstall; then - [ ! -f "$STORAGE/$BASE" ] && BASE="" - return 1 - fi - rm -rf "$TMP" mkdir -p "$TMP" @@ -385,20 +386,17 @@ startInstall() { getESD() { local dir="$1" - local file="$2" - local architecture="x64" local winCatalog size case "${VERSION,,}" in - win11x64) + "win11${PLATFORM,,}") winCatalog="https://go.microsoft.com/fwlink?linkid=2156292" ;; - win10x64) + "win10${PLATFORM,,}") winCatalog="https://go.microsoft.com/fwlink/?LinkId=841361" ;; *) - error "Invalid ESD version specified: $VERSION" - return 1 + error "Invalid ESD version specified: $VERSION" && return 1 ;; esac @@ -428,7 +426,7 @@ getESD() { local esdLang="en-us" local editionName="Professional" - local edQuery='//File[Architecture="'${architecture}'"][Edition="'${editionName}'"]' + local edQuery='//File[Architecture="'${PLATFORM}'"][Edition="'${editionName}'"]' echo -e '<Catalog>' > "${dir}/products_filter.xml" xmllint --nonet --xpath "${edQuery}" "${dir}/products.xml" >> "${dir}/products_filter.xml" 2>/dev/null @@ -443,56 +441,102 @@ getESD() { ESD_URL=$(xmllint --nonet --xpath '//FilePath' "${dir}/esd_edition.xml" | sed -E -e 's/<[\/]?FilePath>//g') if [ -z "$ESD_URL" ]; then - error "Failed to find ESD url!" && return 1 + error "Failed to find ESD URL!" && return 1 fi rm -rf "$dir" return 0 } -downloadImage() { +doMido() { local iso="$1" local url="$2" - local file="$iso" - local desc rc progress + local desc="$3" + local rc + + rm -f "$iso" + rm -f "$iso.PART" + + local msg="Downloading $desc..." + info "$msg" && html "$msg" + /run/progress.sh "$iso.PART" "Downloading $desc ([P])..." & + + cd "$TMP" + { /run/mido.sh "$url"; rc=$?; } || : + cd /run + + fKill "progress.sh" + + if (( rc == 0 )) && [ -f "$iso" ]; then + if [ "$(stat -c%s "$iso")" -gt 100000000 ]; then + html "Download finished successfully..." && return 0 + fi + fi + + rm -f "$iso" + rm -f "$iso.PART" + + return 1 +} + +downloadFile() { + + local iso="$1" + local url="$2" + local desc="$3" + local rc progress rm -f "$iso" - if [[ "$EXTERNAL" != [Yy1]* ]]; then - - file="$iso.PART" - desc=$(printVersion "$VERSION") - [ -z "$desc" ] && desc="Windows" - + # Check if running with interactive TTY or redirected to docker log + if [ -t 1 ]; then + progress="--progress=bar:noscroll" else - - desc=$(getName "$BASE") - [ -z "$desc" ] && desc="$BASE" - + progress="--progress=dot:giga" fi local msg="Downloading $desc..." info "$msg" && html "$msg" - /run/progress.sh "$file" "Downloading $desc ([P])..." & + /run/progress.sh "$iso" "Downloading $desc ([P])..." & + + { wget "$url" -O "$iso" -q --no-check-certificate --show-progress "$progress"; rc=$?; } || : + + fKill "progress.sh" + + if (( rc == 0 )) && [ -f "$iso" ]; then + if [ "$(stat -c%s "$iso")" -gt 100000000 ]; then + html "Download finished successfully..." && return 0 + fi + fi + + rm -f "$iso" + error "Failed to download $url , reason: $rc" + + return 1 +} + +downloadImage() { + + local iso="$1" + local url="$2" + local rc desc if [[ "$EXTERNAL" != [Yy1]* ]]; then - cd "$TMP" - { /run/mido.sh "$url"; rc=$?; } || : - cd /run + desc=$(printVersion "$VERSION" "Windows") - fKill "progress.sh" + else - if (( rc == 0 )); then + desc=$(getName "$BASE" "$BASE") - [ ! -s "$iso" ] || [ ! -f "$iso" ] && return 1 + fi - html "Download finished successfully..." - return 0 - fi + if [[ "$EXTERNAL" != [Yy1]* ]]; then - if [[ "$VERSION" != "win10x64"* ]] && [[ "$VERSION" != "win11x64" ]]; then + doMido "$iso" "$url" "$desc" && return 0 + + if [[ "$VERSION" != "win10${PLATFORM,,}" ]] && [[ "$VERSION" != "win11${PLATFORM,,}" ]]; then return 1 fi @@ -503,36 +547,44 @@ downloadImage() { ISO="$TMP/$VERSION.esd" iso="$ISO" - file="$ISO" - rm -f "$iso" - if ! getESD "$TMP/esd" "$iso"; then - return 1 + if ! getESD "$TMP/esd"; then + url="" + else + url="$ESD_URL" fi - url="$ESD_URL" - msg="Downloading $desc..." - info "$msg" && html "$msg" - /run/progress.sh "$iso" "Downloading $desc ([P])..." & - fi - # Check if running with interactive TTY or redirected to docker log - if [ -t 1 ]; then - progress="--progress=bar:noscroll" - else - progress="--progress=dot:giga" + if [ -n "$url" ]; then + downloadFile "$iso" "$url" "$desc" && return 0 fi - { wget "$url" -O "$iso" -q --no-check-certificate --show-progress "$progress"; rc=$?; } || : + [[ "$EXTERNAL" == [Yy1]* ]] && return 1 - fKill "progress.sh" - (( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60 + case "${VERSION,,}" in + "win11${PLATFORM,,}") + url="https://dl.bobpony.com/windows/11/en-us_windows_11_23h2_${PLATFORM,,}.iso" + ;; + "win10${PLATFORM,,}") + url="https://dl.bobpony.com/windows/10/en-us_windows_10_22h2_${PLATFORM,,}.iso" + ;; + *) + return 1 + ;; + esac - [ ! -s "$iso" ] || [ ! -f "$iso" ] && return 1 + info "Failed to download $desc from Microsoft, will try another mirror now..." - html "Download finished successfully..." - return 0 + rm -rf "$TMP" + mkdir -p "$TMP" + + ISO="$TMP/$BASE" + iso="$ISO" + + downloadFile "$iso" "$url" "$desc" && return 0 + + return 1 } extractESD() { @@ -541,26 +593,26 @@ extractESD() { local dir="$2" local size size_gb space space_gb desc - desc=$(printVersion "$VERSION") + desc=$(printVersion "$VERSION" "Windows") local msg="Extracting $desc bootdisk..." info "$msg" && html "$msg" - size=16106127360 - size_gb=$(( (size + 1073741823)/1073741824 )) - space=$(df --output=avail -B 1 "$TMP" | tail -n 1) - space_gb=$(( (space + 1073741823)/1073741824 )) - - if ((size<10000000)); then - error "Invalid ESD file: Size is smaller than 10 MB" && exit 62 - fi - - if (( size > space )); then - error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && exit 63 + if [ "$(stat -c%s "$iso")" -lt 100000000 ]; then + error "Invalid ESD file: Size is smaller than 100 MB" && return 1 fi rm -rf "$dir" mkdir -p "$dir" + size=16106127360 + size_gb=$(( (size + 1073741823)/1073741824 )) + space=$(df --output=avail -B 1 "$dir" | tail -n 1) + space_gb=$(( (space + 1073741823)/1073741824 )) + + if (( size > space )); then + error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 + fi + local esdImageCount esdImageCount=$(wimlib-imagex info "${iso}" | awk '/Image Count:/ {print $3}') @@ -594,15 +646,14 @@ extractESD() { local edition imageIndex imageEdition case "${VERSION,,}" in - win11x64) + "win11${PLATFORM,,}") edition="11 pro" ;; - win10x64) + "win10${PLATFORM,,}") edition="10 pro" ;; *) - error "Invalid version specified: $VERSION" - return 1 + error "Invalid version specified: $VERSION" && return 1 ;; esac @@ -616,8 +667,7 @@ extractESD() { return 0 done - error "Failed to find product in install.wim!" - return 1 + error "Failed to find product in install.wim!" && return 1 } extractImage() { @@ -628,42 +678,38 @@ extractImage() { local size size_gb space space_gb if [[ "${iso,,}" == *".esd" ]]; then - if ! extractESD "$iso" "$dir"; then - rm -f "$iso" - error "Failed to extract ESD file!" - exit 67 - fi - return 0 + extractESD "$iso" "$dir" && return 0 + return 1 fi if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then - desc=$(printVersion "$VERSION") - [ -z "$desc" ] && desc="downloaded ISO" + desc=$(printVersion "$VERSION" "downloaded ISO") fi local msg="Extracting $desc image..." [ -n "$CUSTOM" ] && msg="Extracting local ISO image..." info "$msg" && html "$msg" + rm -rf "$dir" + mkdir -p "$dir" + size=$(stat -c%s "$iso") size_gb=$(( (size + 1073741823)/1073741824 )) - space=$(df --output=avail -B 1 "$TMP" | tail -n 1) + space=$(df --output=avail -B 1 "$dir" | tail -n 1) space_gb=$(( (space + 1073741823)/1073741824 )) - if ((size<10000000)); then - error "Invalid ISO file: Size is smaller than 10 MB" && exit 62 + if ((size<100000000)); then + error "Invalid ISO file: Size is smaller than 100 MB" && return 1 fi if (( size > space )); then - error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && exit 63 + error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 fi rm -rf "$dir" if ! 7z x "$iso" -o"$dir" > /dev/null; then - rm -f "$iso" - error "Failed to extract ISO file!" - exit 66 + error "Failed to extract ISO file: $iso" && return 1 fi return 0 @@ -692,8 +738,7 @@ detectImage() { if [[ "${DETECTED,,}" != "winxp"* ]]; then local dsc - dsc=$(printVersion "$DETECTED") - [ -z "$dsc" ] && dsc="$DETECTED" + dsc=$(printVersion "$DETECTED" "$DETECTED") warn "got $dsc, but no matching XML file exists, $FB." fi @@ -705,26 +750,23 @@ detectImage() { if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then DETECTED="winxpx86" - info "Detected: Windows XP" - return 0 + info "Detected: Windows XP" && return 0 fi local src loc tag result name name2 desc src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then - warn "failed to locate 'sources' folder in ISO image, $FB" BOOT_MODE="windows_legacy" - return 1 + warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) if [ ! -f "$loc" ]; then - warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" - return 1 + warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1 fi tag="DISPLAYNAME" @@ -742,12 +784,10 @@ detectImage() { fi if [ -z "$DETECTED" ]; then - warn "failed to determine Windows version from string '$name', $FB" - return 0 + warn "failed to determine Windows version from string '$name', $FB" && return 0 fi - desc=$(printVersion "$DETECTED") - [ -z "$desc" ] && desc="$DETECTED" + desc=$(printVersion "$DETECTED" "$DETECTED") if [ -f "/run/assets/$DETECTED.xml" ]; then [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" @@ -781,8 +821,7 @@ prepareXP() { rm -rf "$drivers" if ! 7z x /run/drivers.iso -o"$drivers" > /dev/null; then - error "Failed to extract driver ISO file!" - exit 66 + error "Failed to extract driver ISO file!" && exit 66 fi cp "$drivers/viostor/xp/$arch/viostor.sys" "$target" @@ -953,8 +992,7 @@ prepareLegacy() { offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") if ! dd "if=$iso" "of=$dir/$ETFS" bs=2048 "count=$len" "skip=$offset" status=none; then - error "Failed to extract boot image from ISO!" - exit 67 + error "Failed to extract boot image from ISO!" && exit 67 fi return 0 @@ -985,13 +1023,11 @@ prepareImage() { if [[ "${DETECTED,,}" == "winxp"* ]]; then if ! prepareXP "$iso" "$dir"; then - error "Failed to prepare Windows XP ISO!" - return 1 + error "Failed to prepare Windows XP ISO!" && return 1 fi else if ! prepareLegacy "$iso" "$dir"; then - error "Failed to prepare Windows ISO!" - return 1 + error "Failed to prepare Windows ISO!" && return 1 fi fi @@ -1013,18 +1049,16 @@ updateImage() { src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then - warn "failed to locate 'sources' folder in ISO image, $FB" BOOT_MODE="windows_legacy" - return 1 + warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) if [ ! -f "$loc" ]; then - warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" - return 1 + warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 fi info "Adding XML file for automatic installation..." @@ -1037,8 +1071,7 @@ updateImage() { fi if ! wimlib-imagex update "$loc" "$index" --command "add $asset /autounattend.xml" > /dev/null; then - warn "failed to add XML to ISO image, $FB" - return 1 + warn "failed to add XML to ISO image, $FB" && return 1 fi return 0 @@ -1047,6 +1080,7 @@ updateImage() { buildImage() { local dir="$1" + local failed="N" local cat="BOOT.CAT" local label="${BASE%.*}" local log="/run/shm/iso.log" @@ -1056,8 +1090,7 @@ buildImage() { local out="$TMP/$label.tmp" rm -f "$out" - desc=$(printVersion "$DETECTED") - [ -z "$desc" ] && desc="ISO" + desc=$(printVersion "$DETECTED" "ISO") local msg="Building $desc image..." info "$msg" && html "$msg" @@ -1068,16 +1101,14 @@ buildImage() { space_gb=$(( (space + 1073741823)/1073741824 )) if (( size > space )); then - error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." - return 1 + error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 fi if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log"; then - [ -s "$log" ] && echo "$(<"$log")" - return 1 + failed="Y" fi else @@ -1086,21 +1117,24 @@ buildImage() { if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ -udf -allow-limited-size -quiet "$dir" 2> "$log"; then - [ -s "$log" ] && echo "$(<"$log")" - return 1 + failed="Y" fi else if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ -relaxed-filenames -V "$label" -quiet "$dir" 2> "$log"; then - [ -s "$log" ] && echo "$(<"$log")" - return 1 + failed="Y" fi fi fi + if [[ "$failed" != "N" ]]; then + [ -s "$log" ] && echo "$(<"$log")" + error "Failed to build image!" && return 1 + fi + local error="" local hide="Warning: creating filesystem that does not conform to ISO-9660." @@ -1108,8 +1142,7 @@ buildImage() { [[ "$error" != "$hide" ]] && echo "$error" if [ -f "$STORAGE/$BASE" ]; then - error "File $STORAGE/$BASE does already exist?!" - return 1 + error "File $STORAGE/$BASE does already exist?!" && return 1 fi mv "$out" "$STORAGE/$BASE" @@ -1161,39 +1194,35 @@ bootWindows() { ###################################### if ! startInstall; then - if ! bootWindows; then - error "Failed to boot Windows!" - exit 68 - fi - return 0 + bootWindows && return 0 + exit 68 fi if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then - rm -f "$ISO" if ! downloadImage "$ISO" "$VERSION"; then - error "Failed to download $VERSION" + rm -f "$ISO" exit 61 fi fi if ! extractImage "$ISO" "$DIR"; then - abortInstall "$ISO" - return 0 + rm -f "$ISO" + exit 62 fi if ! detectImage "$DIR"; then - abortInstall "$ISO" - return 0 + abortInstall "$ISO" && return 0 + exit 60 fi if ! prepareImage "$ISO" "$DIR"; then - abortInstall "$ISO" - return 0 + abortInstall "$ISO" && return 0 + exit 60 fi if ! updateImage "$ISO" "$DIR" "$XML"; then - abortInstall "$ISO" - return 0 + abortInstall "$ISO" && return 0 + exit 60 fi if ! rm -f "$ISO" 2> /dev/null; then @@ -1203,12 +1232,10 @@ if ! rm -f "$ISO" 2> /dev/null; then fi if ! buildImage "$DIR"; then - error "Failed to build image!" exit 65 fi if ! finishInstall "$STORAGE/$BASE" "N"; then - error "Failed to finish installation!" exit 69 fi From e29fa29d3ecffe8c53d16570103cdd6021896270 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 24 Apr 2024 22:12:08 +0200 Subject: [PATCH 160/505] feat: Enable RemoteAPP support (#414) --- assets/win10x64-enterprise-eval.xml | 5 +++++ assets/win10x64-iot.xml | 5 +++++ assets/win10x64-ltsc.xml | 5 +++++ assets/win10x64.xml | 5 +++++ assets/win11x64-enterprise-eval.xml | 7 ++++++- assets/win11x64.xml | 7 ++++++- assets/win2008r2.xml | 5 +++++ assets/win2012r2-eval.xml | 5 +++++ assets/win2016-eval.xml | 5 +++++ assets/win2019-eval.xml | 5 +++++ assets/win2022-eval.xml | 5 +++++ assets/win7x64.xml | 5 +++++ assets/win81x64-enterprise-eval.xml | 5 +++++ assets/win81x64.xml | 5 +++++ assets/winvistax64.xml | 5 +++++ 15 files changed, 77 insertions(+), 2 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 2e2330b..2baf281 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -397,6 +397,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 72d4a95..a76d2da 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -405,6 +405,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 88845ae..4fa9bbb 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -403,6 +403,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index a8e6911..620fad0 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -399,6 +399,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 476cde8..ef70a6a 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -417,11 +417,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 8f2809f..6f202fa 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -419,11 +419,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 1af605f..6c81a33 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -287,6 +287,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 14a9b79..1a8221a 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -326,6 +326,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 289f3f7..cabea4c 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -326,6 +326,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index ab4222f..981d099 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -330,6 +330,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 6b553b4..2273777 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -330,6 +330,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index 398116b..427ae56 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -290,6 +290,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index adc9fff..d8acc85 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -311,6 +311,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 8788142..2eb540a 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -320,6 +320,11 @@ <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index c15f547..22739a1 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -254,6 +254,11 @@ <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> From dc5dfb0bdb26d02ab37a8c540019aad0a20036fb Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 25 Apr 2024 00:49:16 +0200 Subject: [PATCH 161/505] feat: Hide suggested apps in start-menu (#415) --- assets/win10x64-enterprise-eval.xml | 24 ++++++++++++++++++++++-- assets/win10x64-iot.xml | 24 ++++++++++++++++++++++-- assets/win10x64-ltsc.xml | 24 ++++++++++++++++++++++-- assets/win10x64.xml | 24 ++++++++++++++++++++++-- assets/win11x64-enterprise-eval.xml | 24 ++++++++++++++++++++++-- assets/win11x64.xml | 24 ++++++++++++++++++++++-- 6 files changed, 132 insertions(+), 12 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 2baf281..0c7ddf6 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -259,11 +259,31 @@ </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>18</Order> - <Path>reg.exe unload "HKU\mount"</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>19</Order> - <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>23</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>24</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> </RunSynchronous> </component> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index a76d2da..539c831 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -267,11 +267,31 @@ </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>18</Order> - <Path>reg.exe unload "HKU\mount"</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>19</Order> - <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>23</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>24</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> </RunSynchronous> </component> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 4fa9bbb..3c13cbf 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -265,11 +265,31 @@ </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>18</Order> - <Path>reg.exe unload "HKU\mount"</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>19</Order> - <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>23</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>24</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> </RunSynchronous> </component> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 620fad0..9bd35ac 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -261,11 +261,31 @@ </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>18</Order> - <Path>reg.exe unload "HKU\mount"</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>19</Order> - <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>23</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>24</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> </RunSynchronous> </component> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index ef70a6a..4e3aa98 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -277,11 +277,31 @@ </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>18</Order> - <Path>reg.exe unload "HKU\mount"</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>19</Order> - <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>23</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>24</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> </RunSynchronous> </component> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 6f202fa..bfb610a 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -279,11 +279,31 @@ </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>18</Order> - <Path>reg.exe unload "HKU\mount"</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Order>19</Order> - <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>23</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>24</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> </RunSynchronous> </component> From ad1510b0b9a6ab76744bb245d37cead7c585f719 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 25 Apr 2024 12:26:37 +0200 Subject: [PATCH 162/505] feat: Optimize Windows settings (#418) --- assets/win10x64-enterprise-eval.xml | 45 ++++++++++++++++++++++++++ assets/win10x64-iot.xml | 45 ++++++++++++++++++++++++++ assets/win10x64-ltsc.xml | 45 ++++++++++++++++++++++++++ assets/win10x64.xml | 45 ++++++++++++++++++++++++++ assets/win11x64-enterprise-eval.xml | 49 +++++++++++++++++++++++++++-- assets/win11x64.xml | 49 +++++++++++++++++++++++++++-- assets/win2016-eval.xml | 45 ++++++++++++++++++++++++++ assets/win2019-eval.xml | 45 ++++++++++++++++++++++++++ assets/win2022-eval.xml | 45 ++++++++++++++++++++++++++ 9 files changed, 409 insertions(+), 4 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 0c7ddf6..e993ffb 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -422,6 +422,51 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana in search</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Widgets</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable search box in the taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 539c831..affc4bf 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -430,6 +430,51 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana in search</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Widgets</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable search box in the taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 3c13cbf..32a16ec 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -428,6 +428,51 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana in search</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Widgets</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable search box in the taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 9bd35ac..994b7b9 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -424,6 +424,51 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana in search</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Widgets</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable search box in the taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 4e3aa98..8489b8d 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -442,14 +442,59 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana in search</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Widgets</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable search box in the taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>25</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> - </SynchronousCommand> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index bfb610a..4d02972 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -444,14 +444,59 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana in search</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Widgets</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable search box in the taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>25</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> - </SynchronousCommand> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index cabea4c..4c5f0fa 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -331,6 +331,51 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana in search</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Widgets</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable search box in the taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 981d099..ac3d142 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -335,6 +335,51 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana in search</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Widgets</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable search box in the taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 2273777..0ed385c 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -335,6 +335,51 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana in search</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Widgets</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable search box in the taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> From 44a5fa3bf42ac3509aa57272cf12ab88f479af31 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Apr 2024 06:20:04 +0200 Subject: [PATCH 163/505] feat: Support ecryptfs filesystems (#422) --- .github/workflows/build.yml | 2 +- Dockerfile | 2 +- src/entry.sh | 2 +- src/mido.sh | 18 +++++++++--------- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a193a38..d437ad8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -74,7 +74,7 @@ jobs: context: . push: true provenance: false - platforms: linux/amd64,linux/arm64,linux/arm + platforms: linux/amd64,linux/arm64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} annotations: ${{ steps.meta.outputs.annotations }} diff --git a/Dockerfile b/Dockerfile index bfbed8f..c2035eb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.24 / / +COPY --from=qemux/qemu-docker:4.25 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/src/entry.sh b/src/entry.sh index 1e081eb..200c591 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -21,7 +21,7 @@ cd /run trap - ERR -info "Booting ${APP}${BOOT_DESC} on a ${CPU} using QEMU v${VERS} with kernel $(uname -r)..." +info "Booting ${APP}${BOOT_DESC}..." [[ "$DEBUG" == [Yy1]* ]] && echo "Arguments: $ARGS" && echo { qemu-system-x86_64 ${ARGS:+ $ARGS} >"$QEMU_OUT" 2>"$QEMU_LOG"; rc=$?; } || : diff --git a/src/mido.sh b/src/mido.sh index d52332b..642c7e9 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -200,7 +200,7 @@ handle_curl_error() { # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02 $((error_code <= 125))) # Must be some other server or network error (possibly with this specific request/file) - # This is when accounting for all possible errors in the curl manual assuming a correctly formed curl command and HTTP(S) request, using only the curl features we're using, and a sane build + # This is when accounting for all possible errors in the curl manual assuming a correctly formed curl command and an HTTP(S) request, using only the curl features we're using, and a sane build echo_err "Miscellaneous server or network error!" ;; 126 | 127) @@ -246,7 +246,7 @@ scurl_file() { handle_curl_error "$error_code" error_action=$? - # Clean up and make sure future resumes don't happen from bad download resume files + # Clean up and make sure a future resume doesn't happen from a bad download resume file if [ -f "$out_file" ]; then # If file is empty, bad HTTP code, or bad download resume file if [ ! -s "$out_file" ] || [ "$error_code" = 22 ] || [ "$error_code" = 36 ]; then @@ -374,13 +374,13 @@ consumer_download() { if ! [ "$iso_download_link_html" ]; then # This should only happen if there's been some change to how this API works - echo_err "Microsoft servers gave us an empty response to our request for an automated download. Please check the FAQ on how to boot from a local file and manually download this ISO in a web browser: $url" + echo_err "Microsoft servers gave us an empty response to our request for an automated download." manual_verification="true" return 1 fi if echo "$iso_download_link_html" | grep -q "We are unable to complete your request at this time."; then - echo_err "Microsoft blocked the automated download request based on your IP address. Please check the FAQ on how to boot from a local file and manually download this ISO in a web browser here: $url" + echo_err "Microsoft blocked the automated download request based on your IP address." manual_verification="true" return 1 fi @@ -392,12 +392,12 @@ consumer_download() { if ! [ "$iso_download_link" ]; then # This should only happen if there's been some change to the download endpoint web address - echo_err "Microsoft servers gave us no download link to our request for an automated download. Please check the FAQ on how to boot from a local file and manually download this ISO in a web browser: $url" + echo_err "Microsoft servers gave us no download link to our request for an automated download." manual_verification="true" return 1 fi - echo_ok "Got latest ISO download link (valid for 24 hours): $iso_download_link" + #echo_ok "Got latest ISO download link (valid for 24 hours): $iso_download_link" # Download ISO scurl_file "$out_file" "1.3" "$iso_download_link" @@ -458,7 +458,7 @@ enterprise_eval_download() { # Limit untrusted size for input validation iso_download_link="$(echo "$iso_download_link" | head -c 1024)" - echo_ok "Got latest ISO download link: $iso_download_link" + #echo_ok "Got latest ISO download link: $iso_download_link" # Use highest TLS version for endpoints that support it case "$iso_download_link" in @@ -675,7 +675,7 @@ ending_summary() { done # shellcheck disable=SC2086 - echo_err "$(word_count $media_download_failed_list) attempted download(s) failed! Please re-run Mido with these arguments to try downloading again (any partial downloads will be resumed):$media_download_failed_argument_list" + echo_err "Attempted download failed!" fi # Exit codes @@ -716,7 +716,7 @@ handle_exit() { if [ "$exit_code" != 0 ] || [ "$signal" ]; then echo "" >&2 - echo_err "Mido was exited abruptly! PARTially downloaded or UNVERIFIED Windows media may exist. Please re-run this Mido command and do not use the bad media." + echo_err "Mido was exited abruptly!" fi if [ "$exit_code" != 0 ]; then From 638e21d6b235f61088151e3936bda6fad2cf1d2a Mon Sep 17 00:00:00 2001 From: hellodword <46193371+hellodword@users.noreply.github.com> Date: Fri, 26 Apr 2024 05:23:40 +0000 Subject: [PATCH 164/505] fix: Enable Network Discovery by default (#420) (#421) --- assets/win10x64-enterprise-eval.xml | 5 +++++ assets/win10x64-iot.xml | 5 +++++ assets/win10x64-ltsc.xml | 5 +++++ assets/win10x64.xml | 5 +++++ assets/win11x64-enterprise-eval.xml | 7 ++++++- assets/win11x64.xml | 7 ++++++- assets/win2016-eval.xml | 5 +++++ assets/win2019-eval.xml | 5 +++++ assets/win2022-eval.xml | 5 +++++ assets/win7x64.xml | 5 +++++ assets/win81x64-enterprise-eval.xml | 5 +++++ assets/win81x64.xml | 5 +++++ 12 files changed, 62 insertions(+), 2 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index e993ffb..93fece2 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -467,6 +467,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index affc4bf..f72d635 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -475,6 +475,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 32a16ec..666a688 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -473,6 +473,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 994b7b9..11b4fd8 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -469,6 +469,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 8489b8d..06492db 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -487,11 +487,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>25</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 4d02972..a5e3405 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -489,11 +489,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>25</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 4c5f0fa..06de1d4 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -376,6 +376,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index ac3d142..6310b44 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -380,6 +380,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 0ed385c..a0408cf 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -380,6 +380,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index 427ae56..a6888ab 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -295,6 +295,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index d8acc85..26c4ceb 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -316,6 +316,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 2eb540a..a9e33b5 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -325,6 +325,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery and File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> From fddd5034049a33c5095e642133174371db731b03 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:18:50 +0200 Subject: [PATCH 165/505] docs: Custom XML instructions (#424) --- readme.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 520d897..ed5a62e 100644 --- a/readme.md +++ b/readme.md @@ -150,7 +150,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ * ### How do I install a custom image? - In order to download a custom ISO image, start a clean container with the URL of the ISO specified in the `VERSION` environment variable: + In order to download a custom ISO image, start a fresh container with the URL of the ISO specified in the `VERSION` environment variable: ```yaml environment: @@ -166,11 +166,24 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ Replace the example path `/home/user/example.iso` with the filename of the desired ISO file. +* ### How do I customize the installation? + + You can customize any part of the automatic installation, and even execute certain commands at boot if needed. + + Download the XML file corresponding to your Windows version, for example [win11x64.xml](https://raw.githubusercontent.com/dockur/windows/master/assets/win11x64.xml). Then apply your modifications to it, and add this line to your compose file: + + ```yaml + volumes: + - /home/user/custom.xml:/run/assets/win11x64.xml + ``` + + Replace the example path `/home/user/custom.xml` with the filename of the modified XML file. + * ### How do I perform a manual installation? - It's best to use the automatic installation, as it optimizes various settings for use with this container. + It's best to use the automatic installation, as it optimizes various settings for use with this container. These tweaks will give you maximum performance and prevent common issues. - However, if you insist on performing the installation manually, start a clean container with the following environment variable: + However, if you insist on performing the installation manually, start a fresh container with the following environment variable: ```yaml environment: From 1def1a305b7244075ad28a19ea0b555acf160409 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Apr 2024 16:00:46 +0200 Subject: [PATCH 166/505] feat: Enable file sharing by default (#425) --- assets/win10x64-enterprise-eval.xml | 32 ++++++++--------------- assets/win10x64-iot.xml | 32 ++++++++--------------- assets/win10x64-ltsc.xml | 32 ++++++++--------------- assets/win10x64.xml | 32 ++++++++--------------- assets/win11x64-enterprise-eval.xml | 39 +++++++++-------------------- assets/win11x64.xml | 39 +++++++++-------------------- assets/win2008r2.xml | 10 ++++++++ assets/win2012r2-eval.xml | 10 ++++++++ assets/win2016-eval.xml | 32 ++++++++--------------- assets/win2019-eval.xml | 32 ++++++++--------------- assets/win2022-eval.xml | 32 ++++++++--------------- assets/win7x64.xml | 7 +++++- assets/win81x64-enterprise-eval.xml | 7 +++++- assets/win81x64.xml | 7 +++++- 14 files changed, 139 insertions(+), 204 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 93fece2..19224d9 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -429,48 +429,38 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana in search</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Widgets</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable search box in the taskbar</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index f72d635..66d69a9 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -437,48 +437,38 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana in search</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Widgets</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable search box in the taskbar</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 666a688..6c8836d 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -435,48 +435,38 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana in search</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Widgets</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable search box in the taskbar</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 11b4fd8..7af05c5 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -431,48 +431,38 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana in search</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Widgets</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable search box in the taskbar</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 06492db..0df076d 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -447,56 +447,41 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana in search</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Remove Search from the Taskbar</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Widgets</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable search box in the taskbar</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index a5e3405..05d8118 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -449,56 +449,41 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana in search</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Remove Search from the Taskbar</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Widgets</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable search box in the taskbar</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 6c81a33..0a4f267 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -292,6 +292,16 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 1a8221a..5d5df8d 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -331,6 +331,16 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 06de1d4..6be15ac 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -338,48 +338,38 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana in search</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Widgets</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable search box in the taskbar</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 6310b44..831d1d1 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -342,48 +342,38 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana in search</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Widgets</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable search box in the taskbar</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index a0408cf..afeda33 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -342,48 +342,38 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "AllowCortana" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana in search</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Widgets</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> - <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search" /v "SearchOnTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable search box in the taskbar</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index a6888ab..944c520 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -298,7 +298,12 @@ <SynchronousCommand wcm:action="add"> <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 26c4ceb..76ba9bb 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -319,7 +319,12 @@ <SynchronousCommand wcm:action="add"> <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> </SynchronousCommand> </FirstLogonCommands> </component> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index a9e33b5..3ac7963 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -328,7 +328,12 @@ <SynchronousCommand wcm:action="add"> <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> - <Description>Enable Network Discovery and File Sharing</Description> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> </SynchronousCommand> </FirstLogonCommands> </component> From 9b35c0e3a5d8a6b1df8c551cecf263225836be13 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 26 Apr 2024 16:49:21 +0200 Subject: [PATCH 167/505] docs: Update issue templates (#427) --- .github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml | 7 +++++++ .github/ISSUE_TEMPLATE/QUESTION.yml | 5 +++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml index eb95b34..2e9c7e8 100644 --- a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml @@ -3,6 +3,13 @@ description: Suggest an idea for improving the container title: "[Feature]: " labels: ["enhancement"] body: + - type: checkboxes + attributes: + label: Is there an existing feature request for this? + description: Please search to see if the feature request already exists. + options: + - label: I have searched the existing feature requests + required: true - type: textarea id: problem attributes: diff --git a/.github/ISSUE_TEMPLATE/QUESTION.yml b/.github/ISSUE_TEMPLATE/QUESTION.yml index ceefd41..4308c8a 100644 --- a/.github/ISSUE_TEMPLATE/QUESTION.yml +++ b/.github/ISSUE_TEMPLATE/QUESTION.yml @@ -6,8 +6,9 @@ body: - type: markdown attributes: value: | - Have a question about Windows for Docker? - Please make sure to check the [FAQ](https://github.com/dockur/windows/blob/master/readme.md) first! + Have a general question about Windows for Docker? + Please do not use this form for technical issues. + And make sure to check the [FAQ](https://github.com/dockur/windows/blob/master/readme.md) first! - type: textarea id: question attributes: From 80ae80ae10a63bbf5b1b0918d0cab666ff88f78b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Apr 2024 12:05:28 +0200 Subject: [PATCH 168/505] fix: Support read-only images (#432) --- .github/ISSUE_TEMPLATE/QUESTION.yml | 4 +--- src/power.sh | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/QUESTION.yml b/.github/ISSUE_TEMPLATE/QUESTION.yml index 4308c8a..a768f93 100644 --- a/.github/ISSUE_TEMPLATE/QUESTION.yml +++ b/.github/ISSUE_TEMPLATE/QUESTION.yml @@ -6,9 +6,7 @@ body: - type: markdown attributes: value: | - Have a general question about Windows for Docker? - Please do not use this form for technical issues. - And make sure to check the [FAQ](https://github.com/dockur/windows/blob/master/readme.md) first! + Please do not use this form for technical issues, and make sure to check the [FAQ](https://github.com/dockur/windows/blob/master/readme.md) first! - type: textarea id: question attributes: diff --git a/src/power.sh b/src/power.sh index cc28f8d..70e4bbf 100644 --- a/src/power.sh +++ b/src/power.sh @@ -6,13 +6,14 @@ set -Eeuo pipefail QEMU_TERM="" QEMU_PORT=7100 QEMU_TIMEOUT=110 -QEMU_PID="/run/shm/qemu.pid" -QEMU_PTY="/run/shm/qemu.pty" -QEMU_LOG="/run/shm/qemu.log" -QEMU_OUT="/run/shm/qemu.out" -QEMU_END="/run/shm/qemu.end" +QEMU_DIR="/run/shm" +QEMU_PID="$QEMU_DIR/qemu.pid" +QEMU_PTY="$QEMU_DIR/qemu.pty" +QEMU_LOG="$QEMU_DIR/qemu.log" +QEMU_OUT="$QEMU_DIR/qemu.out" +QEMU_END="$QEMU_DIR/qemu.end" -rm -f /run/shm/qemu.* +rm -f "$QEMU_DIR/qemu.*" touch "$QEMU_LOG" _trap() { @@ -68,8 +69,9 @@ finish() { if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$STORAGE/$BASE" ]; then # Remove CD-ROM ISO after install if ready; then - rm -f "$STORAGE/$BASE" - touch "$STORAGE/windows.boot" + if rm -f "$STORAGE/$BASE" 2>/dev/null; then + touch "$STORAGE/windows.boot" + fi fi fi From 3390ef810161fdc8d6cc89990080aea8309b560e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 27 Apr 2024 18:46:09 +0200 Subject: [PATCH 169/505] feat: Disable S3 and S4 standby modes (#434) --- Dockerfile | 2 +- readme.md | 2 +- src/install.sh | 41 ++++++++++++++++++++++++++--------------- src/power.sh | 2 +- src/samba.sh | 32 ++++++++++++++++++-------------- 5 files changed, 47 insertions(+), 32 deletions(-) diff --git a/Dockerfile b/Dockerfile index c2035eb..a0e982d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.25 / / +COPY --from=qemux/qemu-docker:4.26 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/readme.md b/readme.md index ed5a62e..1e4c45d 100644 --- a/readme.md +++ b/readme.md @@ -164,7 +164,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ - /home/user/example.iso:/storage/custom.iso ``` - Replace the example path `/home/user/example.iso` with the filename of the desired ISO file. + Replace the example path `/home/user/example.iso` with the filename of the desired ISO file. The value of `VERSION` will be ignored in this case. * ### How do I customize the installation? diff --git a/src/install.sh b/src/install.sh index 7ecbb86..417e4ef 100644 --- a/src/install.sh +++ b/src/install.sh @@ -275,20 +275,25 @@ finishInstall() { fi fi + rm -f "$STORAGE/windows.ver" + rm -f "$STORAGE/windows.old" rm -f "$STORAGE/windows.boot" + rm -f "$STORAGE/windows.mode" + cp /run/version "$STORAGE/windows.ver" if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then - echo "$MACHINE" > "$STORAGE/windows.old" + if [[ "${MACHINE,,}" != "q35" ]]; then + echo "$MACHINE" > "$STORAGE/windows.old" + fi + echo "$BOOT_MODE" > "$STORAGE/windows.mode" else - rm -f "$STORAGE/windows.old" - fi - - # 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" + # 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" + fi fi fi @@ -1151,16 +1156,22 @@ buildImage() { bootWindows() { - if [ -f "$STORAGE/windows.old" ]; then - MACHINE=$(<"$STORAGE/windows.old") - [ -z "$MACHINE" ] && MACHINE="q35" - BOOT_MODE="windows_legacy" + if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then + BOOT_MODE=$(<"$STORAGE/windows.mode") + if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then + MACHINE=$(<"$STORAGE/windows.old") + fi rm -rf "$TMP" return 0 fi - if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then - BOOT_MODE=$(<"$STORAGE/windows.mode") + # Migrations + + if [ -f "$STORAGE/windows.old" ]; then + MACHINE=$(<"$STORAGE/windows.old") + [ -z "$MACHINE" ] && MACHINE="q35" + BOOT_MODE="windows_legacy" + echo "$BOOT_MODE" > "$STORAGE/windows.mode" rm -rf "$TMP" return 0 fi diff --git a/src/power.sh b/src/power.sh index 70e4bbf..7326f86 100644 --- a/src/power.sh +++ b/src/power.sh @@ -28,7 +28,7 @@ ready() { [ -f "$STORAGE/windows.boot" ] && return 0 [ ! -s "$QEMU_PTY" ] && return 1 - if [ -f "$STORAGE/windows.old" ]; then + if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then local last local bios="Booting from Hard" last=$(grep "^Booting.*" "$QEMU_PTY" | tail -1) diff --git a/src/samba.sh b/src/samba.sh index eb262af..7544fc6 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -3,22 +3,27 @@ set -Eeuo pipefail : "${SAMBA:="Y"}" -[[ "$DHCP" == [Yy1]* ]] && return 0 [[ "$SAMBA" != [Yy1]* ]] && return 0 [[ "$NETWORK" != [Yy1]* ]] && return 0 -SHARE="$STORAGE/shared" +hostname="host.lan" +interface="dockerbridge" -mkdir -p "$SHARE" -chmod -R 777 "$SHARE" +if [[ "$DHCP" == [Yy1]* ]]; then + hostname="$IP" + interface="$VM_NET_DEV" +fi -SAMBA="/etc/samba/smb.conf" +share="$STORAGE/shared" + +mkdir -p "$share" +[ -z "$(ls -A "$share")" ] && chmod -R 777 "$share" { echo "[global]" echo " server string = Dockur" - echo " netbios name = dockur" + echo " netbios name = $hostname" echo " workgroup = WORKGROUP" - echo " interfaces = dockerbridge" + echo " interfaces = $interface" echo " bind interfaces only = yes" echo " security = user" echo " guest account = nobody" @@ -32,14 +37,14 @@ SAMBA="/etc/samba/smb.conf" echo " disable spoolss = yes" echo "" echo "[Data]" - echo " path = $SHARE" + echo " path = $share" echo " comment = Shared" echo " writable = yes" echo " guest ok = yes" echo " guest only = yes" echo " force user = root" echo " force group = root" -} > "$SAMBA" +} > "/etc/samba/smb.conf" { echo "--------------------------------------------------------" echo " $APP for Docker v$(</run/version)..." @@ -59,7 +64,7 @@ SAMBA="/etc/samba/smb.conf" echo "" echo "Replace the example path /home/user/example with the desired storage folder." echo "" -} | unix2dos > "$SHARE/readme.txt" +} | unix2dos > "$share/readme.txt" ! smbd && smbd --debug-stdout @@ -67,17 +72,16 @@ isXP="N" if [ -f "$STORAGE/windows.old" ]; then MT=$(<"$STORAGE/windows.old") - if [[ "${MT,,}" == "pc-q35-2"* ]]; then - isXP="Y" - fi + [[ "${MT,,}" == "pc-q35-2"* ]] && isXP="Y" fi if [[ "$isXP" == [Yy1]* ]]; then + [[ "$DHCP" == [Yy1]* ]] && return 0 # Enable NetBIOS on Windows XP ! nmbd && nmbd --debug-stdout else # Enable Web Service Discovery - wsdd -i dockerbridge -p -n "host.lan" & + wsdd -i "$interface" -p -n "$hostname" & fi return 0 From 02c95fb960ea372d57627bb5eb8b0761b48c24a6 Mon Sep 17 00:00:00 2001 From: hellodword <46193371+hellodword@users.noreply.github.com> Date: Sun, 28 Apr 2024 11:03:37 +0000 Subject: [PATCH 170/505] feat: Automatically execute script after installation (#423) --- assets/win10x64-enterprise-eval.xml | 5 +++++ assets/win10x64-iot.xml | 5 +++++ assets/win10x64-ltsc.xml | 5 +++++ assets/win10x64.xml | 5 +++++ assets/win11x64-enterprise-eval.xml | 5 +++++ assets/win11x64.xml | 5 +++++ assets/win2008r2.xml | 5 +++++ assets/win2012r2-eval.xml | 5 +++++ assets/win2016-eval.xml | 5 +++++ assets/win2019-eval.xml | 5 +++++ assets/win2022-eval.xml | 5 +++++ assets/win7x64.xml | 5 +++++ assets/win81x64-enterprise-eval.xml | 5 +++++ assets/win81x64.xml | 5 +++++ assets/winvistax64.xml | 5 +++++ readme.md | 15 ++++++++++--- src/install.sh | 33 +++++++++++++++++++++++++++++ 17 files changed, 120 insertions(+), 3 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 19224d9..80183d9 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -462,6 +462,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 66d69a9..27b5ca1 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -470,6 +470,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 6c8836d..74417a4 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -468,6 +468,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 7af05c5..4dacfab 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -464,6 +464,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 0df076d..987e2d4 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -485,6 +485,11 @@ <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 05d8118..e773e54 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -487,6 +487,11 @@ <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 0a4f267..4903645 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -302,6 +302,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 5d5df8d..00a5e3c 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -341,6 +341,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 6be15ac..981b766 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -371,6 +371,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 831d1d1..2f9b304 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -375,6 +375,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index afeda33..badd14c 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -375,6 +375,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index 944c520..e0ae7e0 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -305,6 +305,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 76ba9bb..b6c9e95 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -326,6 +326,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 3ac7963..19ea568 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -335,6 +335,11 @@ <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index 22739a1..b613f6f 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -259,6 +259,11 @@ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> </FirstLogonCommands> </component> </settings> diff --git a/readme.md b/readme.md index 1e4c45d..b12e1de 100644 --- a/readme.md +++ b/readme.md @@ -168,9 +168,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ * ### How do I customize the installation? - You can customize any part of the automatic installation, and even execute certain commands at boot if needed. - - Download the XML file corresponding to your Windows version, for example [win11x64.xml](https://raw.githubusercontent.com/dockur/windows/master/assets/win11x64.xml). Then apply your modifications to it, and add this line to your compose file: + You can customize every setting used by the automatic installation. Download the XML file corresponding to your Windows version, for example [win11x64.xml](https://raw.githubusercontent.com/dockur/windows/master/assets/win11x64.xml). Then apply your modifications to it, and add this line to your compose file: ```yaml volumes: @@ -179,6 +177,17 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ Replace the example path `/home/user/custom.xml` with the filename of the modified XML file. +* ### How do I run a script after installation? + + To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with other files it needs (programs to install for example). Then bind it in your compose file like this: + + ```yaml + volumes: + - /home/user/example:/storage/oem + ``` + + The example path `/home/user/example` will be copied to `C:\OEM` during installation and the containing `install.bat` will be executed. + * ### How do I perform a manual installation? It's best to use the automatic installation, as it optimizes various settings for use with this container. These tweaks will give you maximum performance and prevent common issues. diff --git a/src/install.sh b/src/install.sh index 417e4ef..dcf0a82 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1082,6 +1082,35 @@ updateImage() { return 0 } +copyOEM() { + local dir="$1" + local folder="$STORAGE/oem" + local src + + [ ! -d "$folder" ] && folder="$STORAGE/OEM" + [ ! -d "$folder" ] && folder="$STORAGE/shared/oem" + [ ! -d "$folder" ] && folder="$STORAGE/shared/OEM" + [ ! -d "$folder" ] && return 0 + + local msg="Copying OEM folder to image..." + info "$msg" && html "$msg" + + src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) + + if [ ! -d "$src" ]; then + error "failed to locate 'sources' folder in ISO image!" && return 1 + fi + + local dest="$src/\$OEM\$/\$1/" + mkdir -p "$dest" + + if ! cp -r "$folder" "$dest"; then + error "Failed to copy OEM folder!" && return 1 + fi + + return 0 +} + buildImage() { local dir="$1" @@ -1242,6 +1271,10 @@ if ! rm -f "$ISO" 2> /dev/null; then rm -f "$ISO" fi +if ! copyOEM "$DIR"; then + exit 63 +fi + if ! buildImage "$DIR"; then exit 65 fi From 8be14ec466a414e6e8ab39d985d7eb86bd3e5b5e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 30 Apr 2024 22:57:44 +0200 Subject: [PATCH 171/505] feat: Added editions and mirrors (#439) --- Dockerfile | 2 +- assets/win10x64-enterprise-eval.xml | 1 - assets/win10x64-enterprise.xml | 475 ++++++++++++++++++ assets/win10x64-ltsc.xml | 1 - assets/win11x64-enterprise-eval.xml | 1 - assets/win11x64-enterprise.xml | 498 +++++++++++++++++++ assets/win2008r2-eval.xml | 312 ++++++++++++ assets/win2008r2.xml | 4 +- assets/win2012r2-eval.xml | 1 - assets/win2012r2.xml | 354 ++++++++++++++ assets/win2016-eval.xml | 1 - assets/win2016.xml | 384 +++++++++++++++ assets/win2019-eval.xml | 1 - assets/win2019.xml | 388 +++++++++++++++ assets/win2022-eval.xml | 1 - assets/win2022.xml | 388 +++++++++++++++ assets/win7x64-enterprise.xml | 316 ++++++++++++ assets/win7x64-ultimate.xml | 316 ++++++++++++ assets/win81x64-enterprise-eval.xml | 1 - assets/win81x64-enterprise.xml | 339 +++++++++++++ assets/winvistax64-enterprise.xml | 270 +++++++++++ assets/winvistax64-ultimate.xml | 270 +++++++++++ readme.md | 41 +- src/define.sh | 716 ++++++++++++++++++++++++++++ src/entry.sh | 3 +- src/install.sh | 702 +++++++-------------------- src/mido.sh | 3 - src/power.sh | 15 + 28 files changed, 5231 insertions(+), 573 deletions(-) create mode 100644 assets/win10x64-enterprise.xml create mode 100644 assets/win11x64-enterprise.xml create mode 100644 assets/win2008r2-eval.xml create mode 100644 assets/win2012r2.xml create mode 100644 assets/win2016.xml create mode 100644 assets/win2019.xml create mode 100644 assets/win2022.xml create mode 100644 assets/win7x64-enterprise.xml create mode 100644 assets/win7x64-ultimate.xml create mode 100644 assets/win81x64-enterprise.xml create mode 100644 assets/winvistax64-enterprise.xml create mode 100644 assets/winvistax64-ultimate.xml create mode 100644 src/define.sh diff --git a/Dockerfile b/Dockerfile index a0e982d..5334813 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.26 / / +COPY --from=qemux/qemu-docker:4.27 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 80183d9..5d282e4 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -80,7 +80,6 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey /> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml new file mode 100644 index 0000000..8365f38 --- /dev/null +++ b/assets/win10x64-enterprise.xml @@ -0,0 +1,475 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>NPPR9-FWDCX-D2C8J-H872K-2YT43</Key> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\w10\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>5</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>6</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>7</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>8</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>9</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>10</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>11</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>12</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>13</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>14</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>15</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>16</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>17</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>18</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>19</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>23</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>24</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="auditSystem" /> + <settings pass="auditUser" /> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 74417a4..787f8e7 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -86,7 +86,6 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey /> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 987e2d4..f696049 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -80,7 +80,6 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey /> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml new file mode 100644 index 0000000..37722de --- /dev/null +++ b/assets/win11x64-enterprise.xml @@ -0,0 +1,498 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>NPPR9-FWDCX-D2C8J-H872K-2YT43</Key> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\MoSetup" /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\w11\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\w11\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>5</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>6</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>7</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>8</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>9</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>10</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>11</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>12</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>13</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>14</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>15</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>16</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>17</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>18</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>19</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>23</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>24</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="auditSystem" /> + <settings pass="auditUser" /> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml new file mode 100644 index 0000000..4f69250 --- /dev/null +++ b/assets/win2008r2-eval.xml @@ -0,0 +1,312 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + <TypeID>0x27</TypeID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>1</Value> + <Key>/IMAGE/INDEX</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\2k8R2\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\2k8R2\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 4903645..18bf9f3 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -75,7 +75,9 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey /> + <ProductKey> + <Key>YC6KT-GKW9T-YTKYR-T4X34-R7VHC</Key> + </ProductKey> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 00a5e3c..2e1747d 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -88,7 +88,6 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey /> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml new file mode 100644 index 0000000..58c1c80 --- /dev/null +++ b/assets/win2012r2.xml @@ -0,0 +1,354 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/image/index</Key> + <Value>2</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>D2N9P-3P6X9-2R39C-7RTCD-MDVJX</Key> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\2k16\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 981b766..78f4329 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -88,7 +88,6 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey /> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/assets/win2016.xml b/assets/win2016.xml new file mode 100644 index 0000000..db440a8 --- /dev/null +++ b/assets/win2016.xml @@ -0,0 +1,384 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Windows Server 2016 SERVERSTANDARD</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY</Key> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\2k16\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\2k16\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 2f9b304..0baa0b7 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -88,7 +88,6 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey /> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/assets/win2019.xml b/assets/win2019.xml new file mode 100644 index 0000000..76d2a73 --- /dev/null +++ b/assets/win2019.xml @@ -0,0 +1,388 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Windows Server 2019 SERVERSTANDARD</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>N69G4-B89J2-4G8F4-WWYCC-J464C</Key> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\2k19\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\2k19\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index badd14c..0e88e0a 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -88,7 +88,6 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey /> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/assets/win2022.xml b/assets/win2022.xml new file mode 100644 index 0000000..f844cf6 --- /dev/null +++ b/assets/win2022.xml @@ -0,0 +1,388 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Windows Server 2022 SERVERSTANDARD</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>VDYBN-27WPP-V4HQT-9VMD4-VMK7H</Key> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\2k22\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\2k22\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Cortana</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml new file mode 100644 index 0000000..6934dd5 --- /dev/null +++ b/assets/win7x64-enterprise.xml @@ -0,0 +1,316 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + <TypeID>0x27</TypeID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows 7 Enterprise</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>H7X92-3VPBB-Q799D-Y6JJ3-86WC6</Key> + <WillShowUI>OnError</WillShowUI> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w8\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w7\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml new file mode 100644 index 0000000..6e6e36c --- /dev/null +++ b/assets/win7x64-ultimate.xml @@ -0,0 +1,316 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + <TypeID>0x27</TypeID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows 7 Ultimate</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>D4F6K-QK3RD-TMVMJ-BBMRX-3MBMV</Key> + <WillShowUI>OnError</WillShowUI> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w8\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w7\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w7\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index b6c9e95..99f9ed3 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -80,7 +80,6 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> - <ProductKey /> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml new file mode 100644 index 0000000..b43038e --- /dev/null +++ b/assets/win81x64-enterprise.xml @@ -0,0 +1,339 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>FHQNR-XYXYC-8PMHT-TV4PH-DRQ3H</Key> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="11"> + <Path>D:\viogpudo\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="12"> + <Path>D:\sriov\w10\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="13"> + <Path>D:\viofs\w10\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml new file mode 100644 index 0000000..8d64187 --- /dev/null +++ b/assets/winvistax64-enterprise.xml @@ -0,0 +1,270 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows Vista Enterprise</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>VKK3X-68KWM-X2YGT-QR4M6-4BWMV</Key> + </ProductKey> + </UserData> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k8\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k8\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\vioscsi\2k8\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-Licensing-SLC" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-Licensing-SLC-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <ProductKey>VKK3X-68KWM-X2YGT-QR4M6-4BWMV</ProductKey> + <TimeZone>Pacific Standard Time</TimeZone> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <Home_Page>about:blank</Home_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>false</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> + <Description>Disable firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable RDP</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off sidebar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml new file mode 100644 index 0000000..b613f6f --- /dev/null +++ b/assets/winvistax64-ultimate.xml @@ -0,0 +1,270 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows Vista Ultimate</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>VMCB9-FDRV6-6CDQM-RV23K-RP8F7</Key> + </ProductKey> + </UserData> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k8\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k8\amd64</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\vioscsi\2k8\amd64</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-Licensing-SLC" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-Licensing-SLC-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <ProductKey>VMCB9-FDRV6-6CDQM-RV23K-RP8F7</ProductKey> + <TimeZone>Pacific Standard Time</TimeZone> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <Home_Page>about:blank</Home_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>false</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> + <Description>Disable firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable RDP</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off sidebar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/readme.md b/readme.md index b12e1de..6205235 100644 --- a/readme.md +++ b/readme.md @@ -78,25 +78,28 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ Select from the values below: - | **Value** | **Description** | **Source** | **Transfer** | **Size** | - |---|---|---|---|---| - | `win11` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | - | `win10` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | - | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | - | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | - | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | - | `vista` | Windows Vista SP2 | Bob Pony | Medium | 3.6 GB | - | `winxp` | Windows XP SP3 | Bob Pony | Medium | 0.6 GB | - |||||| - | `2022` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | - | `2019` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | - | `2016` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | - | `2012` | Windows Server 2012 R2 | Microsoft | Fast | 4.3 GB | - | `2008` | Windows Server 2008 R2 | Microsoft | Fast | 3.0 GB | - |||||| - | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | - | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | - | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | + | **Value** | **Version** | **Edition** | **Size** | + |---|---|---|---| + | `win11` | Windows 11 | Pro | 6.4 GB | + | `win11e` | Windows 11 | Enterprise | 5.8 GB | + | `win10` | Windows 10 | Pro | 5.8 GB | + | `ltsc10` | Windows 10 | LTSC | 4.6 GB | + | `win10e` | Windows 10 | Enterprise | 5.2 GB | + | `win81` | Windows 8.1 | Pro | 4.2 GB | + | `win81e` | Windows 8.1 | Enterprise | 3.8 GB | + | `win7` | Windows 7 | Enterprise | 3.0 GB | + | `vista` | Windows Vista | Ultimate | 3.6 GB | + | `winxp` | Windows XP | Pro | 0.6 GB | + ||||| + | `2022` | Windows Server 2022 | Standard | 4.7 GB | + | `2019` | Windows Server 2019 | Standard | 5.3 GB | + | `2016` | Windows Server 2016 | Standard | 6.5 GB | + | `2012` | Windows Server 2012 | Standard | 4.3 GB | + | `2008` | Windows Server 2008 | Standard | 3.0 GB | + ||||| + | `core11` | Tiny 11 | Core | 2.1 GB | + | `tiny11` | Tiny 11 | 2311 | 3.8 GB | + | `tiny10` | Tiny 10 | 23H2 | 3.6 GB | To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). diff --git a/src/define.sh b/src/define.sh new file mode 100644 index 0000000..518e405 --- /dev/null +++ b/src/define.sh @@ -0,0 +1,716 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +: "${MANUAL:=""}" +: "${VERSION:=""}" +: "${DETECTED:=""}" +: "${PLATFORM:="x64"}" + +parseVersion() { + + [ -z "$VERSION" ] && VERSION="win11" + + if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then + VERSION="${VERSION:1:-1}" + fi + + case "${VERSION,,}" in + "11" | "win11" | "windows11" | "windows 11") + VERSION="win11${PLATFORM,,}" + ;; + "11e" | "win11e" | "windows11e" | "windows 11e") + VERSION="win11${PLATFORM,,}-enterprise-eval" + ;; + "10" | "win10" | "windows10" | "windows 10") + VERSION="win10${PLATFORM,,}" + ;; + "10e" | "win10e" | "windows10e" | "windows 10e") + VERSION="win10${PLATFORM,,}-enterprise-eval" + ;; + "8" | "81" | "8.1" | "win8" | "win81" | "windows 8" | "windows 8.1") + VERSION="win81${PLATFORM,,}" + ;; + "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows8e" | "windows 8e") + VERSION="win81${PLATFORM,,}-enterprise-eval" + ;; + "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7") + VERSION="win7${PLATFORM,,}" + DETECTED="win7${PLATFORM,,}-enterprise" + ;; + "vista" | "winvista" | "windowsvista" | "windows vista") + VERSION="winvista${PLATFORM,,}" + DETECTED="winvista${PLATFORM,,}-ultimate" + ;; + "xp" | "winxp" | "windowsxp" | "windows xp") + VERSION="winxpx86" + ;; + "xp64" | "winxp64" | "windowsxp64") + VERSION="winxpx64" + ;; + "22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022") + VERSION="win2022-eval" + ;; + "19" | "2019" | "win19" | "win2019" | "windows2019" | "windows 2019") + VERSION="win2019-eval" + ;; + "16" | "2016" | "win16" | "win2016" | "windows2016" | "windows 2016") + VERSION="win2016-eval" + ;; + "2012" | "2012r2" | "win2012" | "win2012r2" | "windows2012" | "windows 2012") + VERSION="win2012r2-eval" + ;; + "2008" | "2008r2" | "win2008" | "win2008r2" | "windows2008" | "windows 2008") + VERSION="win2008r2" + ;; + "core11" | "core 11" | "tiny11" | "tiny 11") + DETECTED="win11${PLATFORM,,}" + ;; + "tiny10" | "tiny 10") + DETECTED="win10${PLATFORM,,}-ltsc" + ;; + "iot10" | "10iot" | "win10-iot" | "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval") + DETECTED="win10${PLATFORM,,}-iot" + VERSION="win10${PLATFORM,,}-enterprise-iot-eval" + ;; + "ltsc10" | "10ltsc" | "win10-ltsc" | "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval") + DETECTED="win10${PLATFORM,,}-ltsc" + VERSION="win10${PLATFORM,,}-enterprise-ltsc-eval" + ;; + esac + + return 0 +} + +printVersion() { + + local id="$1" + local desc="$2" + + [[ "$id" == "win7"* ]] && desc="Windows 7" + [[ "$id" == "win8"* ]] && desc="Windows 8" + [[ "$id" == "win10"* ]] && desc="Windows 10" + [[ "$id" == "win11"* ]] && desc="Windows 11" + [[ "$id" == "winxp"* ]] && desc="Windows XP" + [[ "$id" == "winvista"* ]] && desc="Windows Vista" + + [[ "$id" == "win2025"* ]] && desc="Windows Server 2025" + [[ "$id" == "win2022"* ]] && desc="Windows Server 2022" + [[ "$id" == "win2019"* ]] && desc="Windows Server 2019" + [[ "$id" == "win2016"* ]] && desc="Windows Server 2016" + [[ "$id" == "win2012"* ]] && desc="Windows Server 2012" + [[ "$id" == "win2008"* ]] && desc="Windows Server 2008" + + [ -z "$desc" ] && desc="Windows" + + echo "$desc" + return 0 +} + +getName() { + + local file="$1" + local desc="$2" + + [[ "${file,,}" == "win11"* ]] && desc="Windows 11" + [[ "${file,,}" == "win10"* ]] && desc="Windows 10" + [[ "${file,,}" == "win8"* ]] && desc="Windows 8" + [[ "${file,,}" == "win7"* ]] && desc="Windows 7" + [[ "${file,,}" == "winxp"* ]] && desc="Windows XP" + [[ "${file,,}" == "winvista"* ]] && desc="Windows Vista" + [[ "${file,,}" == "tiny10"* ]] && desc="Tiny 10" + [[ "${file,,}" == "tiny11"* ]] && desc="Tiny 11" + [[ "${file,,}" == "tiny11_core"* ]] && desc="Tiny 11 Core" + [[ "${file,,}" == *"windows11"* ]] && desc="Windows 11" + [[ "${file,,}" == *"windows10"* ]] && desc="Windows 10" + [[ "${file,,}" == *"windows8"* ]] && desc="Windows 8" + [[ "${file,,}" == *"windows7"* ]] && desc="Windows 7" + [[ "${file,,}" == *"windowsxp"* ]] && desc="Windows XP" + [[ "${file,,}" == *"windowsvista"* ]] && desc="Windows Vista" + [[ "${file,,}" == *"windows_11"* ]] && desc="Windows 11" + [[ "${file,,}" == *"windows_10"* ]] && desc="Windows 10" + [[ "${file,,}" == *"windows_8"* ]] && desc="Windows 8" + [[ "${file,,}" == *"windows_7"* ]] && desc="Windows 7" + [[ "${file,,}" == *"windows_xp"* ]] && desc="Windows XP" + [[ "${file,,}" == *"windows_vista"* ]] && desc="Windows Vista" + [[ "${file,,}" == *"windows 11"* ]] && desc="Windows 11" + [[ "${file,,}" == *"windows 10"* ]] && desc="Windows 10" + [[ "${file,,}" == *"windows 8"* ]] && desc="Windows 8" + [[ "${file,,}" == *"windows 7"* ]] && desc="Windows 7" + [[ "${file,,}" == *"windows xp"* ]] && desc="Windows XP" + [[ "${file,,}" == *"windows vista"* ]] && desc="Windows Vista" + [[ "${file,,}" == *"server2008"* ]] && desc="Windows Server 2008" + [[ "${file,,}" == *"server2012"* ]] && desc="Windows Server 2012" + [[ "${file,,}" == *"server2016"* ]] && desc="Windows Server 2016" + [[ "${file,,}" == *"server2019"* ]] && desc="Windows Server 2019" + [[ "${file,,}" == *"server2022"* ]] && desc="Windows Server 2022" + [[ "${file,,}" == *"server2025"* ]] && desc="Windows Server 2025" + [[ "${file,,}" == *"server_2008"* ]] && desc="Windows Server 2008" + [[ "${file,,}" == *"server_2012"* ]] && desc="Windows Server 2012" + [[ "${file,,}" == *"server_2016"* ]] && desc="Windows Server 2016" + [[ "${file,,}" == *"server_2019"* ]] && desc="Windows Server 2019" + [[ "${file,,}" == *"server_2022"* ]] && desc="Windows Server 2022" + [[ "${file,,}" == *"server_2025"* ]] && desc="Windows Server 2025" + [[ "${file,,}" == *"server 2008"* ]] && desc="Windows Server 2008" + [[ "${file,,}" == *"server 2012"* ]] && desc="Windows Server 2012" + [[ "${file,,}" == *"server 2016"* ]] && desc="Windows Server 2016" + [[ "${file,,}" == *"server 2019"* ]] && desc="Windows Server 2019" + [[ "${file,,}" == *"server 2022"* ]] && desc="Windows Server 2022" + [[ "${file,,}" == *"server 2025"* ]] && desc="Windows Server 2025" + + [ -z "$desc" ] && desc="Windows" + + echo "$desc" + return 0 +} + +getVersion() { + + local name="$1" + local detected="" + + if [[ "${name,,}" == *"windows 7"* ]]; then + detected="win7${PLATFORM,,}" + [[ "${name,,}" == *"ultimate"* ]] && detected="win7${PLATFORM,,}-ultimate" + [[ "${name,,}" == *"enterprise"* ]] && detected="win7${PLATFORM,,}-enterprise" + fi + + if [[ "${name,,}" == *"windows vista"* ]]; then + detected="winvista${PLATFORM,,}" + [[ "${name,,}" == *"ultimate"* ]] && detected="winvista${PLATFORM,,}-ultimate" + [[ "${name,,}" == *"enterprise"* ]] && detected="winvista${PLATFORM,,}-enterprise" + fi + + if [[ "${name,,}" == *"server 2025"* ]]; then + detected="win2025" + [[ "${name,,}" == *"evaluation"* ]] && detected="win2025-eval" + fi + + if [[ "${name,,}" == *"server 2022"* ]]; then + detected="win2022" + [[ "${name,,}" == *"evaluation"* ]] && detected="win2022-eval" + fi + + if [[ "${name,,}" == *"server 2019"* ]]; then + detected="win2019" + [[ "${name,,}" == *"evaluation"* ]] && detected="win2019-eval" + fi + + if [[ "${name,,}" == *"server 2016"* ]]; then + detected="win2016" + [[ "${name,,}" == *"evaluation"* ]] && detected="win2016-eval" + fi + + if [[ "${name,,}" == *"server 2012"* ]]; then + detected="win2012r2" + [[ "${name,,}" == *"evaluation"* ]] && detected="win2012r2-eval" + fi + + if [[ "${name,,}" == *"server 2008"* ]]; then + detected="win2008r2" + [[ "${name,,}" == *"evaluation"* ]] && detected="win2008r2-eval" + fi + + if [[ "${name,,}" == *"windows 8"* ]]; then + detected="win81${PLATFORM,,}" + [[ "${name,,}" == *"enterprise"* ]] && detected="win81${PLATFORM,,}-enterprise" + [[ "${name,,}" == *"enterprise evaluation"* ]] && detected="win81${PLATFORM,,}-enterprise-eval" + fi + + if [[ "${name,,}" == *"windows 11"* ]]; then + detected="win11${PLATFORM,,}" + [[ "${name,,}" == *"enterprise"* ]] && detected="win11${PLATFORM,,}-enterprise" + [[ "${name,,}" == *"enterprise evaluation"* ]] && detected="win11${PLATFORM,,}-enterprise-eval" + fi + + if [[ "${name,,}" == *"windows 10"* ]]; then + detected="win10${PLATFORM,,}" + if [[ "${name,,}" == *" iot "* ]]; then + detected="win10${PLATFORM,,}-iot" + else + if [[ "${name,,}" == *"ltsc"* ]]; then + detected="win10${PLATFORM,,}-ltsc" + else + [[ "${name,,}" == *"enterprise"* ]] && detected="win10${PLATFORM,,}-enterprise" + [[ "${name,,}" == *"enterprise evaluation"* ]] && detected="win10${PLATFORM,,}-enterprise-eval" + fi + fi + fi + + echo "$detected" + return 0 +} + +switchEdition() { + + local id="$1" + + case "${id,,}" in + "win11${PLATFORM,,}-enterprise-eval") + DETECTED="win11${PLATFORM,,}-enterprise" + ;; + "win10${PLATFORM,,}-enterprise-eval") + DETECTED="win10${PLATFORM,,}-enterprise" + ;; + "win81${PLATFORM,,}-enterprise-eval") + DETECTED="win81${PLATFORM,,}-enterprise" + ;; + "win2022-eval") + DETECTED="win2022" + ;; + "win2019-eval") + DETECTED="win2019" + ;; + "win2016-eval") + DETECTED="win2016" + ;; + "win2012r2-eval") + DETECTED="win2012r2" + ;; + "win2008r2-eval") + DETECTED="win2008r2" + ;; + esac + + return 0 +} + +isESD() { + + local id="$1" + + case "${id,,}" in + "win11${PLATFORM,,}") + return 0 + ;; + "win10${PLATFORM,,}") + return 0 + ;; + esac + + return 1 +} + +isMido() { + + local id="$1" + + case "${id,,}" in + "win11${PLATFORM,,}" | "win11${PLATFORM,,}-enterprise-eval") + return 0 + ;; + "win10${PLATFORM,,}" | "win10${PLATFORM,,}-enterprise-eval" | "win10${PLATFORM,,}-enterprise-ltsc-eval") + return 0 + ;; + "win81${PLATFORM,,}" | "win81${PLATFORM,,}-enterprise-eval") + return 0 + ;; + "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" | "win2008r2") + return 0 + ;; + esac + + return 1 +} + +getLink() { + + # Fallbacks for users who cannot connect to the Microsoft servers + + local id="$1" + local url="" + local host="https://dl.bobpony.com" + + case "${id,,}" in + "win11${PLATFORM,,}") + url="$host/windows/11/en-us_windows_11_23h2_${PLATFORM,,}.iso" + ;; + "win10${PLATFORM,,}") + url="$host/windows/10/en-us_windows_10_22h2_${PLATFORM,,}.iso" + ;; + "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval") + url="$host/windows/10/en-us_windows_10_iot_enterprise_ltsc_2021_${PLATFORM,,}_dvd_257ad90f.iso" + ;; + "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval") + url="$host/windows/10/en-us_windows_10_enterprise_ltsc_2021_${PLATFORM,,}_dvd_d289cf96.iso" + ;; + "win81${PLATFORM,,}") + url="$host/windows/8.x/8.1/en_windows_8.1_with_update_${PLATFORM,,}_dvd_6051480.iso" + ;; + "win2022" | "win2022-eval") + url="$host/windows/server/2022/en-us_windows_server_2022_updated_jan_2024_${PLATFORM,,}_dvd_2b7a0c9f.iso" + ;; + "win2019" | "win2019-eval") + url="$host/windows/server/2019/en-us_windows_server_2019_updated_aug_2021_${PLATFORM,,}_dvd_a6431a28.iso" + ;; + "win2016" | "win2016-eval") + url="$host/windows/server/2016/en_windows_server_2016_updated_feb_2018_${PLATFORM,,}_dvd_11636692.iso" + ;; + "win2012r2" | "win2012r2-eval") + url="$host/windows/server/2012r2/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708-004.iso" + ;; + "win2008r2" | "win2008r2-eval") + url="$host/windows/server/2008r2/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601-018.iso" + ;; + "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise") + url="$host/windows/7/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" + ;; + "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-ultimate") + url="$host/windows/vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" + ;; + "winxpx86") + url="$host/windows/xp/professional/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" + ;; + "winxpx64") + url="$host/windows/xp/professional/en_win_xp_pro_${PLATFORM,,}_vl.iso" + ;; + "core11") + url="https://file.cnxiaobai.com/Windows/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%20core%20${PLATFORM,,}%20beta%201.iso" + ;; + "tiny11") + url="https://file.cnxiaobai.com/Windows/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%202311%20${PLATFORM,,}.iso" + ;; + "tiny10") + url="https://file.cnxiaobai.com/Windows/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny10%2023H2%20${PLATFORM,,}.iso" + ;; + esac + + echo "$url" + return 0 +} + +secondLink() { + + # Fallbacks for users who cannot connect to the Microsoft servers + + local id="$1" + local url="" + local host="https://drive.massgrave.dev" + + case "${id,,}" in + "win11${PLATFORM,,}") + url="$host/en-us_windows_11_consumer_editions_version_23h2_updated_april_2024_${PLATFORM,,}_dvd_d986680b.iso" + ;; + "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval") + url="$host/en-us_windows_11_business_editions_version_23h2_updated_april_2024_${PLATFORM,,}_dvd_349cd577.iso" + ;; + "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval") + url="$host/en-us_windows_11_iot_enterprise_version_23h2_${PLATFORM,,}_dvd_fb37549c.iso" + ;; + "win10${PLATFORM,,}") + url="$host/en-us_windows_10_consumer_editions_version_22h2_updated_april_2024_${PLATFORM,,}_dvd_9a92dc89.iso" + ;; + "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval") + url="$host/en-us_windows_10_business_editions_version_22h2_updated_april_2024_${PLATFORM,,}_dvd_c00090a7.iso" + ;; + "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval") + url="$host/en-us_windows_10_iot_enterprise_ltsc_2021_${PLATFORM,,}_dvd_257ad90f.iso" + ;; + "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval") + url="$host/en-us_windows_10_enterprise_ltsc_2021_${PLATFORM,,}_dvd_d289cf96.iso" + ;; + "win81${PLATFORM,,}") + url="$host/en_windows_8.1_pro_vl_with_update_${PLATFORM,,}_dvd_6050880.iso" + ;; + "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval") + url="$host/en_windows_8.1_enterprise_with_update_${PLATFORM,,}_dvd_6054382.iso" + ;; + "win2022" | "win2022-eval") + url="$host/en-us_windows_server_2022_updated_april_2024_${PLATFORM,,}_dvd_164349f3.iso" + ;; + "win2019" | "win2019-eval") + url="$host/en_windows_server_2019_${PLATFORM,,}_dvd_4cb967d8.iso" + ;; + "win2016" | "win2016-eval") + url="$host/en_windows_server_2016_${PLATFORM,,}_dvd_9327751.iso" + ;; + "win2012r2" | "win2012r2-eval") + url="$host/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708.iso" + ;; + "win2008r2" | "win2008r2-eval") + url="$host/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601.iso" + ;; + "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise") + url="$host/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" + ;; + "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-ultimate") + url="$host/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" + ;; + "winxpx86") + url="$host/en_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73974.iso" + ;; + "winxpx64") + url="$host/en_win_xp_pro_${PLATFORM,,}_with_sp2_vl_x13-41611.iso" + ;; + "core11") + url="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20${PLATFORM,,}%20beta%201.iso" + ;; + "tiny11") + url="https://archive.org/download/tiny11-2311/tiny11%202311%20${PLATFORM,,}.iso" + ;; + "tiny10") + url="https://archive.org/download/tiny-10-23-h2/tiny10%20${PLATFORM,,}%2023h2.iso" + ;; + esac + + echo "$url" + return 0 +} + +validVersion() { + + local id="$1" + local url + + isESD "$id" && return 0 + isMido "$id" && return 0 + + url=$(getLink "$id") + [ -n "$url" ] && return 0 + + url=$(secondLink "$id") + [ -n "$url" ] && return 0 + + return 1 +} + +migrateFiles() { + + local base="$1" + local version="$2" + local file="" + + [ -f "$STORAGE/$base" ] && return 0 + + [[ "${version,,}" == "tiny10" ]] && file="tiny10_${PLATFORM,,}_23h2.iso" + [[ "${version,,}" == "tiny11" ]] && file="tiny11_2311_${PLATFORM,,}.iso" + [[ "${version,,}" == "core11" ]] && file="tiny11_core_${PLATFORM,,}_beta_1.iso" + [[ "${version,,}" == "winxpx86" ]] && file="en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" + [[ "${version,,}" == "winvista${PLATFORM,,}" ]] && file="en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" + [[ "${version,,}" == "win7${PLATFORM,,}" ]] && file="en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" + + [ -z "$file" ] && return 0 + [ ! -f "$STORAGE/$file" ] && return 0 + + ! mv "$STORAGE/$file" "$STORAGE/$base" && return 1 + + return 0 +} + +configXP() { + + local dir="$1" + local arch="x86" + local target="$dir/I386" + local drivers="$TMP/drivers" + + if [ -d "$dir/AMD64" ]; then + arch="amd64" + target="$dir/AMD64" + fi + + rm -rf "$drivers" + + if ! 7z x /run/drivers.iso -o"$drivers" > /dev/null; then + error "Failed to extract driver ISO file!" && return 1 + fi + + cp "$drivers/viostor/xp/$arch/viostor.sys" "$target" + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/xp/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/xp/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/xp/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/xp/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/xp/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/xp/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + + sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" + + cp -a "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" + cp -a "$drivers/sata/xp/$arch/." "$target" + + sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" + + # Windows XP Pro generic key (no activation) + local key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + + local pid setup + setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1) + pid=$(<"$setup") + pid="${pid:(-4)}" + pid="${pid:0:3}" + + if [[ "$pid" == "270" ]]; then + info "Warning: this ISO requires a volume license, it will reject the generic key during installation." + fi + + find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; + + { echo "[Data]" + echo "AutoPartition=1" + echo "MsDosInitiated=\"0\"" + echo "UnattendedInstall=\"Yes\"" + echo "AutomaticUpdates=\"Yes\"" + echo "" + echo "[Unattended]" + echo "UnattendSwitch=Yes" + echo "UnattendMode=FullUnattended" + echo "FileSystem=NTFS" + echo "OemSkipEula=Yes" + echo "OemPreinstall=Yes" + echo "Repartition=Yes" + echo "WaitForReboot=\"No\"" + echo "DriverSigningPolicy=\"Ignore\"" + echo "NonDriverSigningPolicy=\"Ignore\"" + echo "OemPnPDriversPath=\"Drivers\viostor;Drivers\NetKVM;Drivers\sata\"" + echo "NoWaitAfterTextMode=1" + echo "NoWaitAfterGUIMode=1" + echo "FileSystem-ConvertNTFS" + echo "ExtendOemPartition=0" + echo "Hibernation=\"No\"" + echo "" + echo "[GuiUnattended]" + echo "OEMSkipRegional=1" + echo "OemSkipWelcome=1" + echo "AdminPassword=*" + echo "TimeZone=0" + echo "AutoLogon=Yes" + echo "AutoLogonCount=65432" + echo "" + echo "[UserData]" + echo "FullName=\"Docker\"" + echo "ComputerName=\"*\"" + echo "OrgName=\"Windows for Docker\"" + echo "ProductKey=$key" + echo "" + echo "[Identification]" + echo "JoinWorkgroup = WORKGROUP" + echo "" + echo "[Networking]" + echo "InstallDefaultComponents=Yes" + echo "" + echo "[Branding]" + echo "BrandIEUsingUnattended=Yes" + echo "" + echo "[URL]" + echo "Home_Page = http://www.google.com" + echo "Search_Page = http://www.google.com" + echo "" + echo "[RegionalSettings]" + echo "Language=00000409" + echo "" + echo "[TerminalServices]" + echo "AllowConnections=1" + } | unix2dos > "$target/WINNT.SIF" + + { echo "Windows Registry Editor Version 5.00" + echo "" + echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security]" + echo "\"FirstRunDisabled\"=dword:00000001" + echo "\"AntiVirusOverride\"=dword:00000001" + echo "\"FirewallOverride\"=dword:00000001" + echo "\"FirewallDisableNotify\"=dword:00000001" + echo "\"UpdatesDisableNotify\"=dword:00000001" + echo "\"AntiVirusDisableNotify\"=dword:00000001" + echo "" + echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wscsvc]" + echo "\"Start\"=dword:00000004" + echo "" + echo "[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\WindowsFirewall\StandardProfile]" + echo "\"EnableFirewall\"=dword:00000000" + echo "" + echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess]" + echo "\"Start\"=dword:00000004" + echo + echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List]" + echo "\"3389:TCP\"=\"3389:TCP:*:Enabled:@xpsp2res.dll,-22009\"" + echo "" + echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]" + echo "\"LimitBlankPasswordUse\"=dword:00000000" + echo "" + echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]" + echo "\"RunCount\"=dword:00000000" + echo "" + echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]" + echo "\"HideFileExt\"=dword:00000000" + echo "" + echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" + echo "\"DefaultUserName\"=\"Docker\"" + echo "\"DefaultDomainName\"=\"Dockur\"" + echo "\"AltDefaultUserName\"=\"Docker\"" + echo "\"AltDefaultDomainName\"=\"Dockur\"" + echo "\"AutoAdminLogon\"=\"1\"" + } | unix2dos > "$dir/\$OEM\$/install.reg" + + { echo "Set WshShell = WScript.CreateObject(\"WScript.Shell\")" + echo "Set WshNetwork = WScript.CreateObject(\"WScript.Network\")" + echo "Set oMachine = GetObject(\"WinNT://\" & WshNetwork.ComputerName)" + echo "Set oInfoUser = GetObject(\"WinNT://\" & WshNetwork.ComputerName & \"/Administrator,user\")" + echo "Set oUser = oMachine.MoveHere(oInfoUser.ADsPath,\"Docker\")" + } | unix2dos > "$dir/\$OEM\$/admin.vbs" + + { echo "[COMMANDS]" + echo "\"REGEDIT /s install.reg\"" + echo "\"Wscript admin.vbs\"" + } | unix2dos > "$dir/\$OEM\$/cmdlines.txt" + + rm -rf "$drivers" + return 0 +} + +prepareXP() { + + local iso="$1" + local dir="$2" + + MACHINE="pc-q35-2.10" + BOOT_MODE="windows_legacy" + ETFS="[BOOT]/Boot-NoEmul.img" + + [[ "$MANUAL" == [Yy1]* ]] && return 0 + configXP "$dir" && return 0 + + error "Failed to generate XP configuration files!" && exit 66 +} + +prepareLegacy() { + + local iso="$1" + local dir="$2" + + ETFS="boot.img" + BOOT_MODE="windows_legacy" + + rm -f "$dir/$ETFS" + + local len offset + len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") + offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") + + if ! dd "if=$iso" "of=$dir/$ETFS" bs=2048 "count=$len" "skip=$offset" status=none; then + error "Failed to extract boot image from ISO!" && exit 67 + fi + + return 0 +} + +return 0 diff --git a/src/entry.sh b/src/entry.sh index 200c591..8893716 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -9,6 +9,7 @@ SUPPORT="https://github.com/dockur/windows" cd /run . reset.sh # Initialize system +. define.sh # Define versions . install.sh # Run installation . disk.sh # Initialize disks . display.sh # Initialize graphics @@ -28,8 +29,8 @@ info "Booting ${APP}${BOOT_DESC}..." (( rc != 0 )) && error "$(<"$QEMU_LOG")" && exit 15 terminal +( sleep 10; boot ) & tail -fn +0 "$QEMU_LOG" 2>/dev/null & -( sleep 10; [ ! -f "$QEMU_END" ] && info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." ) & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & wait $! || : diff --git a/src/install.sh b/src/install.sh index dcf0a82..70aec16 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1,244 +1,13 @@ #!/usr/bin/env bash set -Eeuo pipefail -: "${MANUAL:=""}" -: "${VERSION:=""}" -: "${DETECTED:=""}" - -[ -z "$VERSION" ] && VERSION="win11x64" - -if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then - VERSION="${VERSION:1:-1}" -fi - -[[ "${VERSION,,}" == "11" ]] && VERSION="win11x64" -[[ "${VERSION,,}" == "win11" ]] && VERSION="win11x64" - -[[ "${VERSION,,}" == "10" ]] && VERSION="win10x64" -[[ "${VERSION,,}" == "win10" ]] && VERSION="win10x64" - -[[ "${VERSION,,}" == "8" ]] && VERSION="win81x64" -[[ "${VERSION,,}" == "81" ]] && VERSION="win81x64" -[[ "${VERSION,,}" == "8.1" ]] && VERSION="win81x64" -[[ "${VERSION,,}" == "win8" ]] && VERSION="win81x64" -[[ "${VERSION,,}" == "win81" ]] && VERSION="win81x64" - -[[ "${VERSION,,}" == "7" ]] && VERSION="win7x64" -[[ "${VERSION,,}" == "win7" ]] && VERSION="win7x64" - -[[ "${VERSION,,}" == "vista" ]] && VERSION="winvistax64" -[[ "${VERSION,,}" == "winvista" ]] && VERSION="winvistax64" - -[[ "${VERSION,,}" == "xp" ]] && VERSION="winxpx86" -[[ "${VERSION,,}" == "winxp" ]] && VERSION="winxpx86" - -[[ "${VERSION,,}" == "22" ]] && VERSION="win2022-eval" -[[ "${VERSION,,}" == "2022" ]] && VERSION="win2022-eval" -[[ "${VERSION,,}" == "win22" ]] && VERSION="win2022-eval" -[[ "${VERSION,,}" == "win2022" ]] && VERSION="win2022-eval" - -[[ "${VERSION,,}" == "19" ]] && VERSION="win2019-eval" -[[ "${VERSION,,}" == "2019" ]] && VERSION="win2019-eval" -[[ "${VERSION,,}" == "win19" ]] && VERSION="win2019-eval" -[[ "${VERSION,,}" == "win2019" ]] && VERSION="win2019-eval" - -[[ "${VERSION,,}" == "16" ]] && VERSION="win2016-eval" -[[ "${VERSION,,}" == "2016" ]] && VERSION="win2016-eval" -[[ "${VERSION,,}" == "win16" ]] && VERSION="win2016-eval" -[[ "${VERSION,,}" == "win2016" ]] && VERSION="win2016-eval" - -[[ "${VERSION,,}" == "2012" ]] && VERSION="win2012r2-eval" -[[ "${VERSION,,}" == "win2012" ]] && VERSION="win2012r2-eval" - -[[ "${VERSION,,}" == "2008" ]] && VERSION="win2008r2" -[[ "${VERSION,,}" == "win2008" ]] && VERSION="win2008r2" - -[[ "${VERSION,,}" == "ltsc10" ]] && VERSION="win10x64-enterprise-ltsc-eval" -[[ "${VERSION,,}" == "10ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" -[[ "${VERSION,,}" == "win10-ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" -[[ "${VERSION,,}" == "win10x64-ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval" - -if [[ "${VERSION,,}" == "win10x64-enterprise-ltsc-eval" ]]; then - DETECTED="win10x64-ltsc" -fi - -if [[ "${VERSION,,}" == "win7x64" ]]; then - DETECTED="win7x64" - VERSION="https://dl.bobpony.com/windows/7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" -fi - -if [[ "${VERSION,,}" == "winvistax64" ]]; then - DETECTED="winvistax64" - VERSION="https://dl.bobpony.com/windows/vista/en_windows_vista_sp2_x64_dvd_342267.iso" -fi - -if [[ "${VERSION,,}" == "winxpx86" ]]; then - DETECTED="winxpx86" - VERSION="https://dl.bobpony.com/windows/xp/professional/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" -fi - -if [[ "${VERSION,,}" == "core11" ]]; then - DETECTED="win11x64" - VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" -fi - -if [[ "${VERSION,,}" == "tiny11" ]]; then - DETECTED="win11x64" - VERSION="https://archive.org/download/tiny11-2311/tiny11%202311%20x64.iso" -fi - -if [[ "${VERSION,,}" == "tiny10" ]]; then - DETECTED="win10x64-ltsc" - VERSION="https://archive.org/download/tiny-10-23-h2/tiny10%20x64%2023h2.iso" -fi - -CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname windows.iso -printf "%f\n" | head -n 1) -[ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) -[ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname boot.iso -printf "%f\n" | head -n 1) -[ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) - -if [ -z "$CUSTOM" ] && [[ "${VERSION,,}" != "http"* ]]; then - FN="${VERSION/\/storage\//}" - [[ "$FN" == "."* ]] && FN="${FN:1}" - CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "$FN" -printf "%f\n" | head -n 1) -fi - ESD_URL="" -MACHINE="q35" -PLATFORM="x64" TMP="$STORAGE/tmp" DIR="$TMP/unpack" FB="falling back to manual installation!" ETFS="boot/etfsboot.com" EFISYS="efi/microsoft/boot/efisys_noprompt.bin" -printVersion() { - - local id="$1" - local desc="$2" - - [[ "$id" == "win7"* ]] && desc="Windows 7" - [[ "$id" == "win8"* ]] && desc="Windows 8" - [[ "$id" == "win10"* ]] && desc="Windows 10" - [[ "$id" == "win11"* ]] && desc="Windows 11" - [[ "$id" == "winxp"* ]] && desc="Windows XP" - [[ "$id" == "winvista"* ]] && desc="Windows Vista" - [[ "$id" == "win2025"* ]] && desc="Windows Server 2025" - [[ "$id" == "win2022"* ]] && desc="Windows Server 2022" - [[ "$id" == "win2019"* ]] && desc="Windows Server 2019" - [[ "$id" == "win2016"* ]] && desc="Windows Server 2016" - [[ "$id" == "win2012"* ]] && desc="Windows Server 2012" - [[ "$id" == "win2008"* ]] && desc="Windows Server 2008" - [[ "$id" == "win10x64-iot" ]] && desc="Windows 10 IoT" - [[ "$id" == "win11x64-iot" ]] && desc="Windows 11 IoT" - [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC" - [[ "$id" == "win11x64-ltsc" ]] && desc="Windows 11 LTSC" - [[ "$id" == "win81x64-enterprise-eval" ]] && desc="Windows 8 Enterprise" - [[ "$id" == "win10x64-enterprise-eval" ]] && desc="Windows 10 Enterprise" - [[ "$id" == "win11x64-enterprise-eval" ]] && desc="Windows 11 Enterprise" - - [ -z "$desc" ] && desc="Windows" - - echo "$desc" - return 0 -} - -getName() { - - local file="$1" - local desc="$2" - - [[ "${file,,}" == "win11"* ]] && desc="Windows 11" - [[ "${file,,}" == "win10"* ]] && desc="Windows 10" - [[ "${file,,}" == "win8"* ]] && desc="Windows 8" - [[ "${file,,}" == "win7"* ]] && desc="Windows 7" - [[ "${file,,}" == "winxp"* ]] && desc="Windows XP" - [[ "${file,,}" == "winvista"* ]] && desc="Windows Vista" - [[ "${file,,}" == "tiny10"* ]] && desc="Tiny 10" - [[ "${file,,}" == "tiny11"* ]] && desc="Tiny 11" - [[ "${file,,}" == "tiny11_core"* ]] && desc="Tiny 11 Core" - [[ "${file,,}" == *"windows11"* ]] && desc="Windows 11" - [[ "${file,,}" == *"windows10"* ]] && desc="Windows 10" - [[ "${file,,}" == *"windows8"* ]] && desc="Windows 8" - [[ "${file,,}" == *"windows7"* ]] && desc="Windows 7" - [[ "${file,,}" == *"windowsxp"* ]] && desc="Windows XP" - [[ "${file,,}" == *"windowsvista"* ]] && desc="Windows Vista" - [[ "${file,,}" == *"windows_11"* ]] && desc="Windows 11" - [[ "${file,,}" == *"windows_10"* ]] && desc="Windows 10" - [[ "${file,,}" == *"windows_8"* ]] && desc="Windows 8" - [[ "${file,,}" == *"windows_7"* ]] && desc="Windows 7" - [[ "${file,,}" == *"windows_xp"* ]] && desc="Windows XP" - [[ "${file,,}" == *"windows_vista"* ]] && desc="Windows Vista" - [[ "${file,,}" == *"server2008"* ]] && desc="Windows Server 2008" - [[ "${file,,}" == *"server2012"* ]] && desc="Windows Server 2012" - [[ "${file,,}" == *"server2016"* ]] && desc="Windows Server 2016" - [[ "${file,,}" == *"server2019"* ]] && desc="Windows Server 2019" - [[ "${file,,}" == *"server2022"* ]] && desc="Windows Server 2022" - [[ "${file,,}" == *"server2025"* ]] && desc="Windows Server 2025" - [[ "${file,,}" == *"server_2008"* ]] && desc="Windows Server 2008" - [[ "${file,,}" == *"server_2012"* ]] && desc="Windows Server 2012" - [[ "${file,,}" == *"server_2016"* ]] && desc="Windows Server 2016" - [[ "${file,,}" == *"server_2019"* ]] && desc="Windows Server 2019" - [[ "${file,,}" == *"server_2022"* ]] && desc="Windows Server 2022" - [[ "${file,,}" == *"server_2025"* ]] && desc="Windows Server 2025" - - [ -z "$desc" ] && desc="Windows" - - echo "$desc" - return 0 -} - -getVersion() { - - local name="$1" - local detected="" - - [[ "${name,,}" == *"windows 7"* ]] && detected="win7x64" - [[ "${name,,}" == *"windows vista"* ]] && detected="winvistax64" - - [[ "${name,,}" == *"server 2008"* ]] && detected="win2008r2" - [[ "${name,,}" == *"server 2025"* ]] && detected="win2025-eval" - [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" - [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" - [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval" - [[ "${name,,}" == *"server 2012"* ]] && detected="win2012r2-eval" - - if [[ "${name,,}" == *"windows 8"* ]]; then - if [[ "${name,,}" == *"enterprise evaluation"* ]]; then - detected="win81x64-enterprise-eval" - else - detected="win81x64" - fi - fi - - if [[ "${name,,}" == *"windows 11"* ]]; then - if [[ "${name,,}" == *"enterprise evaluation"* ]]; then - detected="win11x64-enterprise-eval" - else - detected="win11x64" - fi - fi - - if [[ "${name,,}" == *"windows 10"* ]]; then - if [[ "${name,,}" == *" iot "* ]]; then - detected="win10x64-iot" - else - if [[ "${name,,}" == *"ltsc"* ]]; then - detected="win10x64-ltsc" - else - if [[ "${name,,}" == *"enterprise evaluation"* ]]; then - detected="win10x64-enterprise-eval" - else - detected="win10x64" - fi - fi - fi - fi - - echo "$detected" - return 0 -} - hasDisk() { [ -b "${DEVICE:-}" ] && return 0 @@ -265,13 +34,13 @@ finishInstall() { local aborted="$2" if [ ! -s "$iso" ] || [ ! -f "$iso" ]; then - error "Failed to find ISO: $iso" && return 1 + error "Failed to find ISO file: $iso" && return 1 fi if [ -w "$iso" ] && [[ "$aborted" != [Yy1]* ]]; then # Mark ISO as prepared via magic byte if ! printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none; then - error "Failed to set magic byte!" && return 1 + error "Failed to set magic byte in ISO file: $iso" && return 1 fi fi @@ -282,17 +51,19 @@ finishInstall() { cp /run/version "$STORAGE/windows.ver" - if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then - if [[ "${MACHINE,,}" != "q35" ]]; then - echo "$MACHINE" > "$STORAGE/windows.old" - fi - echo "$BOOT_MODE" > "$STORAGE/windows.mode" - 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" + if [[ "${PLATFORM,,}" == "x64" ]]; then + if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then + echo "$BOOT_MODE" > "$STORAGE/windows.mode" + if [[ "${MACHINE,,}" != "q35" ]]; then + echo "$MACHINE" > "$STORAGE/windows.old" + 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" + fi fi fi fi @@ -307,7 +78,7 @@ abortInstall() { if [[ "$iso" != "$STORAGE/$BASE" ]]; then if ! mv -f "$iso" "$STORAGE/$BASE"; then - error "Failed to move ISO: $iso" && return 1 + error "Failed to move ISO file: $iso" && return 1 fi fi @@ -331,18 +102,14 @@ startInstall() { CUSTOM="" - if [[ "${VERSION,,}" == "http"* ]]; then - EXTERNAL="Y" - else + if [[ "${VERSION,,}" != "http"* ]]; then + EXTERNAL="N" - fi - - if [[ "$EXTERNAL" != [Yy1]* ]]; then - BASE="$VERSION.iso" else + EXTERNAL="Y" BASE=$(basename "${VERSION%%\?*}") : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') @@ -350,8 +117,13 @@ startInstall() { fi fi + if [[ "${PLATFORM,,}" == "x64" ]]; then + ! migrateFiles "$BASE" "$VERSION" && error "Migration failed!" && exit 57 + fi + if skipInstall; then [ ! -f "$STORAGE/$BASE" ] && BASE="" + [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" return 1 fi @@ -388,12 +160,29 @@ startInstall() { return 0 } +detectCustom() { + + CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname windows.iso -printf "%f\n" | head -n 1) + [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) + [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname boot.iso -printf "%f\n" | head -n 1) + [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) + + if [ -z "$CUSTOM" ] && [[ "${VERSION,,}" != "http"* ]]; then + FN="${VERSION/\/storage\//}" + [[ "$FN" == "."* ]] && FN="${FN:1}" + CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "$FN" -printf "%f\n" | head -n 1) + fi + + return 0 +} + getESD() { local dir="$1" + local version="$2" local winCatalog size - case "${VERSION,,}" in + case "${version,,}" in "win11${PLATFORM,,}") winCatalog="https://go.microsoft.com/fwlink?linkid=2156292" ;; @@ -401,7 +190,7 @@ getESD() { winCatalog="https://go.microsoft.com/fwlink/?LinkId=841361" ;; *) - error "Invalid ESD version specified: $VERSION" && return 1 + error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 ;; esac @@ -412,41 +201,44 @@ getESD() { mkdir -p "$dir" local wFile="catalog.cab" + local xFile="products.xml" + local eFile="esd_edition.xml" + local fFile="products_filter.xml" - { wget "$winCatalog" -O "$dir/$wFile" -q --no-check-certificate; rc=$?; } || : + { wget "$winCatalog" -O "$dir/$wFile" -q; rc=$?; } || : (( rc != 0 )) && error "Failed to download $winCatalog , reason: $rc" && return 1 cd "$dir" if ! cabextract "$wFile" > /dev/null; then cd /run - error "Failed to extract CAB file!" && return 1 + error "Failed to extract $wFile!" && return 1 fi cd /run - if [ ! -s "$dir/products.xml" ]; then - error "Failed to find products.xml!" && return 1 + if [ ! -s "$dir/$xFile" ]; then + error "Failed to find $xFile in $wFile!" && return 1 fi local esdLang="en-us" local editionName="Professional" local edQuery='//File[Architecture="'${PLATFORM}'"][Edition="'${editionName}'"]' - echo -e '<Catalog>' > "${dir}/products_filter.xml" - xmllint --nonet --xpath "${edQuery}" "${dir}/products.xml" >> "${dir}/products_filter.xml" 2>/dev/null - echo -e '</Catalog>'>> "${dir}/products_filter.xml" - xmllint --nonet --xpath '//File[LanguageCode="'${esdLang}'"]' "${dir}/products_filter.xml" >"${dir}/esd_edition.xml" + echo -e '<Catalog>' > "$dir/$fFile" + xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" >> "$dir/$fFile" 2>/dev/null + echo -e '</Catalog>'>> "$dir/$fFile" + xmllint --nonet --xpath '//File[LanguageCode="'${esdLang}'"]' "$dir/$fFile" >"$dir/$eFile" - size=$(stat -c%s "${dir}/esd_edition.xml") + size=$(stat -c%s "$dir/$eFile") if ((size<20)); then - error "Failed to find Windows product!" && return 1 + error "Failed to find Windows product in $eFile!" && return 1 fi - ESD_URL=$(xmllint --nonet --xpath '//FilePath' "${dir}/esd_edition.xml" | sed -E -e 's/<[\/]?FilePath>//g') + ESD_URL=$(xmllint --nonet --xpath '//FilePath' "$dir/$eFile" | sed -E -e 's/<[\/]?FilePath>//g') if [ -z "$ESD_URL" ]; then - error "Failed to find ESD URL!" && return 1 + error "Failed to find ESD URL in $eFile!" && return 1 fi rm -rf "$dir" @@ -456,7 +248,7 @@ getESD() { doMido() { local iso="$1" - local url="$2" + local version="$2" local desc="$3" local rc @@ -468,7 +260,7 @@ doMido() { /run/progress.sh "$iso.PART" "Downloading $desc ([P])..." & cd "$TMP" - { /run/mido.sh "$url"; rc=$?; } || : + { /run/mido.sh "${version,,}"; rc=$?; } || : cd /run fKill "progress.sh" @@ -490,7 +282,7 @@ downloadFile() { local iso="$1" local url="$2" local desc="$3" - local rc progress + local rc progress domain rm -f "$iso" @@ -502,10 +294,15 @@ downloadFile() { fi local msg="Downloading $desc..." + + domain=$(echo "$url" | awk -F/ '{print $3}') + domain=$(expr "$domain" : '.*\.\(.*\..*\)') + [[ "${domain,,}" != *"microsoft.com" ]] && msg="Downloading $desc from $domain..." + info "$msg" && html "$msg" /run/progress.sh "$iso" "Downloading $desc ([P])..." & - { wget "$url" -O "$iso" -q --no-check-certificate --show-progress "$progress"; rc=$?; } || : + { wget "$url" -O "$iso" -q --show-progress "$progress"; rc=$?; } || : fKill "progress.sh" @@ -524,70 +321,77 @@ downloadFile() { downloadImage() { local iso="$1" - local url="$2" - local rc desc + local version="$2" + local tried="n" + local url desc - if [[ "$EXTERNAL" != [Yy1]* ]]; then - - desc=$(printVersion "$VERSION" "Windows") - - else + if [[ "${version,,}" == "http"* ]]; then desc=$(getName "$BASE" "$BASE") + downloadFile "$iso" "$version" "$desc" && return 0 + return 1 fi - if [[ "$EXTERNAL" != [Yy1]* ]]; then + if ! validVersion "$version"; then + error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 + fi - doMido "$iso" "$url" "$desc" && return 0 + if [[ "${PLATFORM,,}" == "x64" ]]; then + desc=$(printVersion "$version" "Windows") + else + desc=$(printVersion "$version" "Windows for ${PLATFORM}") + fi - if [[ "$VERSION" != "win10${PLATFORM,,}" ]] && [[ "$VERSION" != "win11${PLATFORM,,}" ]]; then - return 1 + if [[ "${PLATFORM,,}" == "x64" ]]; then + if isMido "$version"; then + tried="y" + doMido "$iso" "$version" "$desc" && return 0 + fi + switchEdition "$version" + fi + + if isESD "$version"; then + + if [[ "$tried" != "n" ]]; then + info "Failed to download $desc using Mido, will try a diferent method now..." fi - info "Failed to download $desc using Mido, will try a different method now..." + tried="y" - rm -rf "$TMP" - mkdir -p "$TMP" - - ISO="$TMP/$VERSION.esd" - iso="$ISO" - - if ! getESD "$TMP/esd"; then - url="" - else - url="$ESD_URL" + if getESD "$TMP/esd" "$version"; then + ISO="$TMP/$version.esd" + downloadFile "$ISO" "$ESD_URL" "$desc" && return 0 + ISO="$TMP/$BASE" fi fi + url=$(getLink "$version") + if [ -n "$url" ]; then + + if [[ "$tried" != "n" ]]; then + info "Failed to download $desc from Microsoft, will try another mirror now..." + fi + + tried="y" downloadFile "$iso" "$url" "$desc" && return 0 + fi - [[ "$EXTERNAL" == [Yy1]* ]] && return 1 + url=$(secondLink "$version") - case "${VERSION,,}" in - "win11${PLATFORM,,}") - url="https://dl.bobpony.com/windows/11/en-us_windows_11_23h2_${PLATFORM,,}.iso" - ;; - "win10${PLATFORM,,}") - url="https://dl.bobpony.com/windows/10/en-us_windows_10_22h2_${PLATFORM,,}.iso" - ;; - *) - return 1 - ;; - esac + if [ -n "$url" ]; then - info "Failed to download $desc from Microsoft, will try another mirror now..." + if [[ "$tried" != "n" ]]; then + info "Failed to download $desc, will try another mirror now..." + fi - rm -rf "$TMP" - mkdir -p "$TMP" + tried="y" + downloadFile "$iso" "$url" "$desc" && return 0 - ISO="$TMP/$BASE" - iso="$ISO" - - downloadFile "$iso" "$url" "$desc" && return 0 + fi return 1 } @@ -596,9 +400,10 @@ extractESD() { local iso="$1" local dir="$2" + local version="$3" + local desc="$4" local size size_gb space space_gb desc - desc=$(printVersion "$VERSION" "Windows") local msg="Extracting $desc bootdisk..." info "$msg" && html "$msg" @@ -623,7 +428,7 @@ extractESD() { wimlib-imagex apply "$iso" 1 "${dir}" --quiet 2>/dev/null || { retVal=$? - error "Extracting bootdisk failed" && return $retVal + error "Extracting $desc bootdisk failed" && return $retVal } local bootWimFile="${dir}/sources/boot.wim" @@ -650,7 +455,7 @@ extractESD() { local edition imageIndex imageEdition - case "${VERSION,,}" in + case "${version,,}" in "win11${PLATFORM,,}") edition="11 pro" ;; @@ -658,7 +463,7 @@ extractESD() { edition="10 pro" ;; *) - error "Invalid version specified: $VERSION" && return 1 + error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 ;; esac @@ -667,7 +472,7 @@ extractESD() { [[ "${imageEdition,,}" != *"$edition"* ]] && continue wimlib-imagex export "${iso}" ${imageIndex} "${installWimFile}" --compress=LZMS --chunk-size 128K --quiet || { retVal=$? - error "Addition of ${imageIndex} to the image failed" && return $retVal + error "Addition of ${imageIndex} to the $desc image failed" && return $retVal } return 0 done @@ -679,16 +484,17 @@ extractImage() { local iso="$1" local dir="$2" + local version="$3" local desc="downloaded ISO" local size size_gb space space_gb - if [[ "${iso,,}" == *".esd" ]]; then - extractESD "$iso" "$dir" && return 0 - return 1 + if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then + desc=$(printVersion "$version" "downloaded ISO") fi - if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then - desc=$(printVersion "$VERSION" "downloaded ISO") + if [[ "${iso,,}" == *".esd" ]]; then + extractESD "$iso" "$dir" "$version" "$desc" && return 0 + return 1 fi local msg="Extracting $desc image..." @@ -723,6 +529,7 @@ extractImage() { detectImage() { XML="" + local dsc local dir="$1" if [ -n "$CUSTOM" ]; then @@ -742,10 +549,9 @@ detectImage() { if [[ "${DETECTED,,}" != "winxp"* ]]; then - local dsc dsc=$(printVersion "$DETECTED" "$DETECTED") - warn "got $dsc, but no matching XML file exists, $FB." + warn "got $dsc, but no matching file called $DETECTED.xml exists, $FB." fi return 0 @@ -753,16 +559,24 @@ detectImage() { info "Detecting Windows version from ISO image..." - if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then - DETECTED="winxpx86" - info "Detected: Windows XP" && return 0 + if [[ "${PLATFORM,,}" == "x64" ]]; then + if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then + if [ -d "$dir/AMD64" ]; then + DETECTED="winxpx64" + else + DETECTED="winxpx86" + fi + dsc=$(printVersion "$DETECTED" "$DETECTED") + info "Detected: $dsc" + return 0 + fi fi local src loc tag result name name2 desc src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then - BOOT_MODE="windows_legacy" + [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi @@ -770,7 +584,7 @@ detectImage() { [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) if [ ! -f "$loc" ]; then - BOOT_MODE="windows_legacy" + [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1 fi @@ -798,206 +612,7 @@ detectImage() { [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" info "Detected: $desc" else - warn "detected $desc, but no matching XML file exists, $FB." - fi - - return 0 -} - -prepareXP() { - - local iso="$1" - local dir="$2" - local arch="x86" - local target="$dir/I386" - - if [ -d "$dir/AMD64" ]; then - arch="amd64" - target="$dir/AMD64" - fi - - MACHINE="pc-q35-2.10" - BOOT_MODE="windows_legacy" - ETFS="[BOOT]/Boot-NoEmul.img" - - [[ "$MANUAL" == [Yy1]* ]] && return 0 - - local drivers="$TMP/drivers" - rm -rf "$drivers" - - if ! 7z x /run/drivers.iso -o"$drivers" > /dev/null; then - error "Failed to extract driver ISO file!" && exit 66 - fi - - cp "$drivers/viostor/xp/$arch/viostor.sys" "$target" - - mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/xp/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/xp/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/xp/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" - - mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/xp/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/xp/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/xp/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - - sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" - - mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" - - cp -a "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" - cp -a "$drivers/sata/xp/$arch/." "$target" - - sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" - - # Windows XP Pro generic key (no activation) - local key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - - find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; - - { echo "[Data]" - echo "AutoPartition=1" - echo "MsDosInitiated=\"0\"" - echo "UnattendedInstall=\"Yes\"" - echo "AutomaticUpdates=\"Yes\"" - echo "" - echo "[Unattended]" - echo "UnattendSwitch=Yes" - echo "UnattendMode=FullUnattended" - echo "FileSystem=NTFS" - echo "OemSkipEula=Yes" - echo "OemPreinstall=Yes" - echo "Repartition=Yes" - echo "WaitForReboot=\"No\"" - echo "DriverSigningPolicy=\"Ignore\"" - echo "NonDriverSigningPolicy=\"Ignore\"" - echo "OemPnPDriversPath=\"Drivers\viostor;Drivers\NetKVM;Drivers\sata\"" - echo "NoWaitAfterTextMode=1" - echo "NoWaitAfterGUIMode=1" - echo "FileSystem-ConvertNTFS" - echo "ExtendOemPartition=0" - echo "Hibernation=\"No\"" - echo "" - echo "[GuiUnattended]" - echo "OEMSkipRegional=1" - echo "OemSkipWelcome=1" - echo "AdminPassword=*" - echo "TimeZone=0" - echo "AutoLogon=Yes" - echo "AutoLogonCount=65432" - echo "" - echo "[UserData]" - echo "FullName=\"Docker\"" - echo "ComputerName=\"*\"" - echo "OrgName=\"Windows for Docker\"" - echo "ProductKey=$key" - echo "" - echo "[Identification]" - echo "JoinWorkgroup = WORKGROUP" - echo "" - echo "[Networking]" - echo "InstallDefaultComponents=Yes" - echo "" - echo "[Branding]" - echo "BrandIEUsingUnattended=Yes" - echo "" - echo "[URL]" - echo "Home_Page = http://www.google.com" - echo "Search_Page = http://www.google.com" - echo "" - echo "[RegionalSettings]" - echo "Language=00000409" - echo "" - echo "[TerminalServices]" - echo "AllowConnections=1" - } | unix2dos > "$target/WINNT.SIF" - - { echo "Windows Registry Editor Version 5.00" - echo "" - echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security]" - echo "\"FirstRunDisabled\"=dword:00000001" - echo "\"AntiVirusOverride\"=dword:00000001" - echo "\"FirewallOverride\"=dword:00000001" - echo "\"FirewallDisableNotify\"=dword:00000001" - echo "\"UpdatesDisableNotify\"=dword:00000001" - echo "\"AntiVirusDisableNotify\"=dword:00000001" - echo "" - echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wscsvc]" - echo "\"Start\"=dword:00000004" - echo "" - echo "[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\WindowsFirewall\StandardProfile]" - echo "\"EnableFirewall\"=dword:00000000" - echo "" - echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess]" - echo "\"Start\"=dword:00000004" - echo - echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List]" - echo "\"3389:TCP\"=\"3389:TCP:*:Enabled:@xpsp2res.dll,-22009\"" - echo "" - echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]" - echo "\"LimitBlankPasswordUse\"=dword:00000000" - echo "" - echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]" - echo "\"RunCount\"=dword:00000000" - echo "" - echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]" - echo "\"HideFileExt\"=dword:00000000" - echo "" - echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" - echo "\"DefaultUserName\"=\"Docker\"" - echo "\"DefaultDomainName\"=\"Dockur\"" - echo "\"AltDefaultUserName\"=\"Docker\"" - echo "\"AltDefaultDomainName\"=\"Dockur\"" - echo "\"AutoAdminLogon\"=\"1\"" - } | unix2dos > "$dir/\$OEM\$/install.reg" - - { echo "Set WshShell = WScript.CreateObject(\"WScript.Shell\")" - echo "Set WshNetwork = WScript.CreateObject(\"WScript.Network\")" - echo "Set oMachine = GetObject(\"WinNT://\" & WshNetwork.ComputerName)" - echo "Set oInfoUser = GetObject(\"WinNT://\" & WshNetwork.ComputerName & \"/Administrator,user\")" - echo "Set oUser = oMachine.MoveHere(oInfoUser.ADsPath,\"Docker\")" - } | unix2dos > "$dir/\$OEM\$/admin.vbs" - - { echo "[COMMANDS]" - echo "\"REGEDIT /s install.reg\"" - echo "\"Wscript admin.vbs\"" - } | unix2dos > "$dir/\$OEM\$/cmdlines.txt" - - rm -rf "$drivers" - return 0 -} - -prepareLegacy() { - - local iso="$1" - local dir="$2" - - ETFS="boot.img" - BOOT_MODE="windows_legacy" - - rm -f "$dir/$ETFS" - - local len offset - len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") - offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") - - if ! dd "if=$iso" "of=$dir/$ETFS" bs=2048 "count=$len" "skip=$offset" status=none; then - error "Failed to extract boot image from ISO!" && exit 67 + warn "detected $desc, but no matching file called $DETECTED.xml exists, $FB." fi return 0 @@ -1026,6 +641,8 @@ prepareImage() { fi fi + [[ "${PLATFORM,,}" == "arm64" ]] && return 1 + if [[ "${DETECTED,,}" == "winxp"* ]]; then if ! prepareXP "$iso" "$dir"; then error "Failed to prepare Windows XP ISO!" && return 1 @@ -1044,7 +661,7 @@ updateImage() { local iso="$1" local dir="$2" local asset="/run/assets/$3" - local path src loc index result + local path src loc xml index result [ ! -s "$asset" ] || [ ! -f "$asset" ] && return 0 @@ -1054,7 +671,7 @@ updateImage() { src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then - BOOT_MODE="windows_legacy" + [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi @@ -1062,11 +679,12 @@ updateImage() { [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) if [ ! -f "$loc" ]; then - BOOT_MODE="windows_legacy" + [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 fi - info "Adding XML file for automatic installation..." + xml=$(basename "$asset") + info "Adding $xml for automatic installation..." index="1" result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') @@ -1076,7 +694,7 @@ updateImage() { fi if ! wimlib-imagex update "$loc" "$index" --command "add $asset /autounattend.xml" > /dev/null; then - warn "failed to add XML to ISO image, $FB" && return 1 + warn "failed to add $xml to ISO image, $FB" && return 1 fi return 0 @@ -1185,23 +803,25 @@ buildImage() { bootWindows() { + rm -rf "$TMP" + if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then - MACHINE=$(<"$STORAGE/windows.old") + [[ "${PLATFORM,,}" == "x64" ]] && MACHINE=$(<"$STORAGE/windows.old") fi - rm -rf "$TMP" return 0 fi # Migrations + [[ "${PLATFORM,,}" != "x64" ]] && return 0 + if [ -f "$STORAGE/windows.old" ]; then MACHINE=$(<"$STORAGE/windows.old") [ -z "$MACHINE" ] && MACHINE="q35" BOOT_MODE="windows_legacy" echo "$BOOT_MODE" > "$STORAGE/windows.mode" - rm -rf "$TMP" return 0 fi @@ -1227,12 +847,14 @@ bootWindows() { fi fi - rm -rf "$TMP" return 0 } ###################################### +! parseVersion && exit 58 +! detectCustom && exit 59 + if ! startInstall; then bootWindows && return 0 exit 68 @@ -1240,13 +862,13 @@ fi if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then if ! downloadImage "$ISO" "$VERSION"; then - rm -f "$ISO" + rm -f "$ISO" 2> /dev/null || true exit 61 fi fi -if ! extractImage "$ISO" "$DIR"; then - rm -f "$ISO" +if ! extractImage "$ISO" "$DIR" "$VERSION"; then + rm -f "$ISO" 2> /dev/null || true exit 62 fi diff --git a/src/mido.sh b/src/mido.sh index 642c7e9..3c3d1db 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -673,9 +673,6 @@ ending_summary() { for media in $media_download_failed_list; do media_download_failed_argument_list="$media_download_failed_argument_list ${media%%.iso}" done - - # shellcheck disable=SC2086 - echo_err "Attempted download failed!" fi # Exit codes diff --git a/src/power.sh b/src/power.sh index 7326f86..0b500fc 100644 --- a/src/power.sh +++ b/src/power.sh @@ -23,6 +23,21 @@ _trap() { done } +boot() { + + [ -f "$QEMU_END" ] && return 0 + + if [ -s "$QEMU_PTY" ]; then + if grep -iq " hard" "$QEMU_PTY"; then + info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." + return 0 + fi + fi + + error "Timeout while waiting for QEMU to boot the machine!" + return 0 +} + ready() { [ -f "$STORAGE/windows.boot" ] && return 0 From cafb187d26a78f60e490a5db845ef414cbbdfb69 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 30 Apr 2024 23:32:03 +0200 Subject: [PATCH 172/505] docs: Readme (#440) --- readme.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/readme.md b/readme.md index 6205235..b0510f2 100644 --- a/readme.md +++ b/readme.md @@ -78,28 +78,28 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ Select from the values below: - | **Value** | **Version** | **Edition** | **Size** | - |---|---|---|---| - | `win11` | Windows 11 | Pro | 6.4 GB | - | `win11e` | Windows 11 | Enterprise | 5.8 GB | - | `win10` | Windows 10 | Pro | 5.8 GB | - | `ltsc10` | Windows 10 | LTSC | 4.6 GB | - | `win10e` | Windows 10 | Enterprise | 5.2 GB | - | `win81` | Windows 8.1 | Pro | 4.2 GB | - | `win81e` | Windows 8.1 | Enterprise | 3.8 GB | - | `win7` | Windows 7 | Enterprise | 3.0 GB | - | `vista` | Windows Vista | Ultimate | 3.6 GB | - | `winxp` | Windows XP | Pro | 0.6 GB | - ||||| - | `2022` | Windows Server 2022 | Standard | 4.7 GB | - | `2019` | Windows Server 2019 | Standard | 5.3 GB | - | `2016` | Windows Server 2016 | Standard | 6.5 GB | - | `2012` | Windows Server 2012 | Standard | 4.3 GB | - | `2008` | Windows Server 2008 | Standard | 3.0 GB | - ||||| - | `core11` | Tiny 11 | Core | 2.1 GB | - | `tiny11` | Tiny 11 | 2311 | 3.8 GB | - | `tiny10` | Tiny 10 | 23H2 | 3.6 GB | + | **Value** | **Version** | **Size** | + |---|---|---| + | `win11` | Windows 11 Pro | 6.4 GB | + | `win11e` | Windows 11 Enterprise | 5.8 GB | + | `win10` | Windows 10 Pro | 5.8 GB | + | `ltsc10` | Windows 10 LTSC | 4.6 GB | + | `win10e` | Windows 10 Enterprise | 5.2 GB | + | `win81` | Windows 8.1 Pro | 4.2 GB | + | `win81e` | Windows 8.1 Enterprise | 3.8 GB | + | `win7` | Windows 7 Enterprise | 3.0 GB | + | `vista` | Windows Vista Ultimate | 3.6 GB | + | `winxp` | Windows XP Professional | 0.6 GB | + |||| + | `2022` | Windows Server 2022 | 4.7 GB | + | `2019` | Windows Server 2019 | 5.3 GB | + | `2016` | Windows Server 2016 | 6.5 GB | + | `2012` | Windows Server 2012 | 4.3 GB | + | `2008` | Windows Server 2008 | 3.0 GB | + |||| + | `core11` | Tiny 11 Core | 2.1 GB | + | `tiny11` | Tiny 11 | 3.8 GB | + | `tiny10` | Tiny 10 | 3.6 GB | To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). From 7e6a5d1b1d76049415b730411df9bade20f25d72 Mon Sep 17 00:00:00 2001 From: lly-c232733 <104374843+lly-c232733@users.noreply.github.com> Date: Wed, 1 May 2024 14:42:37 -0400 Subject: [PATCH 173/505] PR: Add ability to override image detection (#442) --- src/install.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index 70aec16..31687c2 100644 --- a/src/install.sh +++ b/src/install.sh @@ -533,7 +533,11 @@ detectImage() { local dir="$1" if [ -n "$CUSTOM" ]; then - DETECTED="" + if [ -f "/run/assets/custom.xml" ]; then + DETECTED="custom" + else + DETECTED="" + fi else if [ -z "$DETECTED" ] && [[ "$EXTERNAL" != [Yy1]* ]]; then DETECTED="$VERSION" From 63c6fc0808128a482718b0b165af892056ccab3a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 2 May 2024 01:09:28 +0200 Subject: [PATCH 174/505] fix: Revert PR (#445) --- src/install.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/install.sh b/src/install.sh index 31687c2..70aec16 100644 --- a/src/install.sh +++ b/src/install.sh @@ -533,11 +533,7 @@ detectImage() { local dir="$1" if [ -n "$CUSTOM" ]; then - if [ -f "/run/assets/custom.xml" ]; then - DETECTED="custom" - else - DETECTED="" - fi + DETECTED="" else if [ -z "$DETECTED" ] && [[ "$EXTERNAL" != [Yy1]* ]]; then DETECTED="$VERSION" From 0616eb344780587398f2ba29de171d70ec9dcd95 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 4 May 2024 13:28:12 +0200 Subject: [PATCH 175/505] feat: Improved installation (#453) --- .github/workflows/check.yml | 2 +- Dockerfile | 7 +- assets/win7x64.xml | 6 +- assets/winvistax64.xml | 6 +- readme.md | 117 +++-- src/define.sh | 892 +++++++++++++++++++++++------------- src/install.sh | 529 ++++++++++++--------- src/mido.sh | 2 +- src/power.sh | 6 +- src/samba.sh | 1 + 10 files changed, 955 insertions(+), 613 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index ea76481..2c1ce5a 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -21,5 +21,5 @@ jobs: uses: hadolint/hadolint-action@v3.1.0 with: dockerfile: Dockerfile - ignore: DL3008,DL4006,SC3037 + ignore: DL3008 failure-threshold: warning diff --git a/Dockerfile b/Dockerfile index 5334813..4184a68 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.27 / / +COPY --from=qemux/qemu-docker:5.00 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" @@ -12,14 +12,11 @@ RUN apt-get update && \ 7zip \ wsdd \ samba \ + wimtools \ dos2unix \ cabextract \ genisoimage \ libxml2-utils && \ - echo "deb http://deb.debian.org/debian/ sid main" >> /etc/apt/sources.list.d/sid.list && \ - echo -e "Package: *\nPin: release n=trixie\nPin-Priority: 900\nPackage: *\nPin: release n=sid\nPin-Priority: 400" | tee /etc/apt/preferences.d/preferences > /dev/null && \ - apt-get update && \ - apt-get -t sid --no-install-recommends -y install wimtools && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/assets/win7x64.xml b/assets/win7x64.xml index e0ae7e0..29c0ab7 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -52,8 +52,8 @@ <OSImage> <InstallFrom> <MetaData wcm:action="add"> - <Value>1</Value> - <Key>/IMAGE/INDEX</Key> + <Value>Windows 7 PROFESSIONAL</Value> + <Key>/IMAGE/NAME</Key> </MetaData> </InstallFrom> <InstallTo> @@ -76,7 +76,7 @@ <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> <ProductKey> - <Key>H7X92-3VPBB-Q799D-Y6JJ3-86WC6</Key> + <Key>HYF8J-CVRMY-CM74G-RPHKF-PW487</Key> <WillShowUI>OnError</WillShowUI> </ProductKey> </UserData> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index b613f6f..252e6ae 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -51,7 +51,7 @@ <OSImage> <InstallFrom> <MetaData wcm:action="add"> - <Value>Windows Vista Ultimate</Value> + <Value>Windows Vista BUSINESS</Value> <Key>/IMAGE/NAME</Key> </MetaData> </InstallFrom> @@ -68,7 +68,7 @@ <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> <ProductKey> - <Key>VMCB9-FDRV6-6CDQM-RV23K-RP8F7</Key> + <Key>4D2XH-PRBMM-8Q22B-K8BM3-MRW4W</Key> </ProductKey> </UserData> </component> @@ -100,7 +100,7 @@ </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <ComputerName>*</ComputerName> - <ProductKey>VMCB9-FDRV6-6CDQM-RV23K-RP8F7</ProductKey> + <ProductKey>4D2XH-PRBMM-8Q22B-K8BM3-MRW4W</ProductKey> <TimeZone>Pacific Standard Time</TimeZone> <OEMInformation> <Manufacturer>Dockur</Manufacturer> diff --git a/readme.md b/readme.md index b0510f2..c894f80 100644 --- a/readme.md +++ b/readme.md @@ -88,7 +88,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ | `win81` | Windows 8.1 Pro | 4.2 GB | | `win81e` | Windows 8.1 Enterprise | 3.8 GB | | `win7` | Windows 7 Enterprise | 3.0 GB | - | `vista` | Windows Vista Ultimate | 3.6 GB | + | `vista` | Windows Vista Enterprise | 3.0 GB | | `winxp` | Windows XP Professional | 0.6 GB | |||| | `2022` | Windows Server 2022 | 4.7 GB | @@ -103,37 +103,6 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). -* ### How do I connect using RDP? - - The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. - - So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `docker` and by leaving the password empty. - - There is a good RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. - -* ### How do I increase the amount of CPU or RAM? - - By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. - - To increase this, add the following environment variables: - - ```yaml - environment: - RAM_SIZE: "8G" - CPU_CORES: "4" - ``` - -* ### How do I change the size of the disk? - - To expand the default size of 64 GB, add the `DISK_SIZE` setting to your compose file and set it to your preferred capacity: - - ```yaml - environment: - DISK_SIZE: "256G" - ``` - - This can also be used to resize the existing disk to a larger capacity without any data loss. - * ### How do I change the storage location? To change the storage location, include the following bind mount in your compose file: @@ -145,40 +114,53 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ Replace the example path `/var/win` with the desired storage folder. +* ### How do I change the size of the disk? + + To expand the default size of 64 GB, add the `DISK_SIZE` setting to your compose file and set it to your preferred capacity: + + ```yaml + environment: + DISK_SIZE: "256G" + ``` + + This can also be used to resize the existing disk to a larger capacity without any data loss. + * ### How do I share files with the host? - Open File Explorer and click on the Network section, you will see a computer called `host.lan`, double-click it and it will show a folder called `Data`. + Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`, double-click it and it will show a folder called `Data`. - Inside this folder you can access any files that are placed in `/storage/shared` (see above) on the host. + Inside this folder you can access any files that are placed in `/storage/shared` (see above) on the host. You can optionally map it to a drive letter, for easy access. * ### How do I install a custom image? - In order to download a custom ISO image, start a fresh container with the URL of the ISO specified in the `VERSION` environment variable: + In order to download any ISO image that is not part of the list above, start a fresh container with the URL of that ISO specified in the `VERSION` environment variable, for example: ```yaml environment: VERSION: "https://example.com/win.iso" ``` - Alternatively, you can also use a local file directly, and skip the download, by binding it in your compose file in this way: + Alternatively, you can also use a local file directly, and skip the download altogether, by binding it in your compose file in this way: ```yaml volumes: - /home/user/example.iso:/storage/custom.iso ``` - Replace the example path `/home/user/example.iso` with the filename of the desired ISO file. The value of `VERSION` will be ignored in this case. + Replace the example path `/home/user/example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. * ### How do I customize the installation? - You can customize every setting used by the automatic installation. Download the XML file corresponding to your Windows version, for example [win11x64.xml](https://raw.githubusercontent.com/dockur/windows/master/assets/win11x64.xml). Then apply your modifications to it, and add this line to your compose file: + If you want to modify the settings used during the automatic installation, you can do this by editing the answer file corresponding to your Windows edition, for example [win11x64.xml](https://raw.githubusercontent.com/dockur/windows/master/assets/win11x64.xml) in the case of Windows 11 Pro. + + Apply your modifications to it, and add this line to your compose file: ```yaml volumes: - - /home/user/custom.xml:/run/assets/win11x64.xml + - /home/user/example.xml:/storage/custom.xml ``` - Replace the example path `/home/user/custom.xml` with the filename of the modified XML file. + Replace the example path `/home/user/example.xml` with the filename of the modified XML file. * ### How do I run a script after installation? @@ -189,7 +171,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ - /home/user/example:/storage/oem ``` - The example path `/home/user/example` will be copied to `C:\OEM` during installation and the containing `install.bat` will be executed. + The example folder `/home/user/example` will be copied to `C:\OEM` during installation and the containing `install.bat` will be executed during the last step. * ### How do I perform a manual installation? @@ -219,6 +201,37 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (E:). Double-click on `virtio-win-gt-x64.msi` and proceed to install the VirtIO drivers. Enjoy your brand new machine, and don't forget to star this repo! + +* ### How do I verify if my system supports KVM? + + To verify if your system supports KVM, run the following commands: + + ```bash + sudo apt install cpu-checker + sudo kvm-ok + ``` + + If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. + +* ### How do I increase the amount of CPU or RAM? + + By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. + + If there arises a need to increase this, add the following environment variables: + + ```yaml + environment: + RAM_SIZE: "8G" + CPU_CORES: "4" + ``` + +* ### How do I connect using RDP? + + The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. + + So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `docker` and by leaving the password empty. + + There is a good RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. * ### How do I assign an individual IP address to the container? @@ -272,21 +285,18 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ ``` Please note that in this mode, the container and Windows will each have their own separate IPs. The container will keep the macvlan IP, and Windows will use the DHCP IP. - + * ### How do I pass-through a disk? It is possible to pass-through disk devices directly by adding them to your compose file in this way: ```yaml - environment: - DEVICE: "/dev/sda" - DEVICE2: "/dev/sdb" devices: - - /dev/sda - - /dev/sdb + - /dev/sdb:/dev/disk1 + - /dev/sdc:/dev/disk2 ``` - Use `DEVICE` if you want it to become your main drive, and use `DEVICE2` and higher to add them as secondary drives. + Use `/dev/disk1` if you want it to become your main drive, and use `/dev/disk2` and higher to add them as secondary drives. * ### How do I pass-through a USB device? @@ -298,17 +308,6 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ devices: - /dev/bus/usb ``` - -* ### How do I verify if my system supports KVM? - - To verify if your system supports KVM, run the following commands: - - ```bash - sudo apt install cpu-checker - sudo kvm-ok - ``` - - If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. * ### Is this project legal? diff --git a/src/define.sh b/src/define.sh index 518e405..cd0e104 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1,11 +1,14 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${VERIFY:=""}" : "${MANUAL:=""}" : "${VERSION:=""}" : "${DETECTED:=""}" : "${PLATFORM:="x64"}" +MIRRORS=5 + parseVersion() { [ -z "$VERSION" ] && VERSION="win11" @@ -15,64 +18,74 @@ parseVersion() { fi case "${VERSION,,}" in - "11" | "win11" | "windows11" | "windows 11") + "11" | "win11" | "windows11" | "windows 11" ) VERSION="win11${PLATFORM,,}" ;; - "11e" | "win11e" | "windows11e" | "windows 11e") + "11e" | "win11e" | "windows11e" | "windows 11e" ) VERSION="win11${PLATFORM,,}-enterprise-eval" ;; - "10" | "win10" | "windows10" | "windows 10") + "10" | "win10" | "windows10" | "windows 10" ) VERSION="win10${PLATFORM,,}" ;; - "10e" | "win10e" | "windows10e" | "windows 10e") + "10e" | "win10e" | "windows10e" | "windows 10e" ) VERSION="win10${PLATFORM,,}-enterprise-eval" ;; - "8" | "81" | "8.1" | "win8" | "win81" | "windows 8" | "windows 8.1") + "8" | "81" | "8.1" | "win8" | "win81" | "windows 8" ) VERSION="win81${PLATFORM,,}" ;; - "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows8e" | "windows 8e") + "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" ) VERSION="win81${PLATFORM,,}-enterprise-eval" ;; - "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7") + "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" ) VERSION="win7${PLATFORM,,}" DETECTED="win7${PLATFORM,,}-enterprise" ;; - "vista" | "winvista" | "windowsvista" | "windows vista") + "vista" | "winvista" | "windowsvista" | "windows vista" ) VERSION="winvista${PLATFORM,,}" - DETECTED="winvista${PLATFORM,,}-ultimate" + DETECTED="winvista${PLATFORM,,}-enterprise" ;; - "xp" | "winxp" | "windowsxp" | "windows xp") + "xp" | "xp32" | "winxp" | "windowsxp" | "windows xp" ) VERSION="winxpx86" ;; - "xp64" | "winxp64" | "windowsxp64") + "xp64" | "winxp64" | "windowsxp64" | "windows xp 64" ) VERSION="winxpx64" ;; - "22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022") + "22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022" ) VERSION="win2022-eval" ;; - "19" | "2019" | "win19" | "win2019" | "windows2019" | "windows 2019") + "19" | "2019" | "win19" | "win2019" | "windows2019" | "windows 2019" ) VERSION="win2019-eval" ;; - "16" | "2016" | "win16" | "win2016" | "windows2016" | "windows 2016") + "16" | "2016" | "win16" | "win2016" | "windows2016" | "windows 2016" ) VERSION="win2016-eval" ;; - "2012" | "2012r2" | "win2012" | "win2012r2" | "windows2012" | "windows 2012") + "2012" | "2012r2" | "win2012" | "win2012r2" | "windows2012" | "windows 2012" ) VERSION="win2012r2-eval" ;; - "2008" | "2008r2" | "win2008" | "win2008r2" | "windows2008" | "windows 2008") + "2008" | "2008r2" | "win2008" | "win2008r2" | "windows2008" | "windows 2008" ) VERSION="win2008r2" ;; - "core11" | "core 11" | "tiny11" | "tiny 11") + "core11" | "core 11" ) + VERSION="core11" DETECTED="win11${PLATFORM,,}" ;; - "tiny10" | "tiny 10") + "tiny11" | "tiny 11" ) + VERSION="tiny11" + DETECTED="win11${PLATFORM,,}" + ;; + "tiny10" | "tiny 10" ) + VERSION="tiny10" DETECTED="win10${PLATFORM,,}-ltsc" ;; - "iot10" | "10iot" | "win10-iot" | "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval") + "iot11" | "11iot" | "win11-iot" | "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + DETECTED="win11${PLATFORM,,}-iot" + VERSION="win11${PLATFORM,,}-enterprise-iot-eval" + ;; + "iot10" | "10iot" | "win10-iot" | "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) DETECTED="win10${PLATFORM,,}-iot" VERSION="win10${PLATFORM,,}-enterprise-iot-eval" ;; - "ltsc10" | "10ltsc" | "win10-ltsc" | "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval") + "ltsc10" | "10ltsc" | "win10-ltsc" | "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) DETECTED="win10${PLATFORM,,}-ltsc" VERSION="win10${PLATFORM,,}-enterprise-ltsc-eval" ;; @@ -86,157 +99,262 @@ printVersion() { local id="$1" local desc="$2" - [[ "$id" == "win7"* ]] && desc="Windows 7" - [[ "$id" == "win8"* ]] && desc="Windows 8" - [[ "$id" == "win10"* ]] && desc="Windows 10" - [[ "$id" == "win11"* ]] && desc="Windows 11" - [[ "$id" == "winxp"* ]] && desc="Windows XP" - [[ "$id" == "winvista"* ]] && desc="Windows Vista" + case "${id,,}" in + "tiny11"* ) desc="Tiny 11" ;; + "tiny10"* ) desc="Tiny 10" ;; + "core11"* ) desc="Core 11" ;; + "win7"* ) desc="Windows 7" ;; + "win8"* ) desc="Windows 8" ;; + "win10"* ) desc="Windows 10" ;; + "win11"* ) desc="Windows 11" ;; + "winxp"* ) desc="Windows XP" ;; + "winvista"* ) desc="Windows Vista" ;; + "win2025"* ) desc="Windows Server 2025" ;; + "win2022"* ) desc="Windows Server 2022" ;; + "win2019"* ) desc="Windows Server 2019" ;; + "win2016"* ) desc="Windows Server 2016" ;; + "win2012"* ) desc="Windows Server 2012" ;; + "win2008"* ) desc="Windows Server 2008" ;; + esac - [[ "$id" == "win2025"* ]] && desc="Windows Server 2025" - [[ "$id" == "win2022"* ]] && desc="Windows Server 2022" - [[ "$id" == "win2019"* ]] && desc="Windows Server 2019" - [[ "$id" == "win2016"* ]] && desc="Windows Server 2016" - [[ "$id" == "win2012"* ]] && desc="Windows Server 2012" - [[ "$id" == "win2008"* ]] && desc="Windows Server 2008" - - [ -z "$desc" ] && desc="Windows" + if [ -z "$desc" ]; then + desc="Windows" + [[ "${PLATFORM,,}" != "x64" ]] && desc="$desc for ${PLATFORM}" + fi echo "$desc" return 0 } -getName() { +printEdition() { - local file="$1" + local id="$1" local desc="$2" + local result="" + local edition="" - [[ "${file,,}" == "win11"* ]] && desc="Windows 11" - [[ "${file,,}" == "win10"* ]] && desc="Windows 10" - [[ "${file,,}" == "win8"* ]] && desc="Windows 8" - [[ "${file,,}" == "win7"* ]] && desc="Windows 7" - [[ "${file,,}" == "winxp"* ]] && desc="Windows XP" - [[ "${file,,}" == "winvista"* ]] && desc="Windows Vista" - [[ "${file,,}" == "tiny10"* ]] && desc="Tiny 10" - [[ "${file,,}" == "tiny11"* ]] && desc="Tiny 11" - [[ "${file,,}" == "tiny11_core"* ]] && desc="Tiny 11 Core" - [[ "${file,,}" == *"windows11"* ]] && desc="Windows 11" - [[ "${file,,}" == *"windows10"* ]] && desc="Windows 10" - [[ "${file,,}" == *"windows8"* ]] && desc="Windows 8" - [[ "${file,,}" == *"windows7"* ]] && desc="Windows 7" - [[ "${file,,}" == *"windowsxp"* ]] && desc="Windows XP" - [[ "${file,,}" == *"windowsvista"* ]] && desc="Windows Vista" - [[ "${file,,}" == *"windows_11"* ]] && desc="Windows 11" - [[ "${file,,}" == *"windows_10"* ]] && desc="Windows 10" - [[ "${file,,}" == *"windows_8"* ]] && desc="Windows 8" - [[ "${file,,}" == *"windows_7"* ]] && desc="Windows 7" - [[ "${file,,}" == *"windows_xp"* ]] && desc="Windows XP" - [[ "${file,,}" == *"windows_vista"* ]] && desc="Windows Vista" - [[ "${file,,}" == *"windows 11"* ]] && desc="Windows 11" - [[ "${file,,}" == *"windows 10"* ]] && desc="Windows 10" - [[ "${file,,}" == *"windows 8"* ]] && desc="Windows 8" - [[ "${file,,}" == *"windows 7"* ]] && desc="Windows 7" - [[ "${file,,}" == *"windows xp"* ]] && desc="Windows XP" - [[ "${file,,}" == *"windows vista"* ]] && desc="Windows Vista" - [[ "${file,,}" == *"server2008"* ]] && desc="Windows Server 2008" - [[ "${file,,}" == *"server2012"* ]] && desc="Windows Server 2012" - [[ "${file,,}" == *"server2016"* ]] && desc="Windows Server 2016" - [[ "${file,,}" == *"server2019"* ]] && desc="Windows Server 2019" - [[ "${file,,}" == *"server2022"* ]] && desc="Windows Server 2022" - [[ "${file,,}" == *"server2025"* ]] && desc="Windows Server 2025" - [[ "${file,,}" == *"server_2008"* ]] && desc="Windows Server 2008" - [[ "${file,,}" == *"server_2012"* ]] && desc="Windows Server 2012" - [[ "${file,,}" == *"server_2016"* ]] && desc="Windows Server 2016" - [[ "${file,,}" == *"server_2019"* ]] && desc="Windows Server 2019" - [[ "${file,,}" == *"server_2022"* ]] && desc="Windows Server 2022" - [[ "${file,,}" == *"server_2025"* ]] && desc="Windows Server 2025" - [[ "${file,,}" == *"server 2008"* ]] && desc="Windows Server 2008" - [[ "${file,,}" == *"server 2012"* ]] && desc="Windows Server 2012" - [[ "${file,,}" == *"server 2016"* ]] && desc="Windows Server 2016" - [[ "${file,,}" == *"server 2019"* ]] && desc="Windows Server 2019" - [[ "${file,,}" == *"server 2022"* ]] && desc="Windows Server 2022" - [[ "${file,,}" == *"server 2025"* ]] && desc="Windows Server 2025" + result=$(printVersion "$id" "x") + [[ "$result" == "x" ]] && echo "$desc" && return 0 - [ -z "$desc" ] && desc="Windows" + case "${id,,}" in + "win7${PLATFORM,,}-home"* ) + edition="Home" + ;; + "win7${PLATFORM,,}-starter"* ) + edition="Starter" + ;; + "win7${PLATFORM,,}-ultimate"* ) + edition="Ultimate" + ;; + "win7${PLATFORM,,}-enterprise"* ) + edition="Enterprise" + ;; + "win7"* ) + edition="Professional" + ;; + "win8${PLATFORM,,}-enterprise"* ) + edition="Enterprise" + ;; + "win8"* ) + edition="Pro" + ;; + "win10${PLATFORM,,}-iot"* ) + edition="IoT" + ;; + "win10${PLATFORM,,}-ltsc"* ) + edition="LTSC" + ;; + "win10${PLATFORM,,}-home"* ) + edition="Home" + ;; + "win10${PLATFORM,,}-education"* ) + edition="Education" + ;; + "win10${PLATFORM,,}-enterprise"* ) + edition="Enterprise" + ;; + "win10"* ) + edition="Pro" + ;; + "win11${PLATFORM,,}-iot"* ) + edition="IoT" + ;; + "win11${PLATFORM,,}-home"* ) + edition="Home" + ;; + "win11${PLATFORM,,}-education"* ) + edition="Education" + ;; + "win11${PLATFORM,,}-enterprise"* ) + edition="Enterprise" + ;; + "win11"* ) + edition="Pro" + ;; + "winxp"* ) + edition="Professional" + ;; + "winvista${PLATFORM,,}-home"* ) + edition="Home" + ;; + "winvista${PLATFORM,,}-starter"* ) + edition="Starter" + ;; + "winvista${PLATFORM,,}-ultimate"* ) + edition="Ultimate" + ;; + "winvista${PLATFORM,,}-enterprise"* ) + edition="Enterprise" + ;; + "winvista"* ) + edition="Business" + ;; + "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* ) + edition="Standard" + ;; + esac + + [[ "${id,,}" == *"-eval" ]] && edition="$edition (Evaluation)" + [ -n "$edition" ] && result="$result $edition" + + echo "$result" + return 0 +} + +fromFile() { + + local id="" + local desc="$1" + local file="${1,,}" + + case "${file/ /_}" in + "win7"* | "win_7"* | *"windows7"* | *"windows_7"* ) + id="win7${PLATFORM,,}" + ;; + "win8"* | "win_8"* | *"windows8"* | *"windows_8"* ) + id="win81${PLATFORM,,}" + ;; + "win10"*| "win_10"* | *"windows10"* | *"windows_10"* ) + id="win10${PLATFORM,,}" + ;; + "win11"* | "win_11"* | *"windows11"* | *"windows_11"* ) + id="win11${PLATFORM,,}" + ;; + *"winxp"* | *"win_xp"* | *"windowsxp"* | *"windows_xp"* ) + id="winxpx86" + ;; + *"winvista"* | *"win_vista"* | *"windowsvista"* | *"windows_vista"* ) + id="winvista${PLATFORM,,}" + ;; + "tiny11core"* | "tiny11_core"* | "tiny_11_core"* ) + id="core11" + ;; + "tiny11"* | "tiny_11"* ) + id="tiny11" + ;; + "tiny10"* | "tiny_10"* ) + id="tiny10" + ;; + *"server2025"* | *"server_2025"* ) + id="win2025" + ;; + *"server2022"* | *"server_2022"* ) + id="win2022" + ;; + *"server2019"* | *"server_2019"* ) + id="win2019" + ;; + *"server2016"* | *"server_2016"* ) + id="win2016" + ;; + *"server2012"* | *"server_2012"* ) + id="win2012r2" + ;; + *"server2008"* | *"server_2008"* ) + id="win2008r2" + ;; + esac + + if [ -n "$id" ]; then + desc=$(printVersion "$id" "$desc") + fi echo "$desc" return 0 } +fromName() { + + local id="" + local name="$1" + + case "${name,,}" in + *"server 2025"* ) id="win2025" ;; + *"server 2022"* ) id="win2022" ;; + *"server 2019"* ) id="win2019" ;; + *"server 2016"* ) id="win2016" ;; + *"server 2012"* ) id="win2012r2" ;; + *"server 2008"* ) id="win2008r2" ;; + *"windows 7"* ) id="win7${PLATFORM,,}" ;; + *"windows 8"* ) id="win81${PLATFORM,,}" ;; + *"windows 10"* ) id="win10${PLATFORM,,}" ;; + *"windows 11"* ) id="win11${PLATFORM,,}" ;; + *"windows vista"* ) id="winvista${PLATFORM,,}" ;; + esac + + echo "$id" + return 0 +} + getVersion() { + local id local name="$1" - local detected="" - if [[ "${name,,}" == *"windows 7"* ]]; then - detected="win7${PLATFORM,,}" - [[ "${name,,}" == *"ultimate"* ]] && detected="win7${PLATFORM,,}-ultimate" - [[ "${name,,}" == *"enterprise"* ]] && detected="win7${PLATFORM,,}-enterprise" - fi + id=$(fromName "$name") - if [[ "${name,,}" == *"windows vista"* ]]; then - detected="winvista${PLATFORM,,}" - [[ "${name,,}" == *"ultimate"* ]] && detected="winvista${PLATFORM,,}-ultimate" - [[ "${name,,}" == *"enterprise"* ]] && detected="winvista${PLATFORM,,}-enterprise" - fi + case "${id,,}" in + "win7"* | "winvista"* ) + case "${name,,}" in + *" home"* ) id="$id-home" ;; + *" starter"* ) id="$id-starter" ;; + *" ultimate"* ) id="$id-ultimate" ;; + *" enterprise"* ) id="$id-enterprise" ;; + esac + ;; + "win8"* ) + case "${name,,}" in + *" enterprise evaluation"* ) id="$id-enterprise-eval" ;; + *" enterprise"* ) id="$id-enterprise" ;; + esac + ;; + "win10"* ) + case "${name,,}" in + *" iot"* ) id="$id-iot" ;; + *" ltsc"* ) id="$id-ltsc" ;; + *" home"* ) id="$id-home" ;; + *" education"* ) id="$id-education" ;; + *" enterprise evaluation"* ) id="$id-enterprise-eval" ;; + *" enterprise"* ) id="$id-enterprise" ;; + esac + ;; + "win11"* ) + case "${name,,}" in + *" iot"* ) id="$id-iot" ;; + *" home"* ) id="$id-home" ;; + *" education"* ) id="$id-education" ;; + *" enterprise evaluation"* ) id="$id-enterprise-eval" ;; + *" enterprise"* ) id="$id-enterprise" ;; + esac + ;; + "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* ) + case "${name,,}" in + *" evaluation"* ) id="$id-eval" ;; + esac + ;; + esac - if [[ "${name,,}" == *"server 2025"* ]]; then - detected="win2025" - [[ "${name,,}" == *"evaluation"* ]] && detected="win2025-eval" - fi - - if [[ "${name,,}" == *"server 2022"* ]]; then - detected="win2022" - [[ "${name,,}" == *"evaluation"* ]] && detected="win2022-eval" - fi - - if [[ "${name,,}" == *"server 2019"* ]]; then - detected="win2019" - [[ "${name,,}" == *"evaluation"* ]] && detected="win2019-eval" - fi - - if [[ "${name,,}" == *"server 2016"* ]]; then - detected="win2016" - [[ "${name,,}" == *"evaluation"* ]] && detected="win2016-eval" - fi - - if [[ "${name,,}" == *"server 2012"* ]]; then - detected="win2012r2" - [[ "${name,,}" == *"evaluation"* ]] && detected="win2012r2-eval" - fi - - if [[ "${name,,}" == *"server 2008"* ]]; then - detected="win2008r2" - [[ "${name,,}" == *"evaluation"* ]] && detected="win2008r2-eval" - fi - - if [[ "${name,,}" == *"windows 8"* ]]; then - detected="win81${PLATFORM,,}" - [[ "${name,,}" == *"enterprise"* ]] && detected="win81${PLATFORM,,}-enterprise" - [[ "${name,,}" == *"enterprise evaluation"* ]] && detected="win81${PLATFORM,,}-enterprise-eval" - fi - - if [[ "${name,,}" == *"windows 11"* ]]; then - detected="win11${PLATFORM,,}" - [[ "${name,,}" == *"enterprise"* ]] && detected="win11${PLATFORM,,}-enterprise" - [[ "${name,,}" == *"enterprise evaluation"* ]] && detected="win11${PLATFORM,,}-enterprise-eval" - fi - - if [[ "${name,,}" == *"windows 10"* ]]; then - detected="win10${PLATFORM,,}" - if [[ "${name,,}" == *" iot "* ]]; then - detected="win10${PLATFORM,,}-iot" - else - if [[ "${name,,}" == *"ltsc"* ]]; then - detected="win10${PLATFORM,,}-ltsc" - else - [[ "${name,,}" == *"enterprise"* ]] && detected="win10${PLATFORM,,}-enterprise" - [[ "${name,,}" == *"enterprise evaluation"* ]] && detected="win10${PLATFORM,,}-enterprise-eval" - fi - fi - fi - - echo "$detected" + echo "$id" return 0 } @@ -245,30 +363,20 @@ switchEdition() { local id="$1" case "${id,,}" in - "win11${PLATFORM,,}-enterprise-eval") + "win11${PLATFORM,,}-enterprise-eval" ) DETECTED="win11${PLATFORM,,}-enterprise" ;; - "win10${PLATFORM,,}-enterprise-eval") + "win10${PLATFORM,,}-enterprise-eval" ) DETECTED="win10${PLATFORM,,}-enterprise" ;; - "win81${PLATFORM,,}-enterprise-eval") + "win81${PLATFORM,,}-enterprise-eval" ) DETECTED="win81${PLATFORM,,}-enterprise" ;; - "win2022-eval") - DETECTED="win2022" - ;; - "win2019-eval") - DETECTED="win2019" - ;; - "win2016-eval") - DETECTED="win2016" - ;; - "win2012r2-eval") - DETECTED="win2012r2" - ;; - "win2008r2-eval") - DETECTED="win2008r2" - ;; + "win2022-eval" ) DETECTED="win2022" ;; + "win2019-eval" ) DETECTED="win2019" ;; + "win2016-eval" ) DETECTED="win2016" ;; + "win2012r2-eval" ) DETECTED="win2012r2" ;; + "win2008r2-eval" ) DETECTED="win2008r2" ;; esac return 0 @@ -279,12 +387,8 @@ isESD() { local id="$1" case "${id,,}" in - "win11${PLATFORM,,}") - return 0 - ;; - "win10${PLATFORM,,}") - return 0 - ;; + "win11${PLATFORM,,}" ) return 0 ;; + "win10${PLATFORM,,}" ) return 0 ;; esac return 1 @@ -295,164 +399,319 @@ isMido() { local id="$1" case "${id,,}" in - "win11${PLATFORM,,}" | "win11${PLATFORM,,}-enterprise-eval") - return 0 - ;; - "win10${PLATFORM,,}" | "win10${PLATFORM,,}-enterprise-eval" | "win10${PLATFORM,,}-enterprise-ltsc-eval") - return 0 - ;; - "win81${PLATFORM,,}" | "win81${PLATFORM,,}-enterprise-eval") - return 0 - ;; - "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" | "win2008r2") - return 0 - ;; + "win11${PLATFORM,,}" | "win11${PLATFORM,,}-enterprise-eval" ) + return 0 ;; + "win10${PLATFORM,,}" | "win10${PLATFORM,,}-enterprise-eval" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + return 0 ;; + "win81${PLATFORM,,}" | "win81${PLATFORM,,}-enterprise-eval" ) + return 0 ;; + "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" | "win2008r2" ) + return 0 ;; esac return 1 } -getLink() { +getLink1() { # Fallbacks for users who cannot connect to the Microsoft servers local id="$1" + local ret="$2" local url="" - local host="https://dl.bobpony.com" + local sum="" + local host="https://dl.bobpony.com/windows" case "${id,,}" in - "win11${PLATFORM,,}") - url="$host/windows/11/en-us_windows_11_23h2_${PLATFORM,,}.iso" + "win11${PLATFORM,,}" ) + sum="5bb1459034f50766ee480d895d751af73a4af30814240ae32ebc5633546a5af7" + url="$host/11/en-us_windows_11_23h2_${PLATFORM,,}.iso" ;; - "win10${PLATFORM,,}") - url="$host/windows/10/en-us_windows_10_22h2_${PLATFORM,,}.iso" + "win10${PLATFORM,,}" ) + sum="6673e2ab6c6939a74eceff2c2bb4d36feb94ff8a6f71700adef0f0b998fdcaca" + url="$host/10/en-us_windows_10_22h2_${PLATFORM,,}.iso" ;; - "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval") - url="$host/windows/10/en-us_windows_10_iot_enterprise_ltsc_2021_${PLATFORM,,}_dvd_257ad90f.iso" + "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) + sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" + url="$host/10/en-us_windows_10_iot_enterprise_ltsc_2021_${PLATFORM,,}_dvd_257ad90f.iso" ;; - "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval") - url="$host/windows/10/en-us_windows_10_enterprise_ltsc_2021_${PLATFORM,,}_dvd_d289cf96.iso" + "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" + url="$host/10/en-us_windows_10_enterprise_ltsc_2021_${PLATFORM,,}_dvd_d289cf96.iso" ;; - "win81${PLATFORM,,}") - url="$host/windows/8.x/8.1/en_windows_8.1_with_update_${PLATFORM,,}_dvd_6051480.iso" + "win81${PLATFORM,,}" ) + sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" + url="$host/8.x/8.1/en_windows_8.1_with_update_${PLATFORM,,}_dvd_6051480.iso" ;; - "win2022" | "win2022-eval") - url="$host/windows/server/2022/en-us_windows_server_2022_updated_jan_2024_${PLATFORM,,}_dvd_2b7a0c9f.iso" + "win2022" | "win2022-eval" ) + sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db" + url="$host/server/2022/en-us_windows_server_2022_updated_jan_2024_${PLATFORM,,}_dvd_2b7a0c9f.iso" ;; - "win2019" | "win2019-eval") - url="$host/windows/server/2019/en-us_windows_server_2019_updated_aug_2021_${PLATFORM,,}_dvd_a6431a28.iso" + "win2019" | "win2019-eval" ) + sum="0067afe7fdc4e61f677bd8c35a209082aa917df9c117527fc4b2b52a447e89bb" + url="$host/server/2019/en-us_windows_server_2019_updated_aug_2021_${PLATFORM,,}_dvd_a6431a28.iso" ;; - "win2016" | "win2016-eval") - url="$host/windows/server/2016/en_windows_server_2016_updated_feb_2018_${PLATFORM,,}_dvd_11636692.iso" + "win2016" | "win2016-eval" ) + sum="af06e5483c786c023123e325cea4775050324d9e1366f46850b515ae43f764be" + url="$host/server/2016/en_windows_server_2016_updated_feb_2018_${PLATFORM,,}_dvd_11636692.iso" ;; - "win2012r2" | "win2012r2-eval") - url="$host/windows/server/2012r2/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708-004.iso" + "win2012r2" | "win2012r2-eval" ) + sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" + url="$host/server/2012r2/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708-004.iso" ;; - "win2008r2" | "win2008r2-eval") - url="$host/windows/server/2008r2/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601-018.iso" + "win2008r2" | "win2008r2-eval" ) + sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" + url="$host/server/2008r2/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601-018.iso" ;; - "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise") - url="$host/windows/7/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" + "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise" ) + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="$host/7/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" ;; - "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-ultimate") - url="$host/windows/vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" + "win7${PLATFORM,,}-ultimate" ) + sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1" + url="$host/7/en_windows_7_with_sp1_${PLATFORM,,}.iso" ;; - "winxpx86") - url="$host/windows/xp/professional/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" + "winvista${PLATFORM,,}-ultimate" ) + sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" + url="$host/vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" ;; - "winxpx64") - url="$host/windows/xp/professional/en_win_xp_pro_${PLATFORM,,}_vl.iso" + "winxpx86" ) + sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" + url="$host/xp/professional/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" ;; - "core11") - url="https://file.cnxiaobai.com/Windows/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%20core%20${PLATFORM,,}%20beta%201.iso" - ;; - "tiny11") - url="https://file.cnxiaobai.com/Windows/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%202311%20${PLATFORM,,}.iso" - ;; - "tiny10") - url="https://file.cnxiaobai.com/Windows/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny10%2023H2%20${PLATFORM,,}.iso" + "winxpx64" ) + sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" + url="$host/xp/professional/en_win_xp_pro_${PLATFORM,,}_vl.iso" ;; esac + [ -z "$ret" ] && echo "$url" || echo "$sum" + return 0 +} + +getLink2() { + + local id="$1" + local ret="$2" + local url="" + local sum="" + local host="https://files.dog/MSDN" + + case "${id,,}" in + "win81${PLATFORM,,}" ) + sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" + url="$host/Windows%208.1%20with%20Update/en_windows_8.1_with_update_${PLATFORM,,}_dvd_6051480.iso" + ;; + "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) + sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" + url="$host/Windows%208.1%20with%20Update/en_windows_8.1_enterprise_with_update_${PLATFORM,,}_dvd_6054382.iso" + ;; + "win2012r2" | "win2012r2-eval" ) + sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" + url="$host/Windows%20Server%202012%20R2%20with%20Update/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708.iso" + ;; + "win2008r2" | "win2008r2-eval" ) + sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" + url="$host/Windows%20Server%202008%20R2/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601.iso" + ;; + "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise" ) + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="$host/Windows%207/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" + ;; + "win7${PLATFORM,,}-ultimate" ) + sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" + url="$host/Windows%207/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" + ;; + "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" ) + sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" + url="$host/Windows%20Vista/en_windows_vista_enterprise_sp2_${PLATFORM,,}_dvd_342332.iso" + ;; + "winvista${PLATFORM,,}-ultimate" ) + sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" + url="$host/Windows%20Vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" + ;; + "winxpx86" ) + sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" + url="$host/Windows%20XP/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" + ;; + "winxpx64" ) + sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" + url="$host/Windows%20XP/en_win_xp_pro_${PLATFORM,,}_vl.iso" + ;; + esac + + [ -z "$ret" ] && echo "$url" || echo "$sum" + return 0 +} + +getLink3() { + + local id="$1" + local ret="$2" + local url="" + local sum="" + local host="https://file.cnxiaobai.com/Windows" + + case "${id,,}" in + "core11" ) + sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" + url="$host/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%20core%20${PLATFORM,,}%20beta%201.iso" + ;; + "tiny11" ) + sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280" + url="$host/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%202311%20${PLATFORM,,}.iso" + ;; + "tiny10" ) + sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" + url="$host/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny10%2023H2%20${PLATFORM,,}.iso" + ;; + esac + + [ -z "$ret" ] && echo "$url" || echo "$sum" + return 0 +} + +getLink4() { + + # Fallbacks for users who cannot connect to the Microsoft servers + + local id="$1" + local ret="$2" + local url="" + local sum="" + local host="https://drive.massgrave.dev" + + case "${id,,}" in + "win11${PLATFORM,,}" ) + sum="a6c21313210182e0315054789a2b658b77394d5544b69b5341075492f89f51e5" + url="$host/en-us_windows_11_consumer_editions_version_23h2_updated_april_2024_${PLATFORM,,}_dvd_d986680b.iso" + ;; + "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) + sum="3d4d388d6ffa371956304fa7401347b4535fd10e3137978a8f7750b790a43521" + url="$host/en-us_windows_11_business_editions_version_23h2_updated_april_2024_${PLATFORM,,}_dvd_349cd577.iso" + ;; + "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + sum="5d9b86ad467bc89f488d1651a6c5ad3656a7ea923f9f914510657a24c501bb86" + url="$host/en-us_windows_11_iot_enterprise_version_23h2_${PLATFORM,,}_dvd_fb37549c.iso" + ;; + "win10${PLATFORM,,}" ) + sum="b072627c9b8d9f62af280faf2a8b634376f91dc73ea1881c81943c151983aa4a" + url="$host/en-us_windows_10_consumer_editions_version_22h2_updated_april_2024_${PLATFORM,,}_dvd_9a92dc89.iso" + ;; + "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) + sum="05fe9de04c2626bd00fbe69ad19129b2dbb75a93a2fe030ebfb2256d937ceab8" + url="$host/en-us_windows_10_business_editions_version_22h2_updated_april_2024_${PLATFORM,,}_dvd_c00090a7.iso" + ;; + "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) + sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" + url="$host/en-us_windows_10_iot_enterprise_ltsc_2021_${PLATFORM,,}_dvd_257ad90f.iso" + ;; + "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" + url="$host/en-us_windows_10_enterprise_ltsc_2021_${PLATFORM,,}_dvd_d289cf96.iso" + ;; + "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) + sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" + url="$host/en_windows_8.1_enterprise_with_update_${PLATFORM,,}_dvd_6054382.iso" + ;; + "win2022" | "win2022-eval" ) + sum="7f41d603224e8a0bf34ba957d3abf0a02437ab75000dd758b5ce3f050963e91f" + url="$host/en-us_windows_server_2022_updated_april_2024_${PLATFORM,,}_dvd_164349f3.iso" + ;; + "win2019" | "win2019-eval" ) + sum="4c5dd63efee50117986a2e38d4b3a3fbaf3c1c15e2e7ea1d23ef9d8af148dd2d" + url="$host/en_windows_server_2019_${PLATFORM,,}_dvd_4cb967d8.iso" + ;; + "win2016" | "win2016-eval" ) + sum="4caeb24b661fcede81cd90661aec31aa69753bf49a5ac247253dd021bc1b5cbb" + url="$host/en_windows_server_2016_${PLATFORM,,}_dvd_9327751.iso" + ;; + "win2012r2" | "win2012r2-eval" ) + sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" + url="$host/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708.iso" + ;; + "win2008r2" | "win2008r2-eval" ) + sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" + url="$host/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601.iso" + ;; + "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise" ) + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="$host/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" + ;; + "win7${PLATFORM,,}-ultimate" ) + sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" + url="$host/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" + ;; + "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" ) + sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" + url="$host/en_windows_vista_enterprise_sp2_${PLATFORM,,}_dvd_342332.iso" + ;; + "winvista${PLATFORM,,}-ultimate" ) + sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" + url="$host/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" + ;; + esac + + [ -z "$ret" ] && echo "$url" || echo "$sum" + return 0 +} + +getLink5() { + + local id="$1" + local ret="$2" + local url="" + local sum="" + local host="https://archive.org/download" + + case "${id,,}" in + "core11" ) + sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" + url="$host/tiny-11-core-x-64-beta-1/tiny11%20core%20${PLATFORM,,}%20beta%201.iso" + ;; + "tiny11" ) + sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280" + url="$host/tiny11-2311/tiny11%202311%20${PLATFORM,,}.iso" + ;; + "tiny10" ) + sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" + url="$host/tiny-10-23-h2/tiny10%20${PLATFORM,,}%2023h2.iso" + ;; + "winxpx86" ) + sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" + url="$host/XPPRO_SP3_ENU/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" + ;; + esac + + [ -z "$ret" ] && echo "$url" || echo "$sum" + return 0 +} + +getLink() { + + local url="" + local id="$2" + local func="getLink$1" + + if [ "$1" -gt 0 ] && [ "$1" -le "$MIRRORS" ]; then + url=$($func "$id" "") + fi + echo "$url" return 0 } -secondLink() { +getHash() { - # Fallbacks for users who cannot connect to the Microsoft servers + local sum="" + local id="$2" + local func="getLink$1" - local id="$1" - local url="" - local host="https://drive.massgrave.dev" + if [ "$1" -gt 0 ] && [ "$1" -le "$MIRRORS" ]; then + sum=$($func "$id" "sum") + fi - case "${id,,}" in - "win11${PLATFORM,,}") - url="$host/en-us_windows_11_consumer_editions_version_23h2_updated_april_2024_${PLATFORM,,}_dvd_d986680b.iso" - ;; - "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval") - url="$host/en-us_windows_11_business_editions_version_23h2_updated_april_2024_${PLATFORM,,}_dvd_349cd577.iso" - ;; - "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval") - url="$host/en-us_windows_11_iot_enterprise_version_23h2_${PLATFORM,,}_dvd_fb37549c.iso" - ;; - "win10${PLATFORM,,}") - url="$host/en-us_windows_10_consumer_editions_version_22h2_updated_april_2024_${PLATFORM,,}_dvd_9a92dc89.iso" - ;; - "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval") - url="$host/en-us_windows_10_business_editions_version_22h2_updated_april_2024_${PLATFORM,,}_dvd_c00090a7.iso" - ;; - "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval") - url="$host/en-us_windows_10_iot_enterprise_ltsc_2021_${PLATFORM,,}_dvd_257ad90f.iso" - ;; - "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval") - url="$host/en-us_windows_10_enterprise_ltsc_2021_${PLATFORM,,}_dvd_d289cf96.iso" - ;; - "win81${PLATFORM,,}") - url="$host/en_windows_8.1_pro_vl_with_update_${PLATFORM,,}_dvd_6050880.iso" - ;; - "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval") - url="$host/en_windows_8.1_enterprise_with_update_${PLATFORM,,}_dvd_6054382.iso" - ;; - "win2022" | "win2022-eval") - url="$host/en-us_windows_server_2022_updated_april_2024_${PLATFORM,,}_dvd_164349f3.iso" - ;; - "win2019" | "win2019-eval") - url="$host/en_windows_server_2019_${PLATFORM,,}_dvd_4cb967d8.iso" - ;; - "win2016" | "win2016-eval") - url="$host/en_windows_server_2016_${PLATFORM,,}_dvd_9327751.iso" - ;; - "win2012r2" | "win2012r2-eval") - url="$host/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708.iso" - ;; - "win2008r2" | "win2008r2-eval") - url="$host/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601.iso" - ;; - "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise") - url="$host/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" - ;; - "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-ultimate") - url="$host/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" - ;; - "winxpx86") - url="$host/en_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73974.iso" - ;; - "winxpx64") - url="$host/en_win_xp_pro_${PLATFORM,,}_with_sp2_vl_x13-41611.iso" - ;; - "core11") - url="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20${PLATFORM,,}%20beta%201.iso" - ;; - "tiny11") - url="https://archive.org/download/tiny11-2311/tiny11%202311%20${PLATFORM,,}.iso" - ;; - "tiny10") - url="https://archive.org/download/tiny-10-23-h2/tiny10%20${PLATFORM,,}%2023h2.iso" - ;; - esac - - echo "$url" + echo "$sum" return 0 } @@ -464,11 +723,12 @@ validVersion() { isESD "$id" && return 0 isMido "$id" && return 0 - url=$(getLink "$id") - [ -n "$url" ] && return 0 + for ((i=1;i<=MIRRORS;i++)); do - url=$(secondLink "$id") - [ -n "$url" ] && return 0 + url=$(getLink "$i" "$id") + [ -n "$url" ] && return 0 + + done return 1 } @@ -526,6 +786,10 @@ configXP() { cp "$drivers/NetKVM/xp/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" cp "$drivers/NetKVM/xp/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + if [ ! -f "$target/TXTSETUP.SIF" ]; then + error "The file TXTSETUP.SIF could not be found!" && return 1 + fi + sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF" sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF" @@ -550,17 +814,24 @@ configXP() { sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" - # Windows XP Pro generic key (no activation) - local key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - - local pid setup + local key pid setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1) pid=$(<"$setup") pid="${pid:(-4)}" pid="${pid:0:3}" if [[ "$pid" == "270" ]]; then - info "Warning: this ISO requires a volume license, it will reject the generic key during installation." + info "Warning: this XP version requires a volume license, it will reject the generic key during installation." + fi + + if [[ "${arch,,}" == "x86" ]]; then + # Windows XP Professional x86 generic key (no activation, trial-only) + # This is not a pirated key, it comes from the official MS documentation. + key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + else + # Windows XP Professional x64 generic key (no activation, trial-only) + # This is not a pirated key, it comes from the official MS documentation. + key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" fi find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; @@ -683,13 +954,12 @@ prepareXP() { local dir="$2" MACHINE="pc-q35-2.10" - BOOT_MODE="windows_legacy" ETFS="[BOOT]/Boot-NoEmul.img" [[ "$MANUAL" == [Yy1]* ]] && return 0 configXP "$dir" && return 0 - error "Failed to generate XP configuration files!" && exit 66 + return 1 } prepareLegacy() { @@ -698,19 +968,15 @@ prepareLegacy() { local dir="$2" ETFS="boot.img" - BOOT_MODE="windows_legacy" - rm -f "$dir/$ETFS" local len offset len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") - if ! dd "if=$iso" "of=$dir/$ETFS" bs=2048 "count=$len" "skip=$offset" status=none; then - error "Failed to extract boot image from ISO!" && exit 67 - fi + dd "if=$iso" "of=$dir/$ETFS" bs=2048 "count=$len" "skip=$offset" status=none && return 0 - return 0 + return 1 } return 0 diff --git a/src/install.sh b/src/install.sh index 70aec16..a95049c 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash set -Eeuo pipefail -ESD_URL="" TMP="$STORAGE/tmp" DIR="$TMP/unpack" FB="falling back to manual installation!" @@ -28,6 +27,78 @@ skipInstall() { return 1 } +startInstall() { + + html "Starting Windows..." + + [ -z "$MANUAL" ] && MANUAL="N" + + if [ -f "$STORAGE/$CUSTOM" ]; then + + BASE="$CUSTOM" + + else + + CUSTOM="" + + if [[ "${VERSION,,}" != "http"* ]]; then + + BASE="$VERSION.iso" + + else + + BASE=$(basename "${VERSION%%\?*}") + : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" + BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') + + fi + fi + + if [[ "${PLATFORM,,}" == "x64" ]]; then + ! migrateFiles "$BASE" "$VERSION" && error "Migration failed!" && exit 57 + fi + + if skipInstall; then + if [ ! -f "$STORAGE/$BASE" ]; then + BASE="custom.iso" + [ ! -f "$STORAGE/$BASE" ] && BASE="" + fi + [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" + return 1 + fi + + if [ -f "$STORAGE/$BASE" ]; then + + # Check if the ISO was already processed by our script + local magic="" + magic=$(dd if="$STORAGE/$BASE" seek=0 bs=1 count=1 status=none | tr -d '\000') + magic="$(printf '%s' "$magic" | od -A n -t x1 -v | tr -d ' \n')" + + if [[ "$magic" == "16" ]]; then + + if hasDisk || [[ "$MANUAL" == [Yy1]* ]]; then + return 1 + fi + + fi + + CUSTOM="$BASE" + + fi + + rm -rf "$TMP" + mkdir -p "$TMP" + + if [ ! -f "$STORAGE/$CUSTOM" ]; then + CUSTOM="" + ISO="$TMP/$BASE" + else + ISO="$STORAGE/$CUSTOM" + fi + + return 0 +} + finishInstall() { local iso="$1" @@ -44,12 +115,12 @@ finishInstall() { fi fi - rm -f "$STORAGE/windows.ver" rm -f "$STORAGE/windows.old" rm -f "$STORAGE/windows.boot" rm -f "$STORAGE/windows.mode" cp /run/version "$STORAGE/windows.ver" + echo "$BASE" > "$STORAGE/windows.base" if [[ "${PLATFORM,,}" == "x64" ]]; then if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then @@ -87,92 +158,32 @@ abortInstall() { return 1 } -startInstall() { - - html "Starting Windows..." - - [ -z "$MANUAL" ] && MANUAL="N" - - if [ -f "$STORAGE/$CUSTOM" ]; then - - EXTERNAL="Y" - BASE="$CUSTOM" - - else - - CUSTOM="" - - if [[ "${VERSION,,}" != "http"* ]]; then - - EXTERNAL="N" - BASE="$VERSION.iso" - - else - - EXTERNAL="Y" - BASE=$(basename "${VERSION%%\?*}") - : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" - BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') - - fi - fi - - if [[ "${PLATFORM,,}" == "x64" ]]; then - ! migrateFiles "$BASE" "$VERSION" && error "Migration failed!" && exit 57 - fi - - if skipInstall; then - [ ! -f "$STORAGE/$BASE" ] && BASE="" - [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" - return 1 - fi - - if [ -f "$STORAGE/$BASE" ]; then - - # Check if the ISO was already processed by our script - local magic="" - magic=$(dd if="$STORAGE/$BASE" seek=0 bs=1 count=1 status=none | tr -d '\000') - magic="$(printf '%s' "$magic" | od -A n -t x1 -v | tr -d ' \n')" - - if [[ "$magic" == "16" ]]; then - - if hasDisk || [[ "$MANUAL" == [Yy1]* ]]; then - return 1 - fi - - fi - - EXTERNAL="Y" - CUSTOM="$BASE" - - fi - - rm -rf "$TMP" - mkdir -p "$TMP" - - if [ ! -f "$STORAGE/$CUSTOM" ]; then - CUSTOM="" - ISO="$TMP/$BASE" - else - ISO="$STORAGE/$CUSTOM" - fi - - return 0 -} - detectCustom() { - CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname windows.iso -printf "%f\n" | head -n 1) - [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) - [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname boot.iso -printf "%f\n" | head -n 1) - [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) + CUSTOM="" + local file size - if [ -z "$CUSTOM" ] && [[ "${VERSION,,}" != "http"* ]]; then - FN="${VERSION/\/storage\//}" - [[ "$FN" == "."* ]] && FN="${FN:1}" - CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "$FN" -printf "%f\n" | head -n 1) + if [[ "${VERSION,,}" != "http"* ]]; then + file="${VERSION/\/storage\//}" + [[ "$file" == "."* ]] && file="${file:1}" + [[ "$file" == *"/"* ]] && file="" + [ -n "$file" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "$file" -printf "%f\n" | head -n 1) fi + [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) + [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) + [ -z "$CUSTOM" ] && return 0 + + size="$(stat -c%s "$STORAGE/$CUSTOM")" + + if [ -z "$size" ] || [[ "$size" == "0" ]]; then + CUSTOM="" + return 0 + fi + + file="windows.$size.iso" + [ -s "$STORAGE/$file" ] && CUSTOM="$file" + return 0 } @@ -183,15 +194,9 @@ getESD() { local winCatalog size case "${version,,}" in - "win11${PLATFORM,,}") - winCatalog="https://go.microsoft.com/fwlink?linkid=2156292" - ;; - "win10${PLATFORM,,}") - winCatalog="https://go.microsoft.com/fwlink/?LinkId=841361" - ;; - *) - error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 - ;; + "win11${PLATFORM,,}" ) winCatalog="https://go.microsoft.com/fwlink?linkid=2156292" ;; + "win10${PLATFORM,,}" ) winCatalog="https://go.microsoft.com/fwlink/?LinkId=841361" ;; + *) error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 ;; esac local msg="Downloading product information from Microsoft..." @@ -235,9 +240,9 @@ getESD() { error "Failed to find Windows product in $eFile!" && return 1 fi - ESD_URL=$(xmllint --nonet --xpath '//FilePath' "$dir/$eFile" | sed -E -e 's/<[\/]?FilePath>//g') + ESD=$(xmllint --nonet --xpath '//FilePath' "$dir/$eFile" | sed -E -e 's/<[\/]?FilePath>//g') - if [ -z "$ESD_URL" ]; then + if [ -z "$ESD" ]; then error "Failed to find ESD URL in $eFile!" && return 1 fi @@ -277,12 +282,36 @@ doMido() { return 1 } +verifyFile() { + + local iso="$1" + local check="$2" + local hash="" + + [ -z "$check" ] && return 0 + + html "Verifying downloaded ISO..." + info "Calculating SHA256 checksum of the ISO file..." + + hash=$(sha256sum "$iso" | cut -f1 -d' ') + + if [[ "$hash" == "$check" ]]; then + info "Succesfully verified that the checksum was correct!" && return 0 + fi + + error "Invalid sha256 checksum: $hash , but expected value is: $check ! Please report this at $SUPPORT/issues" + + rm -f "$iso" + return 1 +} + downloadFile() { local iso="$1" local url="$2" - local desc="$3" - local rc progress domain + local sum="$3" + local desc="$4" + local rc progress domain dots rm -f "$iso" @@ -296,8 +325,12 @@ downloadFile() { local msg="Downloading $desc..." domain=$(echo "$url" | awk -F/ '{print $3}') - domain=$(expr "$domain" : '.*\.\(.*\..*\)') - [[ "${domain,,}" != *"microsoft.com" ]] && msg="Downloading $desc from $domain..." + dots=$(echo "$domain" | tr -cd '.' | wc -c) + (( dots > 1 )) && domain=$(expr "$domain" : '.*\.\(.*\..*\)') + + if [ -n "$domain" ] && [[ "${domain,,}" != *"microsoft.com" ]]; then + msg="Downloading $desc from $domain..." + fi info "$msg" && html "$msg" /run/progress.sh "$iso" "Downloading $desc ([P])..." & @@ -308,13 +341,16 @@ downloadFile() { if (( rc == 0 )) && [ -f "$iso" ]; then if [ "$(stat -c%s "$iso")" -gt 100000000 ]; then + if [[ "$VERIFY" == [Yy1]* ]] && [ -n "$sum" ]; then + ! verifyFile "$iso" "$sum" && return 1 + fi html "Download finished successfully..." && return 0 fi fi - rm -f "$iso" error "Failed to download $url , reason: $rc" + rm -f "$iso" return 1 } @@ -323,25 +359,19 @@ downloadImage() { local iso="$1" local version="$2" local tried="n" - local url desc + local url sum desc if [[ "${version,,}" == "http"* ]]; then - - desc=$(getName "$BASE" "$BASE") - downloadFile "$iso" "$version" "$desc" && return 0 + desc=$(fromFile "$BASE") + downloadFile "$iso" "$version" "" "$desc" && return 0 return 1 - fi if ! validVersion "$version"; then error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 fi - if [[ "${PLATFORM,,}" == "x64" ]]; then - desc=$(printVersion "$version" "Windows") - else - desc=$(printVersion "$version" "Windows for ${PLATFORM}") - fi + desc=$(printVersion "$version" "") if [[ "${PLATFORM,,}" == "x64" ]]; then if isMido "$version"; then @@ -361,37 +391,26 @@ downloadImage() { if getESD "$TMP/esd" "$version"; then ISO="$TMP/$version.esd" - downloadFile "$ISO" "$ESD_URL" "$desc" && return 0 + downloadFile "$ISO" "$ESD" "" "$desc" && return 0 ISO="$TMP/$BASE" fi fi - url=$(getLink "$version") + for ((i=1;i<=MIRRORS;i++)); do - if [ -n "$url" ]; then + url=$(getLink "$i" "$version") - if [[ "$tried" != "n" ]]; then - info "Failed to download $desc from Microsoft, will try another mirror now..." + if [ -n "$url" ]; then + if [[ "$tried" != "n" ]]; then + info "Failed to download $desc, will try another mirror now..." + fi + tried="y" + sum=$(getHash "$i" "$version") + downloadFile "$iso" "$url" "$sum" "$desc" && return 0 fi - tried="y" - downloadFile "$iso" "$url" "$desc" && return 0 - - fi - - url=$(secondLink "$version") - - if [ -n "$url" ]; then - - if [[ "$tried" != "n" ]]; then - info "Failed to download $desc, will try another mirror now..." - fi - - tried="y" - downloadFile "$iso" "$url" "$desc" && return 0 - - fi + done return 1 } @@ -450,21 +469,21 @@ extractESD() { error "Adding Windows Setup failed" && return ${retVal} } + 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 edition imageIndex imageEdition case "${version,,}" in - "win11${PLATFORM,,}") - edition="11 pro" - ;; - "win10${PLATFORM,,}") - edition="10 pro" - ;; - *) - error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 - ;; + "win11${PLATFORM,,}" ) edition="11 pro" ;; + "win10${PLATFORM,,}" ) edition="10 pro" ;; + *) error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 ;; esac for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do @@ -485,11 +504,14 @@ extractImage() { local iso="$1" local dir="$2" local version="$3" - local desc="downloaded ISO" + local desc="local ISO" local size size_gb space space_gb - if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then - desc=$(printVersion "$version" "downloaded ISO") + if [ -z "$CUSTOM" ]; then + desc="downloaded ISO" + if [[ "$version" != "http"* ]]; then + desc=$(printVersion "$version" "$desc") + fi fi if [[ "${iso,,}" == *".esd" ]]; then @@ -498,7 +520,6 @@ extractImage() { fi local msg="Extracting $desc image..." - [ -n "$CUSTOM" ] && msg="Extracting local ISO image..." info "$msg" && html "$msg" rm -rf "$dir" @@ -523,56 +544,119 @@ extractImage() { error "Failed to extract ISO file: $iso" && return 1 fi + LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p') + + return 0 +} + +setXML() { + + [[ "$MANUAL" == [Yy1]* ]] && return 0 + + local file="$STORAGE/custom.xml" + [ -f "$file" ] && [ -s "$file" ] && XML="$file" && return 0 + + file="/run/assets/custom.xml" + [ -f "$file" ] && [ -s "$file" ] && XML="$file" && return 0 + + file="$1" + [ -z "$file" ] && file="/run/assets/$DETECTED.xml" + [ -f "$file" ] && [ -s "$file" ] && XML="$file" && return 0 + + return 1 +} + +selectVersion() { + + local tag="$1" + local xml="$2" + local id find name prefer + + name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$xml") + [[ "$name" == *"Operating System"* ]] && name="" + [ -z "$name" ] && return 0 + + id=$(fromName "$name") + [ -z "$id" ] && warn "Unknown ${tag,,}: '$name'" && return 0 + + prefer="$id-enterprise" + [ -f "/run/assets/$prefer.xml" ] && find=$(printEdition "$prefer" "") || find="" + if [ -n "$find" ] && [[ "${xml,,}" == *"<${tag,,}>${find,,}</${tag,,}>"* ]]; then + echo "$prefer" && return 0 + fi + + prefer="$id-ultimate" + [ -f "/run/assets/$prefer.xml" ] && find=$(printEdition "$prefer" "") || find="" + if [ -n "$find" ] && [[ "${xml,,}" == *"<${tag,,}>${find,,}</${tag,,}>"* ]]; then + echo "$prefer" && return 0 + fi + + prefer="$id" + [ -f "/run/assets/$prefer.xml" ] && find=$(printEdition "$prefer" "") || find="" + if [ -n "$find" ] && [[ "${xml,,}" == *"<${tag,,}>${find,,}</${tag,,}>"* ]]; then + echo "$prefer" && return 0 + fi + + prefer=$(getVersion "$name") + + echo "$prefer" + return 0 +} + +detectVersion() { + + local xml="$1" + local id="" + + id=$(selectVersion "DISPLAYNAME" "$xml") + [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0 + + id=$(selectVersion "PRODUCTNAME" "$xml") + [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0 + + id=$(selectVersion "NAME" "$xml") + [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0 + return 0 } detectImage() { - XML="" - local dsc local dir="$1" + local version="$2" + local desc msg + + XML="" if [ -n "$CUSTOM" ]; then DETECTED="" else - if [ -z "$DETECTED" ] && [[ "$EXTERNAL" != [Yy1]* ]]; then - DETECTED="$VERSION" + if [ -z "$DETECTED" ] && [[ "${version,,}" != "http"* ]]; then + DETECTED="$version" fi fi if [ -n "$DETECTED" ]; then - if [ -f "/run/assets/$DETECTED.xml" ]; then - [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" - return 0 - fi + [[ "${DETECTED,,}" == "winxp"* ]] && return 0 - if [[ "${DETECTED,,}" != "winxp"* ]]; then - - dsc=$(printVersion "$DETECTED" "$DETECTED") - - warn "got $dsc, but no matching file called $DETECTED.xml exists, $FB." - fi + setXML "" && return 0 + desc=$(printEdition "$DETECTED" "this version") + warn "the answer file for $desc was not found ($DETECTED.xml), $FB." return 0 fi - info "Detecting Windows version from ISO image..." + info "Detecting version from ISO image..." - if [[ "${PLATFORM,,}" == "x64" ]]; then - if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then - if [ -d "$dir/AMD64" ]; then - DETECTED="winxpx64" - else - DETECTED="winxpx86" - fi - dsc=$(printVersion "$DETECTED" "$DETECTED") - info "Detected: $dsc" - return 0 - fi + if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then + [ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86" + desc=$(printEdition "$DETECTED" "Windows XP") + info "Detected: $desc" + return 0 fi - local src loc tag result name name2 desc + local src loc info src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then @@ -588,33 +672,26 @@ detectImage() { warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1 fi - tag="DISPLAYNAME" - result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') - name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") - DETECTED=$(getVersion "$name") + info=$(wimlib-imagex info -xml "$loc" | tr -d '\000') + DETECTED=$(detectVersion "$info") if [ -z "$DETECTED" ]; then - - tag="PRODUCTNAME" - name2=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") - [ -z "$name" ] && name="$name2" - DETECTED=$(getVersion "$name2") - + msg="Failed to determine Windows version from image" + setXML "" && info "${msg}!" && return 0 + warn "${msg}, $FB" && return 0 fi - if [ -z "$DETECTED" ]; then - warn "failed to determine Windows version from string '$name', $FB" && return 0 - fi + desc=$(printEdition "$DETECTED" "$DETECTED") - desc=$(printVersion "$DETECTED" "$DETECTED") + info "Detected: $desc" + setXML "" && return 0 - if [ -f "/run/assets/$DETECTED.xml" ]; then - [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" - info "Detected: $desc" - else - warn "detected $desc, but no matching file called $DETECTED.xml exists, $FB." - fi + msg="the answer file for $desc was not found ($DETECTED.xml)" + local fallback="/run/assets/${DETECTED%%-*}.xml" + setXML "$fallback" && warn "${msg}." && return 0 + + warn "${msg}, $FB." return 0 } @@ -622,45 +699,41 @@ prepareImage() { local iso="$1" local dir="$2" + local missing + + case "${DETECTED,,}" in + "winxp"* ) + BOOT_MODE="windows_legacy" + prepareXP "$iso" "$dir" && return 0 + error "Failed to prepare Windows XP ISO!" && return 1 + ;; + "winvista"* | "win7"* | "win2008"* ) + BOOT_MODE="windows_legacy" ;; + esac if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then - if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then - if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; then - if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then - return 0 - fi + [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ] && return 0 - if [ ! -f "$dir/$ETFS" ]; then - warn "failed to locate file 'etfsboot.com' in ISO image, falling back to legacy boot!" - else - warn "failed to locate file 'efisys_noprompt.bin' in ISO image, falling back to legacy boot!" - fi + missing=$(basename "$dir/$EFISYS") + [ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS") + warn "failed to locate file '${missing,,}' in ISO image!" - fi - fi + [[ "${PLATFORM,,}" == "arm64" ]] && return 1 + BOOT_MODE="windows_legacy" fi - [[ "${PLATFORM,,}" == "arm64" ]] && return 1 + prepareLegacy "$iso" "$dir" && return 0 - if [[ "${DETECTED,,}" == "winxp"* ]]; then - if ! prepareXP "$iso" "$dir"; then - error "Failed to prepare Windows XP ISO!" && return 1 - fi - else - if ! prepareLegacy "$iso" "$dir"; then - error "Failed to prepare Windows ISO!" && return 1 - fi - fi - - return 0 + error "Failed to extract boot image from ISO!" + return 1 } updateImage() { local iso="$1" local dir="$2" - local asset="/run/assets/$3" + local asset="$3" local path src loc xml index result [ ! -s "$asset" ] || [ ! -f "$asset" ] && return 0 @@ -694,17 +767,20 @@ updateImage() { fi if ! wimlib-imagex update "$loc" "$index" --command "add $asset /autounattend.xml" > /dev/null; then - warn "failed to add $xml to ISO image, $FB" && return 1 + warn "failed to add answer file ($xml) to ISO image, $FB" && return 1 fi return 0 } copyOEM() { + local dir="$1" - local folder="$STORAGE/oem" + local folder="/oem" local src + [ ! -d "$folder" ] && folder="/OEM" + [ ! -d "$folder" ] && folder="$STORAGE/OEM" [ ! -d "$folder" ] && folder="$STORAGE/OEM" [ ! -d "$folder" ] && folder="$STORAGE/shared/oem" [ ! -d "$folder" ] && folder="$STORAGE/shared/OEM" @@ -734,12 +810,10 @@ buildImage() { local dir="$1" local failed="N" local cat="BOOT.CAT" - local label="${BASE%.*}" local log="/run/shm/iso.log" local size size_gb space space_gb desc + local out="$TMP/${BASE%.*}.tmp" - label="${label::30}" - local out="$TMP/$label.tmp" rm -f "$out" desc=$(printVersion "$DETECTED" "ISO") @@ -756,9 +830,11 @@ buildImage() { error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 fi + [ -z "$LABEL" ] && LABEL="Windows" + if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then - if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ + if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log"; then failed="Y" fi @@ -767,7 +843,7 @@ buildImage() { if [[ "${DETECTED,,}" != "winxp"* ]]; then - if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ + if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ -udf -allow-limited-size -quiet "$dir" 2> "$log"; then failed="Y" fi @@ -775,7 +851,7 @@ buildImage() { else if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ - -relaxed-filenames -V "$label" -quiet "$dir" 2> "$log"; then + -relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log"; then failed="Y" fi @@ -872,7 +948,7 @@ if ! extractImage "$ISO" "$DIR" "$VERSION"; then exit 62 fi -if ! detectImage "$DIR"; then +if ! detectImage "$DIR" "$VERSION"; then abortInstall "$ISO" && return 0 exit 60 fi @@ -888,7 +964,8 @@ if ! updateImage "$ISO" "$DIR" "$XML"; then fi if ! rm -f "$ISO" 2> /dev/null; then - BASE="windows.iso" + size="$(stat -c%s "$ISO")" + BASE="windows.$size.iso" ISO="$STORAGE/$BASE" rm -f "$ISO" fi diff --git a/src/mido.sh b/src/mido.sh index 3c3d1db..870061d 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -388,7 +388,7 @@ consumer_download() { # Filter for 64-bit ISO download URL # sed: HTML decode "&" character # tr: Filter for only alphanumerics or punctuation - iso_download_link="$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]' | head -c 512)" + iso_download_link="$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]')" if ! [ "$iso_download_link" ]; then # This should only happen if there's been some change to the download endpoint web address diff --git a/src/power.sh b/src/power.sh index 0b500fc..e198610 100644 --- a/src/power.sh +++ b/src/power.sh @@ -28,7 +28,7 @@ boot() { [ -f "$QEMU_END" ] && return 0 if [ -s "$QEMU_PTY" ]; then - if grep -iq " hard" "$QEMU_PTY"; then + if [ "$(stat -c%s "$QEMU_PTY")" -gt 7 ]; then info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." return 0 fi @@ -93,7 +93,9 @@ finish() { pid="/var/run/tpm.pid" [ -s "$pid" ] && pKill "$(<"$pid")" - fKill "wsdd" + pid="/var/run/wsdd.pid" + [ -s "$pid" ] && pKill "$(<"$pid")" + fKill "smbd" closeNetwork diff --git a/src/samba.sh b/src/samba.sh index 7544fc6..9e47fd7 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -82,6 +82,7 @@ if [[ "$isXP" == [Yy1]* ]]; then else # Enable Web Service Discovery wsdd -i "$interface" -p -n "$hostname" & + echo "$!" > /var/run/wsdd.pid fi return 0 From 22a5bd72d3b634fa1de4791df83264595deaa874 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 4 May 2024 18:29:05 +0200 Subject: [PATCH 176/505] feat: Show download percentage (#454) --- Dockerfile | 2 +- src/define.sh | 127 ++++++++++++++++++++++++++++++++++++++++++------- src/install.sh | 74 ++++++++++++++++++---------- 3 files changed, 160 insertions(+), 43 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4184a68..a335ecc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.00 / / +COPY --from=qemux/qemu-docker:5.01 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/src/define.sh b/src/define.sh index cd0e104..0c2aad0 100644 --- a/src/define.sh +++ b/src/define.sh @@ -420,72 +420,93 @@ getLink1() { local ret="$2" local url="" local sum="" + local size="" local host="https://dl.bobpony.com/windows" case "${id,,}" in "win11${PLATFORM,,}" ) + size=5946128384 sum="5bb1459034f50766ee480d895d751af73a4af30814240ae32ebc5633546a5af7" url="$host/11/en-us_windows_11_23h2_${PLATFORM,,}.iso" ;; "win10${PLATFORM,,}" ) + size=4957009920 sum="6673e2ab6c6939a74eceff2c2bb4d36feb94ff8a6f71700adef0f0b998fdcaca" url="$host/10/en-us_windows_10_22h2_${PLATFORM,,}.iso" ;; "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) + size=4851668992 sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" url="$host/10/en-us_windows_10_iot_enterprise_ltsc_2021_${PLATFORM,,}_dvd_257ad90f.iso" ;; "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + size=4899461120 sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" url="$host/10/en-us_windows_10_enterprise_ltsc_2021_${PLATFORM,,}_dvd_d289cf96.iso" ;; "win81${PLATFORM,,}" ) + size=4320526336 sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" url="$host/8.x/8.1/en_windows_8.1_with_update_${PLATFORM,,}_dvd_6051480.iso" ;; "win2022" | "win2022-eval" ) + size=5365624832 sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db" url="$host/server/2022/en-us_windows_server_2022_updated_jan_2024_${PLATFORM,,}_dvd_2b7a0c9f.iso" ;; "win2019" | "win2019-eval" ) + size=5575774208 sum="0067afe7fdc4e61f677bd8c35a209082aa917df9c117527fc4b2b52a447e89bb" url="$host/server/2019/en-us_windows_server_2019_updated_aug_2021_${PLATFORM,,}_dvd_a6431a28.iso" ;; "win2016" | "win2016-eval" ) + size=6006587392 sum="af06e5483c786c023123e325cea4775050324d9e1366f46850b515ae43f764be" url="$host/server/2016/en_windows_server_2016_updated_feb_2018_${PLATFORM,,}_dvd_11636692.iso" ;; "win2012r2" | "win2012r2-eval" ) + size=5397889024 sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" url="$host/server/2012r2/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708-004.iso" ;; "win2008r2" | "win2008r2-eval" ) + size=3166584832 sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" url="$host/server/2008r2/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601-018.iso" ;; "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise" ) + size=3182604288 sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" url="$host/7/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" ;; "win7${PLATFORM,,}-ultimate" ) + size=3320836096 sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1" url="$host/7/en_windows_7_with_sp1_${PLATFORM,,}.iso" ;; "winvista${PLATFORM,,}-ultimate" ) + size=3861460992 sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="$host/vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" ;; "winxpx86" ) + size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" url="$host/xp/professional/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" ;; "winxpx64" ) + size=614166528 sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" url="$host/xp/professional/en_win_xp_pro_${PLATFORM,,}_vl.iso" ;; esac - [ -z "$ret" ] && echo "$url" || echo "$sum" + case "${ret,,}" in + "sum" ) echo "$sum" ;; + "size" ) echo "$size" ;; + *) echo "$url";; + esac + return 0 } @@ -495,52 +516,68 @@ getLink2() { local ret="$2" local url="" local sum="" + local size="" local host="https://files.dog/MSDN" case "${id,,}" in "win81${PLATFORM,,}" ) + size=4320526336 sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" url="$host/Windows%208.1%20with%20Update/en_windows_8.1_with_update_${PLATFORM,,}_dvd_6051480.iso" ;; "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) + size=4139163648 sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" url="$host/Windows%208.1%20with%20Update/en_windows_8.1_enterprise_with_update_${PLATFORM,,}_dvd_6054382.iso" ;; "win2012r2" | "win2012r2-eval" ) + size=5397889024 sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" url="$host/Windows%20Server%202012%20R2%20with%20Update/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708.iso" ;; "win2008r2" | "win2008r2-eval" ) + size=3166584832 sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" url="$host/Windows%20Server%202008%20R2/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601.iso" ;; "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise" ) + size=3182604288 sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" url="$host/Windows%207/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" ;; "win7${PLATFORM,,}-ultimate" ) + size=3320903680 sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="$host/Windows%207/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" ;; "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" ) + size=3205953536 sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" url="$host/Windows%20Vista/en_windows_vista_enterprise_sp2_${PLATFORM,,}_dvd_342332.iso" ;; "winvista${PLATFORM,,}-ultimate" ) + size=3861460992 sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="$host/Windows%20Vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" ;; "winxpx86" ) + size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" url="$host/Windows%20XP/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" ;; "winxpx64" ) + size=614166528 sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" url="$host/Windows%20XP/en_win_xp_pro_${PLATFORM,,}_vl.iso" ;; esac - [ -z "$ret" ] && echo "$url" || echo "$sum" + case "${ret,,}" in + "sum" ) echo "$sum" ;; + "size" ) echo "$size" ;; + *) echo "$url";; + esac + return 0 } @@ -550,24 +587,33 @@ getLink3() { local ret="$2" local url="" local sum="" + local size="" local host="https://file.cnxiaobai.com/Windows" case "${id,,}" in "core11" ) + size=2159738880 sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" url="$host/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%20core%20${PLATFORM,,}%20beta%201.iso" ;; "tiny11" ) + size=3788177408 sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280" url="$host/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%202311%20${PLATFORM,,}.iso" ;; "tiny10" ) + size=3839819776 sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" url="$host/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny10%2023H2%20${PLATFORM,,}.iso" ;; esac - [ -z "$ret" ] && echo "$url" || echo "$sum" + case "${ret,,}" in + "sum" ) echo "$sum" ;; + "size" ) echo "$size" ;; + *) echo "$url";; + esac + return 0 } @@ -579,80 +625,103 @@ getLink4() { local ret="$2" local url="" local sum="" + local size="" local host="https://drive.massgrave.dev" case "${id,,}" in "win11${PLATFORM,,}" ) + size=7004780544 sum="a6c21313210182e0315054789a2b658b77394d5544b69b5341075492f89f51e5" url="$host/en-us_windows_11_consumer_editions_version_23h2_updated_april_2024_${PLATFORM,,}_dvd_d986680b.iso" ;; "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) + size=6879023104 sum="3d4d388d6ffa371956304fa7401347b4535fd10e3137978a8f7750b790a43521" url="$host/en-us_windows_11_business_editions_version_23h2_updated_april_2024_${PLATFORM,,}_dvd_349cd577.iso" ;; "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + size=6248140800 sum="5d9b86ad467bc89f488d1651a6c5ad3656a7ea923f9f914510657a24c501bb86" url="$host/en-us_windows_11_iot_enterprise_version_23h2_${PLATFORM,,}_dvd_fb37549c.iso" ;; "win10${PLATFORM,,}" ) + size=6605459456 sum="b072627c9b8d9f62af280faf2a8b634376f91dc73ea1881c81943c151983aa4a" url="$host/en-us_windows_10_consumer_editions_version_22h2_updated_april_2024_${PLATFORM,,}_dvd_9a92dc89.iso" ;; "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) + size=6428377088 sum="05fe9de04c2626bd00fbe69ad19129b2dbb75a93a2fe030ebfb2256d937ceab8" url="$host/en-us_windows_10_business_editions_version_22h2_updated_april_2024_${PLATFORM,,}_dvd_c00090a7.iso" ;; "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) + size=4851668992 sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" url="$host/en-us_windows_10_iot_enterprise_ltsc_2021_${PLATFORM,,}_dvd_257ad90f.iso" ;; "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + size=4899461120 sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" url="$host/en-us_windows_10_enterprise_ltsc_2021_${PLATFORM,,}_dvd_d289cf96.iso" ;; "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) + size=4139163648 sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" url="$host/en_windows_8.1_enterprise_with_update_${PLATFORM,,}_dvd_6054382.iso" ;; "win2022" | "win2022-eval" ) + size=5515755520 sum="7f41d603224e8a0bf34ba957d3abf0a02437ab75000dd758b5ce3f050963e91f" url="$host/en-us_windows_server_2022_updated_april_2024_${PLATFORM,,}_dvd_164349f3.iso" ;; "win2019" | "win2019-eval" ) + size=4843268096 sum="4c5dd63efee50117986a2e38d4b3a3fbaf3c1c15e2e7ea1d23ef9d8af148dd2d" url="$host/en_windows_server_2019_${PLATFORM,,}_dvd_4cb967d8.iso" ;; "win2016" | "win2016-eval" ) + size=5653628928 sum="4caeb24b661fcede81cd90661aec31aa69753bf49a5ac247253dd021bc1b5cbb" url="$host/en_windows_server_2016_${PLATFORM,,}_dvd_9327751.iso" ;; "win2012r2" | "win2012r2-eval" ) + size=5397889024 sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" url="$host/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708.iso" ;; "win2008r2" | "win2008r2-eval" ) + size=3166584832 sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" url="$host/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601.iso" ;; "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise" ) + size=3182604288 sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" url="$host/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" ;; "win7${PLATFORM,,}-ultimate" ) + size=3320903680 sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="$host/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" ;; "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" ) + size=3205953536 sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" url="$host/en_windows_vista_enterprise_sp2_${PLATFORM,,}_dvd_342332.iso" ;; "winvista${PLATFORM,,}-ultimate" ) + size=3861460992 sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="$host/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" ;; esac - [ -z "$ret" ] && echo "$url" || echo "$sum" + case "${ret,,}" in + "sum" ) echo "$sum" ;; + "size" ) echo "$size" ;; + *) echo "$url";; + esac + return 0 } @@ -662,40 +731,60 @@ getLink5() { local ret="$2" local url="" local sum="" + local size="" local host="https://archive.org/download" case "${id,,}" in "core11" ) + size=2159738880 sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" url="$host/tiny-11-core-x-64-beta-1/tiny11%20core%20${PLATFORM,,}%20beta%201.iso" ;; "tiny11" ) + size=3788177408 sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280" url="$host/tiny11-2311/tiny11%202311%20${PLATFORM,,}.iso" ;; "tiny10" ) + size=3839819776 sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" url="$host/tiny-10-23-h2/tiny10%20${PLATFORM,,}%2023h2.iso" ;; "winxpx86" ) + size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" url="$host/XPPRO_SP3_ENU/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" ;; esac - [ -z "$ret" ] && echo "$url" || echo "$sum" + case "${ret,,}" in + "sum" ) echo "$sum" ;; + "size" ) echo "$size" ;; + *) echo "$url";; + esac + + return 0 +} + +getValue() { + + local val="" + local id="$3" + local type="$2" + local func="getLink$1" + + if [ "$1" -gt 0 ] && [ "$1" -le "$MIRRORS" ]; then + val=$($func "$id" "$type") + fi + + echo "$val" return 0 } getLink() { local url="" - local id="$2" - local func="getLink$1" - - if [ "$1" -gt 0 ] && [ "$1" -le "$MIRRORS" ]; then - url=$($func "$id" "") - fi + url=$(getValue "$1" "" "$2") echo "$url" return 0 @@ -704,17 +793,21 @@ getLink() { getHash() { local sum="" - local id="$2" - local func="getLink$1" - - if [ "$1" -gt 0 ] && [ "$1" -le "$MIRRORS" ]; then - sum=$($func "$id" "sum") - fi + sum=$(getValue "$1" "sum" "$2") echo "$sum" return 0 } +getSize() { + + local size="" + size=$(getValue "$1" "size" "$2") + + echo "$size" + return 0 +} + validVersion() { local id="$1" diff --git a/src/install.sh b/src/install.sh index a95049c..5b30bef 100644 --- a/src/install.sh +++ b/src/install.sh @@ -210,7 +210,7 @@ getESD() { local eFile="esd_edition.xml" local fFile="products_filter.xml" - { wget "$winCatalog" -O "$dir/$wFile" -q; rc=$?; } || : + { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=10; rc=$?; } || : (( rc != 0 )) && error "Failed to download $winCatalog , reason: $rc" && return 1 cd "$dir" @@ -240,12 +240,18 @@ getESD() { error "Failed to find Windows product in $eFile!" && return 1 fi - ESD=$(xmllint --nonet --xpath '//FilePath' "$dir/$eFile" | sed -E -e 's/<[\/]?FilePath>//g') + local tag="FilePath" + ESD=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") if [ -z "$ESD" ]; then error "Failed to find ESD URL in $eFile!" && return 1 fi + tag="Sha1" + ESD_SUM=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") + tag="Size" + ESD_SIZE=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") + rm -rf "$dir" return 0 } @@ -262,7 +268,7 @@ doMido() { local msg="Downloading $desc..." info "$msg" && html "$msg" - /run/progress.sh "$iso.PART" "Downloading $desc ([P])..." & + /run/progress.sh "$iso.PART" "" "Downloading $desc ([P])..." & cd "$TMP" { /run/mido.sh "${version,,}"; rc=$?; } || : @@ -285,21 +291,36 @@ doMido() { verifyFile() { local iso="$1" - local check="$2" + local size="$2" + local total="$3" + local check="$4" + + if [[ "$total" != "$size" ]]; then + if [ -n "$size" ] && [[ "$size" != "0" ]]; then + warn "The download file has an unexpected size: $total" + fi + fi + local hash="" + local algo="SHA256" [ -z "$check" ] && return 0 + [[ "${#check}" == "40" ]] && algo="SHA1" - html "Verifying downloaded ISO..." - info "Calculating SHA256 checksum of the ISO file..." + local msg="Verifying downloaded ISO..." + info "$msg" && html "$msg" - hash=$(sha256sum "$iso" | cut -f1 -d' ') + if [[ "${algo,,}" != "sha256" ]]; then + hash=$(sha1sum "$iso" | cut -f1 -d' ') + else + hash=$(sha256sum "$iso" | cut -f1 -d' ') + fi if [[ "$hash" == "$check" ]]; then info "Succesfully verified that the checksum was correct!" && return 0 fi - error "Invalid sha256 checksum: $hash , but expected value is: $check ! Please report this at $SUPPORT/issues" + error "Invalid $algo checksum: $hash , but expected value is: $check ! Please report this at $SUPPORT/issues" rm -f "$iso" return 1 @@ -310,8 +331,9 @@ downloadFile() { local iso="$1" local url="$2" local sum="$3" - local desc="$4" - local rc progress domain dots + local size="$4" + local desc="$5" + local rc total progress domain dots rm -f "$iso" @@ -323,6 +345,7 @@ downloadFile() { fi local msg="Downloading $desc..." + html "$msg" domain=$(echo "$url" | awk -F/ '{print $3}') dots=$(echo "$domain" | tr -cd '.' | wc -c) @@ -332,17 +355,18 @@ downloadFile() { msg="Downloading $desc from $domain..." fi - info "$msg" && html "$msg" - /run/progress.sh "$iso" "Downloading $desc ([P])..." & + info "$msg" + /run/progress.sh "$iso" "$size" "Downloading $desc ([P])..." & - { wget "$url" -O "$iso" -q --show-progress "$progress"; rc=$?; } || : + { wget "$url" -O "$iso" -q --timeout=10 --show-progress "$progress"; rc=$?; } || : fKill "progress.sh" if (( rc == 0 )) && [ -f "$iso" ]; then - if [ "$(stat -c%s "$iso")" -gt 100000000 ]; then + total=$(stat -c%s "$iso") + if [ "$total" -gt 100000000 ]; then if [[ "$VERIFY" == [Yy1]* ]] && [ -n "$sum" ]; then - ! verifyFile "$iso" "$sum" && return 1 + ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 fi html "Download finished successfully..." && return 0 fi @@ -359,11 +383,11 @@ downloadImage() { local iso="$1" local version="$2" local tried="n" - local url sum desc + local url sum size desc if [[ "${version,,}" == "http"* ]]; then desc=$(fromFile "$BASE") - downloadFile "$iso" "$version" "" "$desc" && return 0 + downloadFile "$iso" "$version" "" "" "$desc" && return 0 return 1 fi @@ -373,14 +397,13 @@ downloadImage() { desc=$(printVersion "$version" "") - if [[ "${PLATFORM,,}" == "x64" ]]; then - if isMido "$version"; then - tried="y" - doMido "$iso" "$version" "$desc" && return 0 - fi - switchEdition "$version" + if isMido "$version"; then + tried="y" + doMido "$iso" "$version" "$desc" && return 0 fi + switchEdition "$version" + if isESD "$version"; then if [[ "$tried" != "n" ]]; then @@ -391,7 +414,7 @@ downloadImage() { if getESD "$TMP/esd" "$version"; then ISO="$TMP/$version.esd" - downloadFile "$ISO" "$ESD" "" "$desc" && return 0 + downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$desc" && return 0 ISO="$TMP/$BASE" fi @@ -406,8 +429,9 @@ downloadImage() { info "Failed to download $desc, will try another mirror now..." fi tried="y" + size=$(getSize "$i" "$version") sum=$(getHash "$i" "$version") - downloadFile "$iso" "$url" "$sum" "$desc" && return 0 + downloadFile "$iso" "$url" "$sum" "$size" "$desc" && return 0 fi done From 0cb936d64d82477846ee70391837cacb149a4f4a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 4 May 2024 19:12:58 +0200 Subject: [PATCH 177/505] Update install.sh (#455) --- src/install.sh | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/install.sh b/src/install.sh index 5b30bef..eaf09e5 100644 --- a/src/install.sh +++ b/src/install.sh @@ -295,16 +295,15 @@ verifyFile() { local total="$3" local check="$4" - if [[ "$total" != "$size" ]]; then - if [ -n "$size" ] && [[ "$size" != "0" ]]; then - warn "The download file has an unexpected size: $total" - fi + if [ -n "$size" ] && [[ "$total" != "$size" ]]; then + [[ "$size" != "0" ]] && warn "The download file has an unexpected size: $total" fi local hash="" local algo="SHA256" [ -z "$check" ] && return 0 + [[ "$VERIFY" != [Yy1]* ]] && return 0 [[ "${#check}" == "40" ]] && algo="SHA1" local msg="Verifying downloaded ISO..." @@ -365,9 +364,7 @@ downloadFile() { if (( rc == 0 )) && [ -f "$iso" ]; then total=$(stat -c%s "$iso") if [ "$total" -gt 100000000 ]; then - if [[ "$VERIFY" == [Yy1]* ]] && [ -n "$sum" ]; then - ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 - fi + ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 html "Download finished successfully..." && return 0 fi fi From 4b23877eaa3856136049b4c3ac3a15c7d46723d7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 5 May 2024 21:24:47 +0200 Subject: [PATCH 178/505] feat: Improved installation (#459) --- Dockerfile | 2 +- readme.md | 21 ++-- src/define.sh | 149 +++++++++++++++++++---- src/install.sh | 317 +++++++++++++++++++++++++++---------------------- src/power.sh | 7 +- src/samba.sh | 16 ++- 6 files changed, 332 insertions(+), 180 deletions(-) diff --git a/Dockerfile b/Dockerfile index a335ecc..5e3d2cf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.01 / / +COPY --from=qemux/qemu-docker:5.02 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/readme.md b/readme.md index c894f80..f24e012 100644 --- a/readme.md +++ b/readme.md @@ -127,9 +127,14 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ * ### How do I share files with the host? - Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`, double-click it and it will show a folder called `Data`. + Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. Double-click it and it will show a folder called `Data`, which can be binded to any folder on your host via the compose file: - Inside this folder you can access any files that are placed in `/storage/shared` (see above) on the host. You can optionally map it to a drive letter, for easy access. + ```yaml + volumes: + - /home/user/example:/shared + ``` + + The example folder `/home/user/example` will be available as ` \\host.lan\Data`. You can optionally map this path to a drive letter in Windows, for easier access. * ### How do I install a custom image? @@ -144,7 +149,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ ```yaml volumes: - - /home/user/example.iso:/storage/custom.iso + - /home/user/example.iso:/custom.iso ``` Replace the example path `/home/user/example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. @@ -157,7 +162,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ ```yaml volumes: - - /home/user/example.xml:/storage/custom.xml + - /home/user/example.xml:/custom.xml ``` Replace the example path `/home/user/example.xml` with the filename of the modified XML file. @@ -168,7 +173,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ ```yaml volumes: - - /home/user/example:/storage/oem + - /home/user/example:/oem ``` The example folder `/home/user/example` will be copied to `C:\OEM` during installation and the containing `install.bat` will be executed during the last step. @@ -292,11 +297,11 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ ```yaml devices: - - /dev/sdb:/dev/disk1 - - /dev/sdc:/dev/disk2 + - /dev/sdb:/disk1 + - /dev/sdc:/disk2 ``` - Use `/dev/disk1` if you want it to become your main drive, and use `/dev/disk2` and higher to add them as secondary drives. + Use `/disk1` if you want it to become your main drive, and use `/disk2` and higher to add them as secondary drives. * ### How do I pass-through a USB device? diff --git a/src/define.sh b/src/define.sh index 0c2aad0..7cd05fd 100644 --- a/src/define.sh +++ b/src/define.sh @@ -3,6 +3,7 @@ set -Eeuo pipefail : "${VERIFY:=""}" : "${MANUAL:=""}" +: "${REMOVE:=""}" : "${VERSION:=""}" : "${DETECTED:=""}" : "${PLATFORM:="x64"}" @@ -11,26 +12,28 @@ MIRRORS=5 parseVersion() { - [ -z "$VERSION" ] && VERSION="win11" + VERSION="${VERSION/\//}" if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then VERSION="${VERSION:1:-1}" fi + [ -z "$VERSION" ] && VERSION="win11" + case "${VERSION,,}" in - "11" | "win11" | "windows11" | "windows 11" ) + "11" | "11p" | "win11" | "win11p" | "windows11" | "windows 11" ) VERSION="win11${PLATFORM,,}" ;; "11e" | "win11e" | "windows11e" | "windows 11e" ) VERSION="win11${PLATFORM,,}-enterprise-eval" ;; - "10" | "win10" | "windows10" | "windows 10" ) + "10" | "10p" | "win10" | "win10p" | "windows10" | "windows 10" ) VERSION="win10${PLATFORM,,}" ;; "10e" | "win10e" | "windows10e" | "windows 10e" ) VERSION="win10${PLATFORM,,}-enterprise-eval" ;; - "8" | "81" | "8.1" | "win8" | "win81" | "windows 8" ) + "8" | "8p" | "81" | "81p" | "8.1" | "win8" | "win8p" | "win81" | "win81p" | "windows 8" ) VERSION="win81${PLATFORM,,}" ;; "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" ) @@ -40,10 +43,16 @@ parseVersion() { VERSION="win7${PLATFORM,,}" DETECTED="win7${PLATFORM,,}-enterprise" ;; + "7u" | "win7u" | "windows7u" | "windows 7u" ) + VERSION="win7${PLATFORM,,}-ultimate" + ;; "vista" | "winvista" | "windowsvista" | "windows vista" ) VERSION="winvista${PLATFORM,,}" DETECTED="winvista${PLATFORM,,}-enterprise" ;; + "vistau" | "winvistau" | "windowsvistau" | "windows vistau" ) + VERSION="winvista${PLATFORM,,}-ultimate" + ;; "xp" | "xp32" | "winxp" | "windowsxp" | "windows xp" ) VERSION="winxpx86" ;; @@ -382,31 +391,109 @@ switchEdition() { return 0 } -isESD() { +getCatalog() { local id="$1" + local ret="$2" + local url="" + local name="" + local edition="" case "${id,,}" in - "win11${PLATFORM,,}" ) return 0 ;; - "win10${PLATFORM,,}" ) return 0 ;; + "win11${PLATFORM,,}" ) + edition="Professional" + name="Windows 11 Pro" + url="https://go.microsoft.com/fwlink?linkid=2156292" + ;; + "win10${PLATFORM,,}" ) + edition="Professional" + name="Windows 10 Pro" + url="https://go.microsoft.com/fwlink/?LinkId=841361" + ;; + "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval") + edition="Enterprise" + name="Windows 11 Enterprise" + url="https://go.microsoft.com/fwlink?linkid=2156292" + ;; + "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) + edition="Enterprise" + name="Windows 10 Enterprise" + url="https://go.microsoft.com/fwlink/?LinkId=841361" + ;; esac - return 1 + case "${ret,,}" in + "url" ) echo "$url" ;; + "name" ) echo "$name" ;; + "edition" ) echo "$edition" ;; + *) echo "";; + esac + + return 0 } -isMido() { +getMido() { local id="$1" + local ret="$2" + local sum="" + local size="" case "${id,,}" in - "win11${PLATFORM,,}" | "win11${PLATFORM,,}-enterprise-eval" ) - return 0 ;; - "win10${PLATFORM,,}" | "win10${PLATFORM,,}-enterprise-eval" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - return 0 ;; - "win81${PLATFORM,,}" | "win81${PLATFORM,,}-enterprise-eval" ) - return 0 ;; - "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" | "win2008r2" ) - return 0 ;; + "win11${PLATFORM,,}" ) + size=6812706816 + sum="36de5ecb7a0daa58dce68c03b9465a543ed0f5498aa8ae60ab45fb7c8c4ae402" + ;; + "win11${PLATFORM,,}-enterprise-eval" ) + size=6209064960 + sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c" + ;; + "win10${PLATFORM,,}" ) + size=6140975104 + sum="a6f470ca6d331eb353b815c043e327a347f594f37ff525f17764738fe812852e" + ;; + "win10${PLATFORM,,}-enterprise-eval" ) + size=5550497792 + sum="ef7312733a9f5d7d51cfa04ac497671995674ca5e1058d5164d6028f0938d668" + ;; + "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + size=4898582528 + sum="e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5" + ;; + "win81${PLATFORM,,}" ) + size=4320526336 + sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" + ;; + "win81${PLATFORM,,}-enterprise-eval" ) + size=3961473024 + sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" + ;; + "win2022-eval" ) + size=5044094976 + sum="3e4fa6d8507b554856fc9ca6079cc402df11a8b79344871669f0251535255325" + ;; + "win2019-eval" ) + size=5652088832 + sum="6dae072e7f78f4ccab74a45341de0d6e2d45c39be25f1f5920a2ab4f51d7bcbb" + ;; + "win2016-eval" ) + size=6972221440 + sum="1ce702a578a3cb1ac3d14873980838590f06d5b7101c5daaccbac9d73f1fb50f" + ;; + "win2012r2-eval" ) + size=4542291968 + sum="6612b5b1f53e845aacdf96e974bb119a3d9b4dcb5b82e65804ab7e534dc7b4d5" + ;; + "win2008r2" ) + size=3166840832 + sum="30832ad76ccfa4ce48ccb936edefe02079d42fb1da32201bf9e3a880c8ed6312" + ;; + esac + + case "${ret,,}" in + "sum" ) echo "$sum" ;; + "size" ) echo "$size" ;; + *) echo "";; esac return 1 @@ -808,6 +895,28 @@ getSize() { return 0 } +isMido() { + + local id="$1" + local sum + + sum=$(getMido "$id" "sum") + [ -n "$sum" ] && return 0 + + return 1 +} + +isESD() { + + local id="$1" + local url + + url=$(getCatalog "$id" "url") + [ -n "$url" ] && return 0 + + return 1 +} + validVersion() { local id="$1" @@ -832,7 +941,7 @@ migrateFiles() { local version="$2" local file="" - [ -f "$STORAGE/$base" ] && return 0 + [ -f "$base" ] && return 0 [[ "${version,,}" == "tiny10" ]] && file="tiny10_${PLATFORM,,}_23h2.iso" [[ "${version,,}" == "tiny11" ]] && file="tiny11_2311_${PLATFORM,,}.iso" @@ -841,10 +950,8 @@ migrateFiles() { [[ "${version,,}" == "winvista${PLATFORM,,}" ]] && file="en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" [[ "${version,,}" == "win7${PLATFORM,,}" ]] && file="en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" - [ -z "$file" ] && return 0 [ ! -f "$STORAGE/$file" ] && return 0 - - ! mv "$STORAGE/$file" "$STORAGE/$base" && return 1 + ! mv "$STORAGE/$file" "$base" && return 1 return 0 } diff --git a/src/install.sh b/src/install.sh index eaf09e5..87006ad 100644 --- a/src/install.sh +++ b/src/install.sh @@ -9,6 +9,8 @@ EFISYS="efi/microsoft/boot/efisys_noprompt.bin" hasDisk() { + [ -b "/disk1" ] && return 0 + [ -b "/dev/disk1" ] && return 0 [ -b "${DEVICE:-}" ] && return 0 if [ -s "$STORAGE/data.img" ] || [ -s "$STORAGE/data.qcow2" ]; then @@ -33,69 +35,63 @@ startInstall() { [ -z "$MANUAL" ] && MANUAL="N" - if [ -f "$STORAGE/$CUSTOM" ]; then + if [ -n "$CUSTOM" ]; then - BASE="$CUSTOM" + ISO="$CUSTOM" else - CUSTOM="" + local file="${VERSION/\//}.iso" - if [[ "${VERSION,,}" != "http"* ]]; then + if [[ "${VERSION,,}" == "http"* ]]; then - BASE="$VERSION.iso" - - else - - BASE=$(basename "${VERSION%%\?*}") - : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}" - BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') + file=$(basename "${VERSION%%\?*}") + : "${file//+/ }"; printf -v file '%b' "${_//%/\\x}" + file=$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g') fi + + ISO="$STORAGE/$file" + + ! migrateFiles "$ISO" "$VERSION" && error "Migration failed!" && exit 57 + fi - if [[ "${PLATFORM,,}" == "x64" ]]; then - ! migrateFiles "$BASE" "$VERSION" && error "Migration failed!" && exit 57 - fi + skipInstall && return 1 - if skipInstall; then - if [ ! -f "$STORAGE/$BASE" ]; then - BASE="custom.iso" - [ ! -f "$STORAGE/$BASE" ] && BASE="" - fi - [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" - return 1 - fi - - if [ -f "$STORAGE/$BASE" ]; then + if [ -f "$ISO" ] && [ -s "$ISO" ]; then # Check if the ISO was already processed by our script local magic="" - magic=$(dd if="$STORAGE/$BASE" seek=0 bs=1 count=1 status=none | tr -d '\000') + magic=$(dd if="$ISO" seek=0 bs=1 count=1 status=none | tr -d '\000') magic="$(printf '%s' "$magic" | od -A n -t x1 -v | tr -d ' \n')" + [[ "$magic" == "16" ]] && return 1 - if [[ "$magic" == "16" ]]; then + fi - if hasDisk || [[ "$MANUAL" == [Yy1]* ]]; then - return 1 - fi + if [ -z "$CUSTOM" ]; then + BOOT="$ISO" + ISO=$(basename "$ISO") + ISO="$TMP/$ISO" + + else + + if [ -n "$ORIGINAL" ]; then + rm -f "$ISO" + ISO="$ORIGINAL" + CUSTOM="$ISO" fi - CUSTOM="$BASE" + local size + size="$(stat -c%s "$ISO")" + BOOT="$STORAGE/windows.$size.iso" fi + rm -f "$BOOT" rm -rf "$TMP" mkdir -p "$TMP" - - if [ ! -f "$STORAGE/$CUSTOM" ]; then - CUSTOM="" - ISO="$TMP/$BASE" - else - ISO="$STORAGE/$CUSTOM" - fi - return 0 } @@ -120,7 +116,6 @@ finishInstall() { rm -f "$STORAGE/windows.mode" cp /run/version "$STORAGE/windows.ver" - echo "$BASE" > "$STORAGE/windows.base" if [[ "${PLATFORM,,}" == "x64" ]]; then if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then @@ -147,43 +142,62 @@ abortInstall() { local iso="$1" - if [[ "$iso" != "$STORAGE/$BASE" ]]; then - if ! mv -f "$iso" "$STORAGE/$BASE"; then - error "Failed to move ISO file: $iso" && return 1 + [[ "${iso,,}" == *".esd" ]] && exit 60 + + if [ -n "$CUSTOM" ]; then + BOOT="$iso" + REMOVE="N" + else + if [[ "$iso" != "$BOOT" ]]; then + if ! mv -f "$iso" "$BOOT"; then + error "Failed to move ISO file: $iso" && return 1 + fi fi fi - finishInstall "$STORAGE/$BASE" "Y" && return 0 - + finishInstall "$BOOT" "Y" && return 0 return 1 } detectCustom() { + local file="" + local size base + CUSTOM="" - local file size + ORIGINAL="" if [[ "${VERSION,,}" != "http"* ]]; then - file="${VERSION/\/storage\//}" - [[ "$file" == "."* ]] && file="${file:1}" - [[ "$file" == *"/"* ]] && file="" - [ -n "$file" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "$file" -printf "%f\n" | head -n 1) + base="${VERSION/\/storage\//}" + [[ "$base" == "."* ]] && base="${file:1}" + [[ "$base" == *"/"* ]] && base="" + [ -n "$base" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$base" -printf "%f\n" | head -n 1) fi - [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) - [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) - [ -z "$CUSTOM" ] && return 0 + [ -z "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) + [ -z "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) + [ -n "$file" ] && file="$STORAGE/$file" - size="$(stat -c%s "$STORAGE/$CUSTOM")" + base="/custom.iso" + [ -f "$base" ] && [ -s "$base" ] && file="$base" - if [ -z "$size" ] || [[ "$size" == "0" ]]; then - CUSTOM="" - return 0 + [ -z "$file" ] && return 0 + [ ! -f "$file" ] && return 0 + [ ! -s "$file" ] && return 0 + + size="$(stat -c%s "$file")" + [ -z "$size" ] || [[ "$size" == "0" ]] && return 0 + + base="$STORAGE/windows.$size.iso" + + if [ -f "$base" ] && [ -s "$base" ]; then + CUSTOM="$base" + ORIGINAL="$file" + else + CUSTOM="$file" + rm -f "$base" fi - file="windows.$size.iso" - [ -s "$STORAGE/$file" ] && CUSTOM="$file" - return 0 } @@ -191,13 +205,15 @@ getESD() { local dir="$1" local version="$2" + local editionName local winCatalog size - case "${version,,}" in - "win11${PLATFORM,,}" ) winCatalog="https://go.microsoft.com/fwlink?linkid=2156292" ;; - "win10${PLATFORM,,}" ) winCatalog="https://go.microsoft.com/fwlink/?LinkId=841361" ;; - *) error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 ;; - esac + if ! isESD "${version,,}"; then + error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 + fi + + winCatalog=$(getCatalog "$version" "url") + editionName=$(getCatalog "$version" "edition") local msg="Downloading product information from Microsoft..." info "$msg" && html "$msg" @@ -227,7 +243,6 @@ getESD() { fi local esdLang="en-us" - local editionName="Professional" local edQuery='//File[Architecture="'${PLATFORM}'"][Edition="'${editionName}'"]' echo -e '<Catalog>' > "$dir/$fFile" @@ -256,47 +271,15 @@ getESD() { return 0 } -doMido() { - - local iso="$1" - local version="$2" - local desc="$3" - local rc - - rm -f "$iso" - rm -f "$iso.PART" - - local msg="Downloading $desc..." - info "$msg" && html "$msg" - /run/progress.sh "$iso.PART" "" "Downloading $desc ([P])..." & - - cd "$TMP" - { /run/mido.sh "${version,,}"; rc=$?; } || : - cd /run - - fKill "progress.sh" - - if (( rc == 0 )) && [ -f "$iso" ]; then - if [ "$(stat -c%s "$iso")" -gt 100000000 ]; then - html "Download finished successfully..." && return 0 - fi - fi - - rm -f "$iso" - rm -f "$iso.PART" - - return 1 -} - verifyFile() { local iso="$1" local size="$2" - local total="$3" + local total="$3" local check="$4" - if [ -n "$size" ] && [[ "$total" != "$size" ]]; then - [[ "$size" != "0" ]] && warn "The download file has an unexpected size: $total" + if [ -n "$size" ] && [[ "$total" != "$size" ]] && [[ "$size" != "0" ]]; then + warn "The downloaded file has an invalid size: $total bytes, while expected value was: $size bytes. Please report this at $SUPPORT/issues" fi local hash="" @@ -316,15 +299,52 @@ verifyFile() { fi if [[ "$hash" == "$check" ]]; then - info "Succesfully verified that the checksum was correct!" && return 0 + info "Succesfully verified ISO!" && return 0 fi - error "Invalid $algo checksum: $hash , but expected value is: $check ! Please report this at $SUPPORT/issues" + error "The downloaded file has an invalid $algo checksum: $hash , while expected value was: $check. Please report this at $SUPPORT/issues" rm -f "$iso" return 1 } +doMido() { + + local iso="$1" + local version="$2" + local desc="$3" + local rc sum size total + + rm -f "$iso" + rm -f "$iso.PART" + + size=$(getMido "$version" "size") + sum=$(getMido "$version" "sum") + + local msg="Downloading $desc..." + info "$msg" && html "$msg" + /run/progress.sh "$iso.PART" "$size" "Downloading $desc ([P])..." & + + cd "$TMP" + { /run/mido.sh "${version,,}"; rc=$?; } || : + cd /run + + fKill "progress.sh" + + if (( rc == 0 )) && [ -f "$iso" ]; then + total=$(stat -c%s "$iso") + if [ "$total" -gt 100000000 ]; then + ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 + html "Download finished successfully..." && return 0 + fi + fi + + rm -f "$iso" + rm -f "$iso.PART" + + return 1 +} + downloadFile() { local iso="$1" @@ -380,10 +400,11 @@ downloadImage() { local iso="$1" local version="$2" local tried="n" - local url sum size desc + local url sum size base desc if [[ "${version,,}" == "http"* ]]; then - desc=$(fromFile "$BASE") + base=$(basename "$iso") + desc=$(fromFile "$base") downloadFile "$iso" "$version" "" "" "$desc" && return 0 return 1 fi @@ -410,9 +431,10 @@ downloadImage() { tried="y" if getESD "$TMP/esd" "$version"; then - ISO="$TMP/$version.esd" + local prev="$ISO" + ISO="${ISO%.*}.esd" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$desc" && return 0 - ISO="$TMP/$BASE" + ISO="$prev" fi fi @@ -436,6 +458,17 @@ downloadImage() { return 1 } +removeDownload() { + + local iso="$1" + + [ ! -f "$iso" ] && return 0 + [ -n "$CUSTOM" ] && return 0 + ! rm -f "$iso" 2> /dev/null && warn "failed to remove $iso !" + + return 0 +} + extractESD() { local iso="$1" @@ -500,16 +533,15 @@ extractESD() { info "$msg" && html "$msg" local edition imageIndex imageEdition + edition=$(getCatalog "$version" "name") - case "${version,,}" in - "win11${PLATFORM,,}" ) edition="11 pro" ;; - "win10${PLATFORM,,}" ) edition="10 pro" ;; - *) error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 ;; - esac + if [ -z "$edition" ]; then + error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 + fi for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do imageEdition=$(wimlib-imagex info "${iso}" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//') - [[ "${imageEdition,,}" != *"$edition"* ]] && continue + [[ "${imageEdition,,}" != "${edition,,}" ]] && continue wimlib-imagex export "${iso}" ${imageIndex} "${installWimFile}" --compress=LZMS --chunk-size 128K --quiet || { retVal=$? error "Addition of ${imageIndex} to the $desc image failed" && return $retVal @@ -517,7 +549,7 @@ extractESD() { return 0 done - error "Failed to find product in install.wim!" && return 1 + error "Failed to find product '$edition' in install.wim!" && return 1 } extractImage() { @@ -574,7 +606,10 @@ setXML() { [[ "$MANUAL" == [Yy1]* ]] && return 0 - local file="$STORAGE/custom.xml" + local file="/custom.xml" + [ -f "$file" ] && [ -s "$file" ] && XML="$file" && return 0 + + file="$STORAGE/custom.xml" [ -f "$file" ] && [ -s "$file" ] && XML="$file" && return 0 file="/run/assets/custom.xml" @@ -649,12 +684,8 @@ detectImage() { XML="" - if [ -n "$CUSTOM" ]; then - DETECTED="" - else - if [ -z "$DETECTED" ] && [[ "${version,,}" != "http"* ]]; then - DETECTED="$version" - fi + if [ -z "$DETECTED" ] && [[ "${version,,}" != "http"* ]]; then + [ -z "$CUSTOM" ] && DETECTED="$version" fi if [ -n "$DETECTED" ]; then @@ -711,7 +742,7 @@ detectImage() { local fallback="/run/assets/${DETECTED%%-*}.xml" setXML "$fallback" && warn "${msg}." && return 0 - + warn "${msg}, $FB." return 0 } @@ -752,9 +783,8 @@ prepareImage() { updateImage() { - local iso="$1" - local dir="$2" - local asset="$3" + local dir="$1" + local asset="$2" local path src loc xml index result [ ! -s "$asset" ] || [ ! -f "$asset" ] && return 0 @@ -801,10 +831,8 @@ copyOEM() { local src [ ! -d "$folder" ] && folder="/OEM" + [ ! -d "$folder" ] && folder="$STORAGE/oem" [ ! -d "$folder" ] && folder="$STORAGE/OEM" - [ ! -d "$folder" ] && folder="$STORAGE/OEM" - [ ! -d "$folder" ] && folder="$STORAGE/shared/oem" - [ ! -d "$folder" ] && folder="$STORAGE/shared/OEM" [ ! -d "$folder" ] && return 0 local msg="Copying OEM folder to image..." @@ -832,9 +860,14 @@ buildImage() { local failed="N" local cat="BOOT.CAT" local log="/run/shm/iso.log" - local size size_gb space space_gb desc - local out="$TMP/${BASE%.*}.tmp" + local base size size_gb space space_gb desc + if [ -f "$BOOT" ]; then + error "File $BOOT does already exist?!" && return 1 + fi + + base=$(basename "$BOOT") + local out="$TMP/${base%.*}.tmp" rm -f "$out" desc=$(printVersion "$DETECTED" "ISO") @@ -890,11 +923,7 @@ buildImage() { [ -s "$log" ] && error="$(<"$log")" [[ "$error" != "$hide" ]] && echo "$error" - if [ -f "$STORAGE/$BASE" ]; then - error "File $STORAGE/$BASE does already exist?!" && return 1 - fi - - mv "$out" "$STORAGE/$BASE" + mv "$out" "$BOOT" return 0 } @@ -902,6 +931,15 @@ bootWindows() { rm -rf "$TMP" + if [ ! -f "$ISO" ] || [ ! -s "$ISO" ]; then + ISO="/custom.iso" + [ ! -f "$ISO" ] && ISO="${STORAGE}$ISO" + fi + + BOOT="$ISO" + + [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" + if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then @@ -979,16 +1017,13 @@ if ! prepareImage "$ISO" "$DIR"; then exit 60 fi -if ! updateImage "$ISO" "$DIR" "$XML"; then +if ! updateImage "$DIR" "$XML"; then abortInstall "$ISO" && return 0 exit 60 fi -if ! rm -f "$ISO" 2> /dev/null; then - size="$(stat -c%s "$ISO")" - BASE="windows.$size.iso" - ISO="$STORAGE/$BASE" - rm -f "$ISO" +if ! removeDownload "$ISO"; then + exit 64 fi if ! copyOEM "$DIR"; then @@ -999,7 +1034,7 @@ if ! buildImage "$DIR"; then exit 65 fi -if ! finishInstall "$STORAGE/$BASE" "N"; then +if ! finishInstall "$BOOT" "N"; then exit 69 fi diff --git a/src/power.sh b/src/power.sh index e198610..4408920 100644 --- a/src/power.sh +++ b/src/power.sh @@ -81,11 +81,12 @@ finish() { done fi - if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$STORAGE/$BASE" ]; then + if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then # Remove CD-ROM ISO after install if ready; then - if rm -f "$STORAGE/$BASE" 2>/dev/null; then - touch "$STORAGE/windows.boot" + touch "$STORAGE/windows.boot" + if [[ "$REMOVE" != [Nn]* ]]; then + rm -f "$BOOT" 2>/dev/null || true fi fi fi diff --git a/src/samba.sh b/src/samba.sh index 9e47fd7..18fa980 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -14,10 +14,14 @@ if [[ "$DHCP" == [Yy1]* ]]; then interface="$VM_NET_DEV" fi -share="$STORAGE/shared" +share="/shared" + +if [ ! -d "$share" ] && [ -d "$STORAGE/shared" ]; then + share="$STORAGE/shared" +fi mkdir -p "$share" -[ -z "$(ls -A "$share")" ] && chmod -R 777 "$share" +[ -z "$(ls -A "$share")" ] && chmod 777 "$share" { echo "[global]" echo " server string = Dockur" @@ -53,16 +57,16 @@ mkdir -p "$share" echo "" echo "Using this folder you can share files with the host machine." echo "" - echo "To change the storage location, include the following bind mount in your compose file:" + echo "To change its location, include the following bind mount in your compose file:" echo "" echo " volumes:" - echo " - \"/home/user/example:/storage/shared\"" + echo " - \"/home/user/example:/shared\"" echo "" echo "Or in your run command:" echo "" - echo " -v \"/home/user/example:/storage/shared\"" + echo " -v \"/home/user/example:/shared\"" echo "" - echo "Replace the example path /home/user/example with the desired storage folder." + echo "Replace the example path /home/user/example with the desired shared folder." echo "" } | unix2dos > "$share/readme.txt" From 5ff0e3dae564c3776efe9091cc5bcdf6953c7f6e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 5 May 2024 22:37:43 +0200 Subject: [PATCH 179/505] Update QUESTION.yml (#460) --- .github/ISSUE_TEMPLATE/QUESTION.yml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/QUESTION.yml b/.github/ISSUE_TEMPLATE/QUESTION.yml index a768f93..2782704 100644 --- a/.github/ISSUE_TEMPLATE/QUESTION.yml +++ b/.github/ISSUE_TEMPLATE/QUESTION.yml @@ -3,10 +3,20 @@ description: General questions about the container title: "[Question]: " labels: ["question"] body: - - type: markdown + - type: checkboxes attributes: - value: | - Please do not use this form for technical issues, and make sure to check the [FAQ](https://github.com/dockur/windows/blob/master/readme.md) first! + label: Is your question not already answered in the [FAQ](https://github.com/dockur/windows/blob/master/readme.md)? + description: Please read those frequently asked questions carefully to avoid asking duplicate questions. + options: + - label: I made sure the question is not listed in the [FAQ](https://github.com/dockur/windows/blob/master/readme.md). + required: true + - type: checkboxes + attributes: + label: Is this a general question and not a technical issue? + description: For technical issues you must use the [bug report](https://github.com/dockur/windows/issues/new?assignees=&labels=bug&projects=&template=BUG_REPORT.yml&title=%5BBug%5D%3A+) form instead. It contains all the right fields (system info, logfiles, etc.) we need in order to be able to help you. + options: + - label: I am sure my question is not about a technical issue. + required: true - type: textarea id: question attributes: From b56db85787d438f2711b6d78afb241b46e7f29be Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 5 May 2024 22:41:38 +0200 Subject: [PATCH 180/505] docs: Update issues template (#461) --- .github/ISSUE_TEMPLATE/QUESTION.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/QUESTION.yml b/.github/ISSUE_TEMPLATE/QUESTION.yml index 2782704..28f0b61 100644 --- a/.github/ISSUE_TEMPLATE/QUESTION.yml +++ b/.github/ISSUE_TEMPLATE/QUESTION.yml @@ -5,15 +5,15 @@ labels: ["question"] body: - type: checkboxes attributes: - label: Is your question not already answered in the [FAQ](https://github.com/dockur/windows/blob/master/readme.md)? - description: Please read those frequently asked questions carefully to avoid asking duplicate questions. + label: Is your question not already answered in the FAQ? + description: Please read the [FAQ](https://github.com/dockur/windows/blob/master/readme.md) carefully to avoid asking duplicate questions. options: - label: I made sure the question is not listed in the [FAQ](https://github.com/dockur/windows/blob/master/readme.md). required: true - type: checkboxes attributes: label: Is this a general question and not a technical issue? - description: For technical issues you must use the [bug report](https://github.com/dockur/windows/issues/new?assignees=&labels=bug&projects=&template=BUG_REPORT.yml&title=%5BBug%5D%3A+) form instead. It contains all the right fields (system info, logfiles, etc.) we need in order to be able to help you. + description: For technical issues you must use the [bug report](https://github.com/dockur/windows/issues/new?assignees=&labels=bug&projects=&template=BUG_REPORT.yml&title=%5BBug%5D%3A+) form instead. It contains all the right fields (system info, logfiles, etc.) we need in order to be able to help you. options: - label: I am sure my question is not about a technical issue. required: true From f99032312c6877f7bd8636c186215be693d5d240 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 7 May 2024 02:11:59 +0200 Subject: [PATCH 181/505] feat: Detect architecture in ISO (#463) --- src/define.sh | 173 +++++++++++++++++++++++++++++-------------------- src/install.sh | 37 +++++++++-- 2 files changed, 135 insertions(+), 75 deletions(-) diff --git a/src/define.sh b/src/define.sh index 7cd05fd..087f18b 100644 --- a/src/define.sh +++ b/src/define.sh @@ -6,9 +6,9 @@ set -Eeuo pipefail : "${REMOVE:=""}" : "${VERSION:=""}" : "${DETECTED:=""}" -: "${PLATFORM:="x64"}" MIRRORS=5 +PLATFORM="x64" parseVersion() { @@ -50,14 +50,14 @@ parseVersion() { VERSION="winvista${PLATFORM,,}" DETECTED="winvista${PLATFORM,,}-enterprise" ;; - "vistau" | "winvistau" | "windowsvistau" | "windows vistau" ) + "vistu" | "winvistu" | "windowsvistu" | "windows vistu" ) VERSION="winvista${PLATFORM,,}-ultimate" ;; - "xp" | "xp32" | "winxp" | "windowsxp" | "windows xp" ) + "xp" | "xp32" | "xpx86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" ) VERSION="winxpx86" ;; - "xp64" | "winxp64" | "windowsxp64" | "windows xp 64" ) - VERSION="winxpx64" + "xp64" | "xpx64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" ) + VERSION="winxp${PLATFORM,,}" ;; "22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022" ) VERSION="win2022-eval" @@ -146,75 +146,39 @@ printEdition() { [[ "$result" == "x" ]] && echo "$desc" && return 0 case "${id,,}" in - "win7${PLATFORM,,}-home"* ) + *"-iot" ) + edition="IoT" + ;; + *"-ltsc" ) + edition="LTSC" + ;; + *"-home" ) edition="Home" ;; - "win7${PLATFORM,,}-starter"* ) + *"-starter" ) edition="Starter" ;; - "win7${PLATFORM,,}-ultimate"* ) + *"-ultimate" ) edition="Ultimate" ;; - "win7${PLATFORM,,}-enterprise"* ) + *"-enterprise" ) edition="Enterprise" ;; + *"-education" ) + edition="Education" + ;; + *"-enterprise-eval" ) + edition="Enterprise (Evaluation)" + ;; "win7"* ) edition="Professional" ;; - "win8${PLATFORM,,}-enterprise"* ) - edition="Enterprise" - ;; - "win8"* ) - edition="Pro" - ;; - "win10${PLATFORM,,}-iot"* ) - edition="IoT" - ;; - "win10${PLATFORM,,}-ltsc"* ) - edition="LTSC" - ;; - "win10${PLATFORM,,}-home"* ) - edition="Home" - ;; - "win10${PLATFORM,,}-education"* ) - edition="Education" - ;; - "win10${PLATFORM,,}-enterprise"* ) - edition="Enterprise" - ;; - "win10"* ) - edition="Pro" - ;; - "win11${PLATFORM,,}-iot"* ) - edition="IoT" - ;; - "win11${PLATFORM,,}-home"* ) - edition="Home" - ;; - "win11${PLATFORM,,}-education"* ) - edition="Education" - ;; - "win11${PLATFORM,,}-enterprise"* ) - edition="Enterprise" - ;; - "win11"* ) + "win8"* | "win10"* | "win11"* ) edition="Pro" ;; "winxp"* ) edition="Professional" ;; - "winvista${PLATFORM,,}-home"* ) - edition="Home" - ;; - "winvista${PLATFORM,,}-starter"* ) - edition="Starter" - ;; - "winvista${PLATFORM,,}-ultimate"* ) - edition="Ultimate" - ;; - "winvista${PLATFORM,,}-enterprise"* ) - edition="Enterprise" - ;; "winvista"* ) edition="Business" ;; @@ -223,7 +187,6 @@ printEdition() { ;; esac - [[ "${id,,}" == *"-eval" ]] && edition="$edition (Evaluation)" [ -n "$edition" ] && result="$result $edition" echo "$result" @@ -235,25 +198,38 @@ fromFile() { local id="" local desc="$1" local file="${1,,}" + local arch="${PLATFORM,,}" + + case "${file/ /_}" in + *"_x64_"* | *"_x64."*) + arch="x64" + ;; + *"_x86_"* | *"_x86."*) + arch="x86" + ;; + *"_arm64_"* | *"_arm64."*) + arch="arm64" + ;; + esac case "${file/ /_}" in "win7"* | "win_7"* | *"windows7"* | *"windows_7"* ) - id="win7${PLATFORM,,}" + id="win7${arch}" ;; "win8"* | "win_8"* | *"windows8"* | *"windows_8"* ) - id="win81${PLATFORM,,}" + id="win81${arch}" ;; "win10"*| "win_10"* | *"windows10"* | *"windows_10"* ) - id="win10${PLATFORM,,}" + id="win10${arch}" ;; "win11"* | "win_11"* | *"windows11"* | *"windows_11"* ) - id="win11${PLATFORM,,}" + id="win11${arch}" ;; *"winxp"* | *"win_xp"* | *"windowsxp"* | *"windows_xp"* ) id="winxpx86" ;; *"winvista"* | *"win_vista"* | *"windowsvista"* | *"windows_vista"* ) - id="winvista${PLATFORM,,}" + id="winvista${arch}" ;; "tiny11core"* | "tiny11_core"* | "tiny_11_core"* ) id="core11" @@ -296,6 +272,7 @@ fromName() { local id="" local name="$1" + local arch="$2" case "${name,,}" in *"server 2025"* ) id="win2025" ;; @@ -304,11 +281,11 @@ fromName() { *"server 2016"* ) id="win2016" ;; *"server 2012"* ) id="win2012r2" ;; *"server 2008"* ) id="win2008r2" ;; - *"windows 7"* ) id="win7${PLATFORM,,}" ;; - *"windows 8"* ) id="win81${PLATFORM,,}" ;; - *"windows 10"* ) id="win10${PLATFORM,,}" ;; - *"windows 11"* ) id="win11${PLATFORM,,}" ;; - *"windows vista"* ) id="winvista${PLATFORM,,}" ;; + *"windows 7"* ) id="win7${arch}" ;; + *"windows 8"* ) id="win81${arch}" ;; + *"windows 10"* ) id="win10${arch}" ;; + *"windows 11"* ) id="win11${arch}" ;; + *"windows vista"* ) id="winvista${arch}" ;; esac echo "$id" @@ -319,8 +296,9 @@ getVersion() { local id local name="$1" + local arch="$2" - id=$(fromName "$name") + id=$(fromName "$name" "$arch") case "${id,,}" in "win7"* | "winvista"* ) @@ -571,11 +549,26 @@ getLink1() { sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1" url="$host/7/en_windows_7_with_sp1_${PLATFORM,,}.iso" ;; + "win7x86" | "win7x86-enterprise" ) + size=2434502656 + sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" + url="$host/7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + ;; + "win7x86-ultimate" ) + size=2564411392 + sum="99f3369c90160816be07093dbb0ac053e0a84e52d6ed1395c92ae208ccdf67e5" + url="$host/7/en_windows_7_with_sp1_x86.iso" + ;; "winvista${PLATFORM,,}-ultimate" ) size=3861460992 sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="$host/vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" ;; + "winvistax86-ultimate" ) + size=3243413504 + sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" + url="$host/vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" + ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" @@ -637,6 +630,16 @@ getLink2() { sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="$host/Windows%207/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" ;; + "win7x86" | "win7x86enterprise" ) + size=2434502656 + sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" + url="$host/Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + ;; + "win7x86-ultimate" ) + size=2564476928 + sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" + url="$host/Windows%207/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso" + ;; "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" ) size=3205953536 sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" @@ -647,6 +650,16 @@ getLink2() { sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="$host/Windows%20Vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" ;; + "winvistax86" | "winvistax86-enterprise" ) + size=2420981760 + sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" + url="$host/Windows%20Vista/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" + ;; + "winvistax86-ultimate" ) + size=3243413504 + sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" + url="$host/Windows%20Vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" + ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" @@ -791,6 +804,16 @@ getLink4() { sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="$host/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" ;; + "win7x86" | "win7x86enterprise" ) + size=2434502656 + sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" + url="$host/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + ;; + "win7x86-ultimate" ) + size=2564476928 + sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" + url="$host/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso" + ;; "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" ) size=3205953536 sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" @@ -801,6 +824,16 @@ getLink4() { sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="$host/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" ;; + "winvistax86" | "winvistax86-enterprise" ) + size=2420981760 + sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" + url="$host/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" + ;; + "winvistax86-ultimate" ) + size=3243413504 + sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" + url="$host/en_windows_vista_with_sp2_x86_dvd_342266.iso" + ;; esac case "${ret,,}" in diff --git a/src/install.sh b/src/install.sh index 87006ad..17f3af0 100644 --- a/src/install.sh +++ b/src/install.sh @@ -626,13 +626,14 @@ selectVersion() { local tag="$1" local xml="$2" + local platform="$3" local id find name prefer name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$xml") [[ "$name" == *"Operating System"* ]] && name="" [ -z "$name" ] && return 0 - id=$(fromName "$name") + id=$(fromName "$name" "$platform") [ -z "$id" ] && warn "Unknown ${tag,,}: '$name'" && return 0 prefer="$id-enterprise" @@ -653,7 +654,7 @@ selectVersion() { echo "$prefer" && return 0 fi - prefer=$(getVersion "$name") + prefer=$(getVersion "$name" "$platform") echo "$prefer" return 0 @@ -663,14 +664,40 @@ detectVersion() { local xml="$1" local id="" + local arch="" + local tag="ARCH" + local platform="x64" - id=$(selectVersion "DISPLAYNAME" "$xml") + arch=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$xml") + + case "${arch,,}" in + "0" ) + platform="x86" + if [[ "${PLATFORM,,}" != "x64" ]]; then + error "You cannot boot $platform images on a $PLATFORM cpu!" && exit 67 + fi + ;; + "9" ) + platform="x64" + if [[ "${PLATFORM,,}" != "x64" ]]; then + error "You cannot boot $platform images on a $PLATFORM cpu!" && exit 67 + fi + ;; + "12" ) + platform="arm64" + if [[ "${PLATFORM,,}" != "arm64" ]]; then + error "You cannot boot ${platform^^} images on a $PLATFORM cpu!" && exit 67 + fi + ;; + esac + + id=$(selectVersion "DISPLAYNAME" "$xml" "$platform") [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0 - id=$(selectVersion "PRODUCTNAME" "$xml") + id=$(selectVersion "PRODUCTNAME" "$xml" "$platform") [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0 - id=$(selectVersion "NAME" "$xml") + id=$(selectVersion "NAME" "$xml" "$platform") [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0 return 0 From fd1fd1c48f4f44f4cd167ef7b77982bf33b99437 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 8 May 2024 23:25:15 +0200 Subject: [PATCH 182/505] fix: Disable Mido debug output (#470) --- src/mido.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index 870061d..abafce4 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -3,8 +3,6 @@ # Copyright (C) 2024 Elliot Killick <contact@elliotkillick.com> # Licensed under the MIT License. See LICENSE file for details. -[ "$DEBUG" ] && set -x - # Prefer Dash shell for greater security if available if [ "$BASH" ] && command -v dash > /dev/null; then exec dash "$0" "$@" From 8bbd87df40c25404ea88b9d2ff0736ff9f6e84b9 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 9 May 2024 11:19:34 +0200 Subject: [PATCH 183/505] feat: Refactor platform code (#472) --- readme.md | 13 +++++++++++++ src/define.sh | 16 ++++++++-------- src/install.sh | 49 +++++++++++++++++-------------------------------- 3 files changed, 38 insertions(+), 40 deletions(-) diff --git a/readme.md b/readme.md index f24e012..0def083 100644 --- a/readme.md +++ b/readme.md @@ -291,6 +291,19 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ Please note that in this mode, the container and Windows will each have their own separate IPs. The container will keep the macvlan IP, and Windows will use the DHCP IP. +* ### How do I add multiple disks? + + To create additional disks, modify your compose file like this: + + ```yaml + environment: + DISK2_SIZE: "32G" + DISK3_SIZE: "64G" + volumes: + - /home/example:/storage2 + - /mnt/data/example:/storage3 + ``` + * ### How do I pass-through a disk? It is possible to pass-through disk devices directly by adding them to your compose file in this way: diff --git a/src/define.sh b/src/define.sh index 087f18b..6adb56c 100644 --- a/src/define.sh +++ b/src/define.sh @@ -41,14 +41,14 @@ parseVersion() { ;; "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" ) VERSION="win7${PLATFORM,,}" - DETECTED="win7${PLATFORM,,}-enterprise" + [ -z "$DETECTED" ] && DETECTED="win7${PLATFORM,,}-enterprise" ;; "7u" | "win7u" | "windows7u" | "windows 7u" ) VERSION="win7${PLATFORM,,}-ultimate" ;; "vista" | "winvista" | "windowsvista" | "windows vista" ) VERSION="winvista${PLATFORM,,}" - DETECTED="winvista${PLATFORM,,}-enterprise" + [ -z "$DETECTED" ] && DETECTED="winvista${PLATFORM,,}-enterprise" ;; "vistu" | "winvistu" | "windowsvistu" | "windows vistu" ) VERSION="winvista${PLATFORM,,}-ultimate" @@ -76,27 +76,27 @@ parseVersion() { ;; "core11" | "core 11" ) VERSION="core11" - DETECTED="win11${PLATFORM,,}" + [ -z "$DETECTED" ] && DETECTED="win11${PLATFORM,,}" ;; "tiny11" | "tiny 11" ) VERSION="tiny11" - DETECTED="win11${PLATFORM,,}" + [ -z "$DETECTED" ] && DETECTED="win11${PLATFORM,,}" ;; "tiny10" | "tiny 10" ) VERSION="tiny10" - DETECTED="win10${PLATFORM,,}-ltsc" + [ -z "$DETECTED" ] && DETECTED="win10${PLATFORM,,}-ltsc" ;; "iot11" | "11iot" | "win11-iot" | "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) - DETECTED="win11${PLATFORM,,}-iot" VERSION="win11${PLATFORM,,}-enterprise-iot-eval" + [ -z "$DETECTED" ] && DETECTED="win11${PLATFORM,,}-iot" ;; "iot10" | "10iot" | "win10-iot" | "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) - DETECTED="win10${PLATFORM,,}-iot" VERSION="win10${PLATFORM,,}-enterprise-iot-eval" + [ -z "$DETECTED" ] && DETECTED="win10${PLATFORM,,}-iot" ;; "ltsc10" | "10ltsc" | "win10-ltsc" | "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - DETECTED="win10${PLATFORM,,}-ltsc" VERSION="win10${PLATFORM,,}-enterprise-ltsc-eval" + [ -z "$DETECTED" ] && DETECTED="win10${PLATFORM,,}-ltsc" ;; esac diff --git a/src/install.sh b/src/install.sh index 17f3af0..6f4d81c 100644 --- a/src/install.sh +++ b/src/install.sh @@ -279,7 +279,7 @@ verifyFile() { local check="$4" if [ -n "$size" ] && [[ "$total" != "$size" ]] && [[ "$size" != "0" ]]; then - warn "The downloaded file has an invalid size: $total bytes, while expected value was: $size bytes. Please report this at $SUPPORT/issues" + warn "The downloaded file has an unexpected size: $total bytes, while expected value was: $size bytes. Please report this at $SUPPORT/issues" fi local hash="" @@ -431,10 +431,9 @@ downloadImage() { tried="y" if getESD "$TMP/esd" "$version"; then - local prev="$ISO" ISO="${ISO%.*}.esd" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$desc" && return 0 - ISO="$prev" + ISO="$iso" fi fi @@ -663,41 +662,27 @@ selectVersion() { detectVersion() { local xml="$1" - local id="" - local arch="" + local id arch local tag="ARCH" local platform="x64" + local compat="$platform" arch=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$xml") case "${arch,,}" in - "0" ) - platform="x86" - if [[ "${PLATFORM,,}" != "x64" ]]; then - error "You cannot boot $platform images on a $PLATFORM cpu!" && exit 67 - fi - ;; - "9" ) - platform="x64" - if [[ "${PLATFORM,,}" != "x64" ]]; then - error "You cannot boot $platform images on a $PLATFORM cpu!" && exit 67 - fi - ;; - "12" ) - platform="arm64" - if [[ "${PLATFORM,,}" != "arm64" ]]; then - error "You cannot boot ${platform^^} images on a $PLATFORM cpu!" && exit 67 - fi - ;; + "0" ) platform="x86"; compat="x64" ;; + "9" ) platform="x64"; compat="$platform" ;; + "12" )platform="arm64"; compat="$platform" ;; esac - + + if [[ "${compat,,}" != "${PLATFORM,,}" ]]; then + error "You cannot boot ${platform^^} images on a $PLATFORM cpu!" + exit 67 + fi + id=$(selectVersion "DISPLAYNAME" "$xml" "$platform") - [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0 - - id=$(selectVersion "PRODUCTNAME" "$xml" "$platform") - [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0 - - id=$(selectVersion "NAME" "$xml" "$platform") + [ -z "$id" ] && id=$(selectVersion "PRODUCTNAME" "$xml" "$platform") + [ -z "$id" ] && id=$(selectVersion "NAME" "$xml" "$platform") [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0 return 0 @@ -711,8 +696,8 @@ detectImage() { XML="" - if [ -z "$DETECTED" ] && [[ "${version,,}" != "http"* ]]; then - [ -z "$CUSTOM" ] && DETECTED="$version" + if [ -z "$DETECTED" ] && [ -z "$CUSTOM" ]; then + [[ "${version,,}" != "http"* ]] && DETECTED="$version" fi if [ -n "$DETECTED" ]; then From 3b7e2373f735a85c9135ca37277cb5046dfdeb85 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 9 May 2024 15:47:46 +0200 Subject: [PATCH 184/505] feat: Store installation type (#476) --- src/install.sh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/install.sh b/src/install.sh index 6f4d81c..398c77b 100644 --- a/src/install.sh +++ b/src/install.sh @@ -33,8 +33,6 @@ startInstall() { html "Starting Windows..." - [ -z "$MANUAL" ] && MANUAL="N" - if [ -n "$CUSTOM" ]; then ISO="$CUSTOM" @@ -62,10 +60,13 @@ startInstall() { if [ -f "$ISO" ] && [ -s "$ISO" ]; then # Check if the ISO was already processed by our script - local magic="" + local magic + local byte="16" + [[ "$MANUAL" == [Yy1]* ]] && byte="17" magic=$(dd if="$ISO" seek=0 bs=1 count=1 status=none | tr -d '\000') magic="$(printf '%s' "$magic" | od -A n -t x1 -v | tr -d ' \n')" - [[ "$magic" == "16" ]] && return 1 + + [[ "$magic" == "$byte" ]] && return 1 fi @@ -106,7 +107,9 @@ finishInstall() { if [ -w "$iso" ] && [[ "$aborted" != [Yy1]* ]]; then # Mark ISO as prepared via magic byte - if ! printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none; then + local byte="\x16" + [[ "$MANUAL" == [Yy1]* ]] && byte="\x17" + if ! printf "$byte" | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none; then error "Failed to set magic byte in ISO file: $iso" && return 1 fi fi From 5a000c1f9ea93200c0cbe262b664fbad3440f624 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 9 May 2024 15:59:06 +0200 Subject: [PATCH 185/505] feat: Store installation type (#477) --- src/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/install.sh b/src/install.sh index 398c77b..194d187 100644 --- a/src/install.sh +++ b/src/install.sh @@ -107,9 +107,9 @@ finishInstall() { if [ -w "$iso" ] && [[ "$aborted" != [Yy1]* ]]; then # Mark ISO as prepared via magic byte - local byte="\x16" - [[ "$MANUAL" == [Yy1]* ]] && byte="\x17" - if ! printf "$byte" | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none; then + local byte="16" + [[ "$MANUAL" == [Yy1]* ]] && byte="17" + if ! printf '%b' "\x$byte" | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none; then error "Failed to set magic byte in ISO file: $iso" && return 1 fi fi From f7986f57ce4e746f4e2fd1be22a2ec0b1bff7ee4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 10 May 2024 18:21:41 +0200 Subject: [PATCH 186/505] feat: Improved installation (#483) --- src/define.sh | 10 +- src/install.sh | 273 +++++++++++++++++++++++++++++++++---------------- src/power.sh | 10 +- 3 files changed, 199 insertions(+), 94 deletions(-) diff --git a/src/define.sh b/src/define.sh index 6adb56c..9b2bed9 100644 --- a/src/define.sh +++ b/src/define.sh @@ -984,7 +984,7 @@ migrateFiles() { [[ "${version,,}" == "win7${PLATFORM,,}" ]] && file="en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" [ ! -f "$STORAGE/$file" ] && return 0 - ! mv "$STORAGE/$file" "$base" && return 1 + ! mv -f "$STORAGE/$file" "$base" && return 1 return 0 } @@ -1199,15 +1199,17 @@ prepareLegacy() { local iso="$1" local dir="$2" + local file="$dir/boot.img" - ETFS="boot.img" - rm -f "$dir/$ETFS" + ETFS=$(basename "$file") + [ -f "$file" ] && [ -s "$file" ] && return 0 + rm -f "$file" local len offset len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") - dd "if=$iso" "of=$dir/$ETFS" bs=2048 "count=$len" "skip=$offset" status=none && return 0 + dd "if=$iso" "of=$file" bs=2048 "count=$len" "skip=$offset" status=none && return 0 return 1 } diff --git a/src/install.sh b/src/install.sh index 194d187..bab0755 100644 --- a/src/install.sh +++ b/src/install.sh @@ -31,7 +31,7 @@ skipInstall() { startInstall() { - html "Starting Windows..." + html "Starting $APP..." if [ -n "$CUSTOM" ]; then @@ -59,23 +59,37 @@ startInstall() { if [ -f "$ISO" ] && [ -s "$ISO" ]; then - # Check if the ISO was already processed by our script local magic - local byte="16" - [[ "$MANUAL" == [Yy1]* ]] && byte="17" + local auto="16" + local manual="17" + local byte="$auto" + [[ "$MANUAL" == [Yy1]* ]] && byte="$manual" + + # Check if the ISO was already processed by our script magic=$(dd if="$ISO" seek=0 bs=1 count=1 status=none | tr -d '\000') magic="$(printf '%s' "$magic" | od -A n -t x1 -v | tr -d ' \n')" - [[ "$magic" == "$byte" ]] && return 1 + if [[ "$magic" == "$byte" ]]; then + if [ -z "$CUSTOM" ] || [ -n "$ORIGINAL" ]; then + return 1 + fi + fi fi + rm -rf "$TMP" + mkdir -p "$TMP" + if [ -z "$CUSTOM" ]; then BOOT="$ISO" ISO=$(basename "$ISO") ISO="$TMP/$ISO" + if [ -f "$BOOT" ] && [ -s "$BOOT" ]; then + mv -f "$BOOT" "$ISO" + fi + else if [ -n "$ORIGINAL" ]; then @@ -91,8 +105,6 @@ startInstall() { fi rm -f "$BOOT" - rm -rf "$TMP" - mkdir -p "$TMP" return 0 } @@ -118,7 +130,7 @@ finishInstall() { rm -f "$STORAGE/windows.boot" rm -f "$STORAGE/windows.mode" - cp /run/version "$STORAGE/windows.ver" + cp -f /run/version "$STORAGE/windows.ver" if [[ "${PLATFORM,,}" == "x64" ]]; then if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then @@ -174,19 +186,18 @@ detectCustom() { base="${VERSION/\/storage\//}" [[ "$base" == "."* ]] && base="${file:1}" [[ "$base" == *"/"* ]] && base="" - [ -n "$base" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$base" -printf "%f\n" | head -n 1) + [ -n "$base" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$base" | head -n 1) fi - [ -z "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1) - [ -z "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) - [ -n "$file" ] && file="$STORAGE/$file" + [ -z "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso | head -n 1) + [ -z "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img | head -n 1) base="/custom.iso" [ -f "$base" ] && [ -s "$base" ] && file="$base" - [ -z "$file" ] && return 0 - [ ! -f "$file" ] && return 0 - [ ! -s "$file" ] && return 0 + if [ ! -f "$file" ] || [ ! -s "$file" ]; then + return 0 + fi size="$(stat -c%s "$file")" [ -z "$size" ] || [[ "$size" == "0" ]] && return 0 @@ -197,8 +208,8 @@ detectCustom() { CUSTOM="$base" ORIGINAL="$file" else - CUSTOM="$file" rm -f "$base" + CUSTOM="$file" fi return 0 @@ -499,20 +510,20 @@ extractESD() { fi local esdImageCount - esdImageCount=$(wimlib-imagex info "${iso}" | awk '/Image Count:/ {print $3}') + esdImageCount=$(wimlib-imagex info "$iso" | awk '/Image Count:/ {print $3}') - wimlib-imagex apply "$iso" 1 "${dir}" --quiet 2>/dev/null || { + wimlib-imagex apply "$iso" 1 "$dir" --quiet 2>/dev/null || { retVal=$? error "Extracting $desc bootdisk failed" && return $retVal } - local bootWimFile="${dir}/sources/boot.wim" - local installWimFile="${dir}/sources/install.wim" + local bootWimFile="$dir/sources/boot.wim" + local installWimFile="$dir/sources/install.wim" local msg="Extracting $desc environment..." info "$msg" && html "$msg" - wimlib-imagex export "${iso}" 2 "${bootWimFile}" --compress=LZX --chunk-size 32K --quiet || { + wimlib-imagex export "$iso" 2 "$bootWimFile" --compress=LZX --chunk-size 32K --quiet || { retVal=$? error "Adding WinPE failed" && return ${retVal} } @@ -520,7 +531,7 @@ extractESD() { local msg="Extracting $desc setup..." info "$msg" && html "$msg" - wimlib-imagex export "${iso}" 3 "$bootWimFile" --compress=LZX --chunk-size 32K --boot --quiet || { + wimlib-imagex export "$iso" 3 "$bootWimFile" --compress=LZX --chunk-size 32K --boot --quiet || { retVal=$? error "Adding Windows Setup failed" && return ${retVal} } @@ -542,11 +553,11 @@ 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 || { + wimlib-imagex export "$iso" ${imageIndex} "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || { retVal=$? - error "Addition of ${imageIndex} to the $desc image failed" && return $retVal + error "Addition of $imageIndex to the $desc image failed" && return $retVal } return 0 done @@ -606,22 +617,50 @@ extractImage() { setXML() { - [[ "$MANUAL" == [Yy1]* ]] && return 0 - local file="/custom.xml" - [ -f "$file" ] && [ -s "$file" ] && XML="$file" && return 0 + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/$DETECTED.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && return 1 - file="$STORAGE/custom.xml" - [ -f "$file" ] && [ -s "$file" ] && XML="$file" && return 0 + XML="$file" + return 0 +} - file="/run/assets/custom.xml" - [ -f "$file" ] && [ -s "$file" ] && XML="$file" && return 0 +getPlatform() { - file="$1" - [ -z "$file" ] && file="/run/assets/$DETECTED.xml" - [ -f "$file" ] && [ -s "$file" ] && XML="$file" && return 0 + local xml="$1" + local tag="ARCH" + local platform="x64" + local arch - return 1 + arch=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$xml") + + case "${arch,,}" in + "0" ) platform="x86" ;; + "9" ) platform="x64" ;; + "12" )platform="arm64" ;; + esac + + echo "$platform" + return 0 +} + +hasVersion() { + + local id="$1" + local tag="$2" + local xml="$3" + local edition + + [ ! -f "/run/assets/$id.xml" ] && return 1 + + edition=$(printEdition "$id" "") + [ -z "$edition" ] && return 1 + [[ "${xml,,}" != *"<${tag,,}>${edition,,}</${tag,,}>"* ]] && return 1 + + return 0 } selectVersion() { @@ -629,7 +668,7 @@ selectVersion() { local tag="$1" local xml="$2" local platform="$3" - local id find name prefer + local id name prefer name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$xml") [[ "$name" == *"Operating System"* ]] && name="" @@ -639,22 +678,13 @@ selectVersion() { [ -z "$id" ] && warn "Unknown ${tag,,}: '$name'" && return 0 prefer="$id-enterprise" - [ -f "/run/assets/$prefer.xml" ] && find=$(printEdition "$prefer" "") || find="" - if [ -n "$find" ] && [[ "${xml,,}" == *"<${tag,,}>${find,,}</${tag,,}>"* ]]; then - echo "$prefer" && return 0 - fi + hasVersion "$prefer" "$tag" "$xml" && echo "$prefer" && return 0 prefer="$id-ultimate" - [ -f "/run/assets/$prefer.xml" ] && find=$(printEdition "$prefer" "") || find="" - if [ -n "$find" ] && [[ "${xml,,}" == *"<${tag,,}>${find,,}</${tag,,}>"* ]]; then - echo "$prefer" && return 0 - fi + hasVersion "$prefer" "$tag" "$xml" && echo "$prefer" && return 0 prefer="$id" - [ -f "/run/assets/$prefer.xml" ] && find=$(printEdition "$prefer" "") || find="" - if [ -n "$find" ] && [[ "${xml,,}" == *"<${tag,,}>${find,,}</${tag,,}>"* ]]; then - echo "$prefer" && return 0 - fi + hasVersion "$prefer" "$tag" "$xml" && echo "$prefer" && return 0 prefer=$(getVersion "$name" "$platform") @@ -662,32 +692,37 @@ selectVersion() { return 0 } +checkPlatform() { + + local xml="$1" + local platform compat + + platform=$(getPlatform "$xml") + + case "${platform,,}" in + "x86" ) compat="x64" ;; + "x64" ) compat="$platform" ;; + "arm64" ) compat="$platform" ;; + * ) compat="${PLATFORM,,}" ;; + esac + + [[ "${compat,,}" == "${PLATFORM,,}" ]] && return 0 + + error "You cannot boot ${platform^^} images on a $PLATFORM CPU!" + return 1 +} + detectVersion() { local xml="$1" - local id arch - local tag="ARCH" - local platform="x64" - local compat="$platform" - - arch=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$xml") - - case "${arch,,}" in - "0" ) platform="x86"; compat="x64" ;; - "9" ) platform="x64"; compat="$platform" ;; - "12" )platform="arm64"; compat="$platform" ;; - esac - - if [[ "${compat,,}" != "${PLATFORM,,}" ]]; then - error "You cannot boot ${platform^^} images on a $PLATFORM cpu!" - exit 67 - fi + local id platform + platform=$(getPlatform "$xml") id=$(selectVersion "DISPLAYNAME" "$xml" "$platform") [ -z "$id" ] && id=$(selectVersion "PRODUCTNAME" "$xml" "$platform") [ -z "$id" ] && id=$(selectVersion "NAME" "$xml" "$platform") - [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0 + echo "$id" return 0 } @@ -707,10 +742,12 @@ detectImage() { [[ "${DETECTED,,}" == "winxp"* ]] && return 0 - setXML "" && return 0 + if ! setXML "" && [[ "$MANUAL" != [Yy1]* ]]; then + MANUAL="Y" + desc=$(printEdition "$DETECTED" "this version") + warn "the answer file for $desc was not found ($DETECTED.xml), $FB." + fi - desc=$(printEdition "$DETECTED" "this version") - warn "the answer file for $desc was not found ($DETECTED.xml), $FB." return 0 fi @@ -740,12 +777,19 @@ detectImage() { fi info=$(wimlib-imagex info -xml "$loc" | tr -d '\000') + ! checkPlatform "$info" && exit 67 + DETECTED=$(detectVersion "$info") if [ -z "$DETECTED" ]; then msg="Failed to determine Windows version from image" - setXML "" && info "${msg}!" && return 0 - warn "${msg}, $FB" && return 0 + if setXML "" || [[ "$MANUAL" == [Yy1]* ]]; then + info "${msg}!" + else + MANUAL="Y" + warn "${msg}, $FB." + fi + return 0 fi desc=$(printEdition "$DETECTED" "$DETECTED") @@ -756,9 +800,13 @@ detectImage() { msg="the answer file for $desc was not found ($DETECTED.xml)" local fallback="/run/assets/${DETECTED%%-*}.xml" - setXML "$fallback" && warn "${msg}." && return 0 + if setXML "$fallback" || [[ "$MANUAL" == [Yy1]* ]]; then + [[ "$MANUAL" != [Yy1]* ]] && warn "${msg}." + else + MANUAL="Y" + warn "${msg}, $FB." + fi - warn "${msg}, $FB." return 0 } @@ -800,12 +848,18 @@ updateImage() { local dir="$1" local asset="$2" - local path src loc xml index result + local file="autounattend.xml" + local org="${file/.xml/.org}" + local dat="${file/.xml/.dat}" + local desc path src loc xml index result - [ ! -s "$asset" ] || [ ! -f "$asset" ] && return 0 - - path=$(find "$dir" -maxdepth 1 -type f -iname autounattend.xml | head -n 1) - [ -n "$path" ] && cp "$asset" "$path" + if [ ! -s "$asset" ] || [ ! -f "$asset" ]; then + asset="" + if [[ "$MANUAL" != [Yy1]* ]]; then + MANUAL="Y" + warn "no answer file provided, $FB." + fi + fi src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) @@ -822,9 +876,6 @@ updateImage() { warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 fi - xml=$(basename "$asset") - info "Adding $xml for automatic installation..." - index="1" result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') @@ -832,8 +883,56 @@ updateImage() { index="2" fi - if ! wimlib-imagex update "$loc" "$index" --command "add $asset /autounattend.xml" > /dev/null; then - warn "failed to add answer file ($xml) to ISO image, $FB" && return 1 + if wimlib-imagex extract "$loc" "$index" "/$file" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex extract "$loc" "$index" "/$dat" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex extract "$loc" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex update "$loc" "$index" --command "rename /$file /$org" > /dev/null; then + warn "failed to backup original answer file ($file)." + fi + fi + fi + rm -f "$TMP/$dat" + rm -f "$TMP/$org" + rm -f "$TMP/$file" + fi + + if [[ "$MANUAL" != [Yy1]* ]]; then + + xml=$(basename "$asset") + info "Adding $xml for automatic installation..." + + if ! wimlib-imagex update "$loc" "$index" --command "add $asset /$file" > /dev/null; then + MANUAL="Y" + warn "failed to add answer file ($xml) to ISO image, $FB" + else + wimlib-imagex update "$loc" "$index" --command "add $asset /$dat" > /dev/null || true + fi + + fi + + if [[ "$MANUAL" == [Yy1]* ]]; then + + wimlib-imagex update "$loc" "$index" --command "delete --force /$file" > /dev/null || true + + if wimlib-imagex extract "$loc" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex update "$loc" "$index" --command "add $TMP/$org /$file" > /dev/null; then + warn "failed to restore original answer file ($org)." + fi + rm -f "$TMP/$org" + fi + + fi + + local find="$file" + [[ "$MANUAL" == [Yy1]* ]] && find="$org" + path=$(find "$dir" -maxdepth 1 -type f -iname "$find" | head -n 1) + + if [ -f "$path" ]; then + if [[ "$MANUAL" != [Yy1]* ]]; then + mv -f "$path" "${path%.*}.org" + else + mv -f "$path" "${path%.*}.xml" + fi fi return 0 @@ -938,7 +1037,7 @@ buildImage() { [ -s "$log" ] && error="$(<"$log")" [[ "$error" != "$hide" ]] && echo "$error" - mv "$out" "$BOOT" + ! mv -f "$out" "$BOOT" && return 1 return 0 } @@ -989,10 +1088,10 @@ bootWindows() { BOOT_MODE="windows_secure" echo "$BOOT_MODE" > "$STORAGE/windows.mode" if [ -f "$STORAGE/windows.rom" ] && [ ! -f "$STORAGE/$BOOT_MODE.rom" ]; then - mv "$STORAGE/windows.rom" "$STORAGE/$BOOT_MODE.rom" + mv -f "$STORAGE/windows.rom" "$STORAGE/$BOOT_MODE.rom" fi if [ -f "$STORAGE/windows.vars" ] && [ ! -f "$STORAGE/$BOOT_MODE.vars" ]; then - mv "$STORAGE/windows.vars" "$STORAGE/$BOOT_MODE.vars" + mv -f "$STORAGE/windows.vars" "$STORAGE/$BOOT_MODE.vars" fi fi fi diff --git a/src/power.sh b/src/power.sh index 4408920..e21f37c 100644 --- a/src/power.sh +++ b/src/power.sh @@ -29,8 +29,10 @@ boot() { if [ -s "$QEMU_PTY" ]; then if [ "$(stat -c%s "$QEMU_PTY")" -gt 7 ]; then - info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." - return 0 + if ! grep -Fq "BOOTMGR is missing" "$QEMU_PTY"; then + info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." + return 0 + fi fi fi @@ -48,7 +50,9 @@ ready() { local bios="Booting from Hard" last=$(grep "^Booting.*" "$QEMU_PTY" | tail -1) if [[ "${last,,}" == "${bios,,}"* ]]; then - return 0 + if ! grep -Fq "BOOTMGR is missing" "$QEMU_PTY"; then + return 0 + fi fi return 1 fi From 47d2d2294cc06b5a7b086e36572623e891a51b9c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 10 May 2024 21:26:10 +0200 Subject: [PATCH 187/505] feat: Faster ESD extraction (#484) --- src/install.sh | 4 ++-- src/power.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/install.sh b/src/install.sh index bab0755..64a72ad 100644 --- a/src/install.sh +++ b/src/install.sh @@ -523,7 +523,7 @@ extractESD() { local msg="Extracting $desc environment..." info "$msg" && html "$msg" - wimlib-imagex export "$iso" 2 "$bootWimFile" --compress=LZX --chunk-size 32K --quiet || { + wimlib-imagex export "$iso" 2 "$bootWimFile" --compress=none --quiet || { retVal=$? error "Adding WinPE failed" && return ${retVal} } @@ -531,7 +531,7 @@ extractESD() { local msg="Extracting $desc setup..." info "$msg" && html "$msg" - wimlib-imagex export "$iso" 3 "$bootWimFile" --compress=LZX --chunk-size 32K --boot --quiet || { + wimlib-imagex export "$iso" 3 "$bootWimFile" --compress=none --boot --quiet || { retVal=$? error "Adding Windows Setup failed" && return ${retVal} } diff --git a/src/power.sh b/src/power.sh index e21f37c..3b61825 100644 --- a/src/power.sh +++ b/src/power.sh @@ -57,7 +57,7 @@ ready() { return 1 fi - local line="Windows Boot Manager" + local line="\"Windows Boot Manager\"" if grep -Fq "$line" "$QEMU_PTY"; then return 0 fi From eb0b0fe80cbd51709987c64dc02d3effac6f1204 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 12 May 2024 13:49:56 +0200 Subject: [PATCH 188/505] feat: Improved installation (#486) --- Dockerfile | 2 +- readme.md | 24 ++++++---- src/install.sh | 128 +++++++++++++++++++++++-------------------------- 3 files changed, 77 insertions(+), 77 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5e3d2cf..29a0caf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.02 / / +COPY --from=qemux/qemu-docker:5.03 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/readme.md b/readme.md index 0def083..fdcbf18 100644 --- a/readme.md +++ b/readme.md @@ -138,21 +138,21 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ * ### How do I install a custom image? - In order to download any ISO image that is not part of the list above, start a fresh container with the URL of that ISO specified in the `VERSION` environment variable, for example: + In order to download an unsupported ISO image that is not selectable from the list above, specify the URL of that ISO in the `VERSION` environment variable, for example: ```yaml environment: VERSION: "https://example.com/win.iso" ``` - Alternatively, you can also use a local file directly, and skip the download altogether, by binding it in your compose file in this way: + Alternatively, you can also skip the download and use a local file instead, by binding it in your compose file in this way: ```yaml volumes: - /home/user/example.iso:/custom.iso ``` - Replace the example path `/home/user/example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. + Replace the example path `/home/user/example.iso` with the filename of your desired ISO file, the value of `VERSION` will be ignored in this case. * ### How do I customize the installation? @@ -180,9 +180,9 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ * ### How do I perform a manual installation? - It's best to use the automatic installation, as it optimizes various settings for use with this container. These tweaks will give you maximum performance and prevent common issues. + It's best to use the automatic installation, as it optimizes various settings to give you maximum performance and prevent common issues. - However, if you insist on performing the installation manually, start a fresh container with the following environment variable: + However, if you insist on performing the installation manually, add the following environment variable to your compose file: ```yaml environment: @@ -193,17 +193,25 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ - Start the container and connect to [port 8006](http://localhost:8006) of the container in your web browser. After the download is finished, you will see the Windows installation screen. - - Start the installation by clicking `Install now`. On the next screen, press 'OK' when prompted to `Load driver` and select the `VirtIO SCSI` driver from the list that matches your Windows version. So for Windows 11, select `D:\amd64\w11\vioscsi.inf` and click 'Next'. + - Start the installation by clicking `Install now`. On the next screen, press 'OK' when prompted to `Load driver`. + + - Select the `VirtIO SCSI` driver from the list that matches your Windows version. So for Windows 11, select `D:\amd64\w11\vioscsi.inf` and click 'Next'. - Accept the license agreement and select your preferred Windows edition, like Home or Pro. - - Choose `Custom: Install Windows only (advanced)`, and click `Load driver` on the next screen. Select 'Browse' and navigate to the `D:\NetKVM\w11\amd64` folder, and click 'OK'. Select the `VirtIO Ethernet Adapter` from the list and click 'Next'. + - Choose `Custom: Install Windows only (advanced)`, and click `Load driver` on the next screen. + + - Select 'Browse' and navigate to the `D:\NetKVM\w11\amd64` folder, and click 'OK'. + + - Select the `VirtIO Ethernet Adapter` from the list and click 'Next'. - Select `Drive 0` and click 'Next'. - Wait until Windows finishes copying files and completes the installation. - - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (E:). Double-click on `virtio-win-gt-x64.msi` and proceed to install the VirtIO drivers. + - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (`E:\`). + + - Double-click on `virtio-win-gt-x64.msi` and proceed to install the VirtIO drivers. Enjoy your brand new machine, and don't forget to star this repo! diff --git a/src/install.sh b/src/install.sh index 64a72ad..550e4f1 100644 --- a/src/install.sh +++ b/src/install.sh @@ -12,32 +12,58 @@ hasDisk() { [ -b "/disk1" ] && return 0 [ -b "/dev/disk1" ] && return 0 [ -b "${DEVICE:-}" ] && return 0 - - if [ -s "$STORAGE/data.img" ] || [ -s "$STORAGE/data.qcow2" ]; then - return 0 - fi + [ -s "$STORAGE/data.img" ] && return 0 + [ -s "$STORAGE/data.qcow2" ] && return 0 return 1 } skipInstall() { - if hasDisk && [ -f "$STORAGE/windows.boot" ]; then - return 0 + local iso="$1" + local magic byte + local boot="$STORAGE/windows.boot" + local previous="$STORAGE/windows.base" + + if [ -f "$previous" ]; then + previous=$(<"$previous") + if [ -n "$previous" ]; then + previous="$STORAGE/$previous" + if [[ "${previous,,}" != "${iso,,}" ]]; then + if [ -f "$boot" ] && hasDisk; then + info "Detected that the version was changed, but ignoring this because Windows is already installed." + info "Please start with an empty /storage folder, if you want to install a different version of Windows." + return 0 + fi + [ -f "$previous" ] && rm -f "$previous" + return 1 + fi + fi fi - return 1 + [ -f "$boot" ] && hasDisk && return 0 + + [ ! -f "$iso" ] && return 1 + [ ! -s "$iso" ] && return 1 + + # Check if the ISO was already processed by our script + magic=$(dd if="$iso" seek=0 bs=1 count=1 status=none | tr -d '\000') + magic="$(printf '%s' "$magic" | od -A n -t x1 -v | tr -d ' \n')" + byte="16" && [[ "$MANUAL" == [Yy1]* ]] && byte="17" + + if [[ "$magic" != "$byte" ]]; then + info "The ISO will be processed again because the configuration was changed..." + return 1 + fi + + return 0 } startInstall() { html "Starting $APP..." - if [ -n "$CUSTOM" ]; then - - ISO="$CUSTOM" - - else + if [ -z "$CUSTOM" ]; then local file="${VERSION/\//}.iso" @@ -49,59 +75,26 @@ startInstall() { fi - ISO="$STORAGE/$file" + BOOT="$STORAGE/$file" - ! migrateFiles "$ISO" "$VERSION" && error "Migration failed!" && exit 57 + ! migrateFiles "$BOOT" "$VERSION" && error "Migration failed!" && exit 57 fi - skipInstall && return 1 - - if [ -f "$ISO" ] && [ -s "$ISO" ]; then - - local magic - local auto="16" - local manual="17" - local byte="$auto" - [[ "$MANUAL" == [Yy1]* ]] && byte="$manual" - - # Check if the ISO was already processed by our script - magic=$(dd if="$ISO" seek=0 bs=1 count=1 status=none | tr -d '\000') - magic="$(printf '%s' "$magic" | od -A n -t x1 -v | tr -d ' \n')" - - if [[ "$magic" == "$byte" ]]; then - if [ -z "$CUSTOM" ] || [ -n "$ORIGINAL" ]; then - return 1 - fi - fi - - fi + skipInstall "$BOOT" && return 1 rm -rf "$TMP" mkdir -p "$TMP" if [ -z "$CUSTOM" ]; then - BOOT="$ISO" - ISO=$(basename "$ISO") + ISO=$(basename "$BOOT") ISO="$TMP/$ISO" if [ -f "$BOOT" ] && [ -s "$BOOT" ]; then mv -f "$BOOT" "$ISO" fi - else - - if [ -n "$ORIGINAL" ]; then - rm -f "$ISO" - ISO="$ORIGINAL" - CUSTOM="$ISO" - fi - - local size - size="$(stat -c%s "$ISO")" - BOOT="$STORAGE/windows.$size.iso" - fi rm -f "$BOOT" @@ -112,26 +105,34 @@ finishInstall() { local iso="$1" local aborted="$2" + local base byte if [ ! -s "$iso" ] || [ ! -f "$iso" ]; then error "Failed to find ISO file: $iso" && return 1 fi - if [ -w "$iso" ] && [[ "$aborted" != [Yy1]* ]]; then + if [[ "$aborted" != [Yy1]* ]]; then # Mark ISO as prepared via magic byte - local byte="16" - [[ "$MANUAL" == [Yy1]* ]] && byte="17" + byte="16" && [[ "$MANUAL" == [Yy1]* ]] && byte="17" if ! printf '%b' "\x$byte" | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none; then - error "Failed to set magic byte in ISO file: $iso" && return 1 + warn "failed to set magic byte in ISO file: $iso" fi fi rm -f "$STORAGE/windows.old" + rm -f "$STORAGE/windows.base" rm -f "$STORAGE/windows.boot" rm -f "$STORAGE/windows.mode" cp -f /run/version "$STORAGE/windows.ver" + if [[ "$iso" == "$STORAGE/"* ]]; then + if [[ "$aborted" != [Yy1]* ]] || [ -z "$CUSTOM" ]; then + base=$(basename "$iso") + echo "$base" > "$STORAGE/windows.base" + fi + fi + if [[ "${PLATFORM,,}" == "x64" ]]; then if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then echo "$BOOT_MODE" > "$STORAGE/windows.mode" @@ -180,7 +181,6 @@ detectCustom() { local size base CUSTOM="" - ORIGINAL="" if [[ "${VERSION,,}" != "http"* ]]; then base="${VERSION/\/storage\//}" @@ -202,15 +202,9 @@ detectCustom() { size="$(stat -c%s "$file")" [ -z "$size" ] || [[ "$size" == "0" ]] && return 0 - base="$STORAGE/windows.$size.iso" - - if [ -f "$base" ] && [ -s "$base" ]; then - CUSTOM="$base" - ORIGINAL="$file" - else - rm -f "$base" - CUSTOM="$file" - fi + ISO="$file" + CUSTOM="$ISO" + BOOT="$STORAGE/windows.$size.iso" return 0 } @@ -1045,13 +1039,11 @@ bootWindows() { rm -rf "$TMP" - if [ ! -f "$ISO" ] || [ ! -s "$ISO" ]; then - ISO="/custom.iso" - [ ! -f "$ISO" ] && ISO="${STORAGE}$ISO" + if [ ! -f "$BOOT" ] || [ ! -s "$BOOT" ]; then + BOOT="/custom.iso" + [ ! -f "$BOOT" ] && BOOT="${STORAGE}$BOOT" fi - BOOT="$ISO" - [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then From 08055530ecd2bdd390068a76242b5b2181ac1304 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 13 May 2024 03:52:20 +0200 Subject: [PATCH 189/505] build: Optimize Dockerfile (#488) --- Dockerfile | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index 29a0caf..d044bbc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,13 @@ FROM scratch COPY --from=qemux/qemu-docker:5.03 / / -ARG DEBCONF_NOWARNINGS "yes" -ARG DEBIAN_FRONTEND "noninteractive" -ARG DEBCONF_NONINTERACTIVE_SEEN "true" +ARG VERSION_ARG="0.0" +ARG DEBCONF_NOWARNINGS="yes" +ARG DEBIAN_FRONTEND="noninteractive" +ARG DEBCONF_NONINTERACTIVE_SEEN="true" -RUN apt-get update && \ +RUN set -eu && \ + apt-get update && \ apt-get --no-install-recommends -y install \ bc \ curl \ @@ -18,15 +20,14 @@ RUN apt-get update && \ genisoimage \ libxml2-utils && \ apt-get clean && \ + echo "$VERSION_ARG" > /run/version && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* -COPY ./src /run/ -COPY ./assets /run/assets +COPY --chmod=755 ./src /run/ +COPY --chmod=755 ./assets /run/assets -ADD https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd -ADD https://github.com/qemus/virtiso/releases/download/v0.1.248/virtio-win-0.1.248.iso /run/drivers.iso - -RUN chmod +x /run/*.sh && chmod +x /usr/sbin/wsdd +ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd +ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.248/virtio-win-0.1.248.iso /run/drivers.iso EXPOSE 8006 3389 VOLUME /storage @@ -36,7 +37,4 @@ ENV CPU_CORES "2" ENV DISK_SIZE "64G" ENV VERSION "win11" -ARG VERSION_ARG "0.0" -RUN echo "$VERSION_ARG" > /run/version - ENTRYPOINT ["/usr/bin/tini", "-s", "/run/entry.sh"] From 0a5d491177920d915ee98b96e893785f7f7afaf5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 May 2024 15:57:16 +0200 Subject: [PATCH 190/505] feat: Convert line endings (#494) --- src/install.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index 550e4f1..653edc9 100644 --- a/src/install.sh +++ b/src/install.sh @@ -936,7 +936,7 @@ copyOEM() { local dir="$1" local folder="/oem" - local src + local src dest file [ ! -d "$folder" ] && folder="/OEM" [ ! -d "$folder" ] && folder="$STORAGE/oem" @@ -952,13 +952,16 @@ copyOEM() { error "failed to locate 'sources' folder in ISO image!" && return 1 fi - local dest="$src/\$OEM\$/\$1/" + dest="$src/\$OEM\$/\$1/" mkdir -p "$dest" if ! cp -r "$folder" "$dest"; then error "Failed to copy OEM folder!" && return 1 fi + file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) + [ -f "$file" ] && unix2dos -q "$file" + return 0 } From 04915545ae9d7c8fd3c434ee85175a6cb40f5f98 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 May 2024 16:52:56 +0200 Subject: [PATCH 191/505] docs: Remove version from compose (#496) --- compose.yml | 1 - readme.md | 1 - 2 files changed, 2 deletions(-) diff --git a/compose.yml b/compose.yml index fc2fbf9..d9ee92b 100644 --- a/compose.yml +++ b/compose.yml @@ -1,4 +1,3 @@ -version: "3" services: windows: image: dockurr/windows diff --git a/readme.md b/readme.md index fdcbf18..be1a38a 100644 --- a/readme.md +++ b/readme.md @@ -28,7 +28,6 @@ Windows in a Docker container. Via Docker Compose: ```yaml -version: "3" services: windows: image: dockurr/windows From 0d444f7c8de13f5d9d9349e094fb21e0de9e81dc Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 May 2024 17:21:56 +0200 Subject: [PATCH 192/505] docs: Remove restart policy (#497) --- compose.yml | 1 - readme.md | 1 - 2 files changed, 2 deletions(-) diff --git a/compose.yml b/compose.yml index d9ee92b..b97eaf1 100644 --- a/compose.yml +++ b/compose.yml @@ -13,4 +13,3 @@ services: - 3389:3389/tcp - 3389:3389/udp stop_grace_period: 2m - restart: on-failure diff --git a/readme.md b/readme.md index be1a38a..3a3c9b8 100644 --- a/readme.md +++ b/readme.md @@ -43,7 +43,6 @@ services: - 3389:3389/tcp - 3389:3389/udp stop_grace_period: 2m - restart: on-failure ``` Via Docker CLI: From 8ccc0fa511c6044e4244c79581f0dd10a6065919 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 May 2024 21:52:49 +0200 Subject: [PATCH 193/505] docs: Update issue template (#498) --- .github/ISSUE_TEMPLATE/BUG_REPORT.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml index 58fc2eb..2c88c38 100644 --- a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -22,7 +22,7 @@ body: id: os attributes: label: Operating system - description: The Linux distribution and kernel version as shown by `uname -a`. + description: The distribution and kernel version (as shown by `uname -a`). placeholder: e.g. Ubuntu 24.04 / Kernel 6.8.0-22-generic validations: required: true @@ -30,7 +30,7 @@ body: id: docker attributes: label: Docker version - description: The Docker version as shown by `docker -v`. + description: The version of Docker (as shown by `docker -v`). placeholder: e.g. Docker version 26.0.1, build d260a54 validations: required: true @@ -38,27 +38,27 @@ body: id: summary attributes: label: Description - description: A clear and concise description of the problem. + description: A clear and concise description of your issue. validations: required: true - type: textarea id: compose attributes: label: Docker compose - description: The Docker compose file (or otherwise `run` command). + description: The compose file (or otherwise the `docker run` command used). validations: required: true - type: textarea id: log attributes: label: Docker log - description: The Docker logfile of the container. + description: The logfile of the container (as shown by `docker logs windows`). validations: required: true - type: textarea id: screenshot attributes: label: Screenshots (optional) - description: Screenshots of the problem. + description: Screenshots that might help to make the problem more clear. validations: required: false From be64408846c512c08b948f7ccd77b9365aa4d67d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 16 May 2024 00:53:55 +0200 Subject: [PATCH 194/505] docs: Update issue templates (#499) --- .../{BUG_REPORT.yml => 1-issue.yml} | 14 ++-- .../{FEATURE_REQUEST.yml => 2-feature.yml} | 4 +- .github/ISSUE_TEMPLATE/3-bug.yml | 64 +++++++++++++++++++ .../{QUESTION.yml => 4-question.yml} | 6 +- .github/ISSUE_TEMPLATE/config.yml | 1 + 5 files changed, 76 insertions(+), 13 deletions(-) rename .github/ISSUE_TEMPLATE/{BUG_REPORT.yml => 1-issue.yml} (79%) rename .github/ISSUE_TEMPLATE/{FEATURE_REQUEST.yml => 2-feature.yml} (89%) create mode 100644 .github/ISSUE_TEMPLATE/3-bug.yml rename .github/ISSUE_TEMPLATE/{QUESTION.yml => 4-question.yml} (67%) create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/1-issue.yml similarity index 79% rename from .github/ISSUE_TEMPLATE/BUG_REPORT.yml rename to .github/ISSUE_TEMPLATE/1-issue.yml index 2c88c38..92e235c 100644 --- a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml +++ b/.github/ISSUE_TEMPLATE/1-issue.yml @@ -1,12 +1,10 @@ -name: "\U0001F41E Bug Report" -description: Create a report to help us improve the container -title: "[Bug]: " -labels: ["bug"] +name: "\U0001F6A8 Technical issue" +description: When you're experiencing problems using the container body: - type: checkboxes attributes: - label: Is there an existing issue for this? - description: Please search to see if an issue already exists for the bug you encountered. + label: Is there no existing issue for this? + description: Please search to see if no solution was already provided before. options: - label: I have searched the existing issues required: true @@ -30,8 +28,8 @@ body: id: docker attributes: label: Docker version - description: The version of Docker (as shown by `docker -v`). - placeholder: e.g. Docker version 26.0.1, build d260a54 + description: The version of the Docker engine (as shown by `docker -v`). + placeholder: e.g. 26.0.1 validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml b/.github/ISSUE_TEMPLATE/2-feature.yml similarity index 89% rename from .github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml rename to .github/ISSUE_TEMPLATE/2-feature.yml index 2e9c7e8..5c4a248 100644 --- a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml +++ b/.github/ISSUE_TEMPLATE/2-feature.yml @@ -5,8 +5,8 @@ labels: ["enhancement"] body: - type: checkboxes attributes: - label: Is there an existing feature request for this? - description: Please search to see if the feature request already exists. + label: Is there no existing feature request for this? + description: Please search to see if the feature was not already requested before. options: - label: I have searched the existing feature requests required: true diff --git a/.github/ISSUE_TEMPLATE/3-bug.yml b/.github/ISSUE_TEMPLATE/3-bug.yml new file mode 100644 index 0000000..ca77c2d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3-bug.yml @@ -0,0 +1,64 @@ +name: "\U0001F41E Bug report" +description: Create a report to help us improve the container +title: "[Bug]: " +labels: ["bug"] +body: + - type: checkboxes + attributes: + label: Is there no existing bug report for this? + description: Please search to see if the bug was not already reported before. + options: + - label: I have searched the existing bug reports + required: true + - type: input + id: cpu + attributes: + label: Machine specifications + description: The processor and RAM amount in your machine. + placeholder: e.g. Intel N5105 / 16 GB + validations: + required: true + - type: input + id: os + attributes: + label: Operating system + description: The distribution and kernel version (as shown by `uname -a`). + placeholder: e.g. Ubuntu 24.04 / Kernel 6.8.0-22-generic + validations: + required: true + - type: input + id: docker + attributes: + label: Docker version + description: The version of the Docker engine (as shown by `docker -v`). + placeholder: e.g. 26.0.1 + validations: + required: true + - type: textarea + id: summary + attributes: + label: Description + description: Describe the expected behaviour, the actual behaviour, and the steps to reproduce. + validations: + required: true + - type: textarea + id: compose + attributes: + label: Docker compose + description: The compose file (or otherwise the `docker run` command used). + validations: + required: true + - type: textarea + id: log + attributes: + label: Docker log + description: The logfile of the container (as shown by `docker logs windows`). + validations: + required: true + - type: textarea + id: screenshot + attributes: + label: Screenshots (optional) + description: Screenshots that might help to make the problem more clear. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/QUESTION.yml b/.github/ISSUE_TEMPLATE/4-question.yml similarity index 67% rename from .github/ISSUE_TEMPLATE/QUESTION.yml rename to .github/ISSUE_TEMPLATE/4-question.yml index 28f0b61..9094d6d 100644 --- a/.github/ISSUE_TEMPLATE/QUESTION.yml +++ b/.github/ISSUE_TEMPLATE/4-question.yml @@ -1,5 +1,5 @@ -name: "? Question" -description: General questions about the container +name: "\U00002753 General question" +description: Questions about the container not related to an issue title: "[Question]: " labels: ["question"] body: @@ -13,7 +13,7 @@ body: - type: checkboxes attributes: label: Is this a general question and not a technical issue? - description: For technical issues you must use the [bug report](https://github.com/dockur/windows/issues/new?assignees=&labels=bug&projects=&template=BUG_REPORT.yml&title=%5BBug%5D%3A+) form instead. It contains all the right fields (system info, logfiles, etc.) we need in order to be able to help you. + description: For questions related to issues you must use the [technical issue](https://github.com/dockur/windows/issues/new?assignees=&labels=&projects=&template=1-issue.yml) form instead. It contains all the right fields (system info, logfiles, etc.) we need in order to be able to help you. options: - label: I am sure my question is not about a technical issue. required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false From 63a44029648ce0dfac43f3a6d9f25ce130ad662f Mon Sep 17 00:00:00 2001 From: frank <wangwei10061@icloud.com> Date: Thu, 16 May 2024 08:19:27 +0800 Subject: [PATCH 195/505] feat: Add Kubernetes manifest (#304) --- kubernetes.yml | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 kubernetes.yml diff --git a/kubernetes.yml b/kubernetes.yml new file mode 100644 index 0000000..9bc95ec --- /dev/null +++ b/kubernetes.yml @@ -0,0 +1,73 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: windows-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 64Gi +--- +apiVersion: v1 +kind: Pod +metadata: + name: windows + labels: + name: windows +spec: + terminationGracePeriodSeconds: 120 # the Kubernetes default is 30 seconds and it may be not enough + containers: + - name: windows + image: dockurr/windows + ports: + - containerPort: 8006 + protocol: TCP + - containerPort: 3389 + protocol: TCP + - containerPort: 3389 + protocol: UDP + resources: + limits: + devices.kubevirt.io/kvm: 1 + securityContext: + privileged: true + env: + - name: RAM_SIZE + value: 4G + - name: CPU_CORES + value: "2" + - name: DISK_SIZE + value: "64G" + volumeMounts: + - mountPath: /storage + name: storage + volumes: + - name: storage + persistentVolumeClaim: + claimName: windows-pvc +--- +apiVersion: v1 +kind: Service +metadata: + name: windows +spec: + type: NodePort + selector: + name: windows + ports: + - name: tcp-8006 + protocol: TCP + port: 8006 + targetPort: 8006 + nodePort: 48006 + - name: tcp-3389 + protocol: TCP + port: 3389 + targetPort: 3389 + nodePort: 43389 + - name: udp-3389 + protocol: UDP + port: 3389 + targetPort: 3389 + nodePort: 43388 From 6b4e23c8922b7b9a766c00867ad63af98c8137f5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 16 May 2024 02:20:23 +0200 Subject: [PATCH 196/505] docs: Kubernetes (#500) --- readme.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/readme.md b/readme.md index 3a3c9b8..2e77578 100644 --- a/readme.md +++ b/readme.md @@ -51,6 +51,12 @@ Via Docker CLI: docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows ``` +Via Kubernetes: + +```shell +kubectl apply -f kubernetes.yml +``` + ## FAQ * ### How do I use it? From dfed2706a643cfaf2a6ca62462754715ca211dc0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 16 May 2024 03:30:21 +0200 Subject: [PATCH 197/505] docs: Docker CLI (#501) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 2e77578..8295f9e 100644 --- a/readme.md +++ b/readme.md @@ -48,7 +48,7 @@ services: Via Docker CLI: ```bash -docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows +docker run -it --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows ``` Via Kubernetes: From fb690f248798b04dcac47fadfb1184815c0bda1c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 16 May 2024 04:28:13 +0200 Subject: [PATCH 198/505] feat: Add assets for x86 architectures (#502) --- assets/win7x86-enterprise.xml | 316 ++++++++++++++++++++++++++++++ assets/win7x86-ultimate.xml | 316 ++++++++++++++++++++++++++++++ assets/win7x86.xml | 316 ++++++++++++++++++++++++++++++ assets/winvistax86-enterprise.xml | 270 +++++++++++++++++++++++++ assets/winvistax86-ultimate.xml | 270 +++++++++++++++++++++++++ assets/winvistax86.xml | 270 +++++++++++++++++++++++++ 6 files changed, 1758 insertions(+) create mode 100644 assets/win7x86-enterprise.xml create mode 100644 assets/win7x86-ultimate.xml create mode 100644 assets/win7x86.xml create mode 100644 assets/winvistax86-enterprise.xml create mode 100644 assets/winvistax86-ultimate.xml create mode 100644 assets/winvistax86.xml diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml new file mode 100644 index 0000000..11c78b6 --- /dev/null +++ b/assets/win7x86-enterprise.xml @@ -0,0 +1,316 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + <TypeID>0x27</TypeID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows 7 Enterprise</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>H7X92-3VPBB-Q799D-Y6JJ3-86WC6</Key> + <WillShowUI>OnError</WillShowUI> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w8\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w7\x86</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml new file mode 100644 index 0000000..221ef90 --- /dev/null +++ b/assets/win7x86-ultimate.xml @@ -0,0 +1,316 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + <TypeID>0x27</TypeID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows 7 Ultimate</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>D4F6K-QK3RD-TMVMJ-BBMRX-3MBMV</Key> + <WillShowUI>OnError</WillShowUI> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w8\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w7\x86</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win7x86.xml b/assets/win7x86.xml new file mode 100644 index 0000000..c243898 --- /dev/null +++ b/assets/win7x86.xml @@ -0,0 +1,316 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + <TypeID>0x27</TypeID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows 7 PROFESSIONAL</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>HYF8J-CVRMY-CM74G-RPHKF-PW487</Key> + <WillShowUI>OnError</WillShowUI> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\Balloon\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="4"> + <Path>D:\pvpanic\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="5"> + <Path>D:\qemupciserial\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="6"> + <Path>D:\qxldod\w8\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="7"> + <Path>D:\vioinput\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="8"> + <Path>D:\viorng\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="9"> + <Path>D:\vioscsi\w7\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="10"> + <Path>D:\vioserial\w7\x86</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml new file mode 100644 index 0000000..8dfaa54 --- /dev/null +++ b/assets/winvistax86-enterprise.xml @@ -0,0 +1,270 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows Vista Enterprise</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>VKK3X-68KWM-X2YGT-QR4M6-4BWMV</Key> + </ProductKey> + </UserData> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k8\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k8\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\vioscsi\2k8\x86</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-Licensing-SLC" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-Licensing-SLC-UX" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <ProductKey>VKK3X-68KWM-X2YGT-QR4M6-4BWMV</ProductKey> + <TimeZone>Pacific Standard Time</TimeZone> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <Home_Page>about:blank</Home_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>false</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> + <Description>Disable firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable RDP</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off sidebar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml new file mode 100644 index 0000000..2f95237 --- /dev/null +++ b/assets/winvistax86-ultimate.xml @@ -0,0 +1,270 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows Vista Ultimate</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>VMCB9-FDRV6-6CDQM-RV23K-RP8F7</Key> + </ProductKey> + </UserData> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k8\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k8\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\vioscsi\2k8\x86</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-Licensing-SLC" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-Licensing-SLC-UX" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <ProductKey>VMCB9-FDRV6-6CDQM-RV23K-RP8F7</ProductKey> + <TimeZone>Pacific Standard Time</TimeZone> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <Home_Page>about:blank</Home_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>false</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> + <Description>Disable firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable RDP</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off sidebar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml new file mode 100644 index 0000000..eb9fb05 --- /dev/null +++ b/assets/winvistax86.xml @@ -0,0 +1,270 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows Vista BUSINESS</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>4D2XH-PRBMM-8Q22B-K8BM3-MRW4W</Key> + </ProductKey> + </UserData> + </component> + <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DriverPaths> + <PathAndCredentials wcm:action="add" wcm:keyValue="1"> + <Path>D:\viostor\2k8\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="2"> + <Path>D:\NetKVM\2k8\x86</Path> + </PathAndCredentials> + <PathAndCredentials wcm:action="add" wcm:keyValue="3"> + <Path>D:\vioscsi\2k8\x86</Path> + </PathAndCredentials> + </DriverPaths> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-Licensing-SLC" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-Licensing-SLC-UX" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <ProductKey>4D2XH-PRBMM-8Q22B-K8BM3-MRW4W</ProductKey> + <TimeZone>Pacific Standard Time</TimeZone> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <Home_Page>about:blank</Home_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <NetworkLocation>Other</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>false</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> + <Description>Disable firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable RDP</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off sidebar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> From b0573664de7c24bd0b8c4f56279bc93f4f0564ba Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 16 May 2024 07:23:29 +0200 Subject: [PATCH 199/505] feat: Added support for Windows 7 x86 (#503) --- Dockerfile | 2 +- src/define.sh | 1 - src/install.sh | 8 ++++++++ src/samba.sh | 6 +++--- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index d044bbc..19685f0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.03 / / +COPY --from=qemux/qemu-docker:5.04 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/define.sh b/src/define.sh index 9b2bed9..b7114ce 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1186,7 +1186,6 @@ prepareXP() { local iso="$1" local dir="$2" - MACHINE="pc-q35-2.10" ETFS="[BOOT]/Boot-NoEmul.img" [[ "$MANUAL" == [Yy1]* ]] && return 0 diff --git a/src/install.sh b/src/install.sh index 653edc9..47e4327 100644 --- a/src/install.sh +++ b/src/install.sh @@ -810,6 +810,12 @@ prepareImage() { local dir="$2" local missing + case "${DETECTED,,}" in + "winxp"* | "winvistax86"* | "win7x86"* ) + MACHINE="pc-q35-2.10" + ;; + esac + case "${DETECTED,,}" in "winxp"* ) BOOT_MODE="windows_legacy" @@ -847,6 +853,8 @@ updateImage() { local dat="${file/.xml/.dat}" local desc path src loc xml index result + [[ "${DETECTED,,}" == "winxp"* ]] && return 0 + if [ ! -s "$asset" ] || [ ! -f "$asset" ]; then asset="" if [[ "$MANUAL" != [Yy1]* ]]; then diff --git a/src/samba.sh b/src/samba.sh index 18fa980..dc49bb0 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -72,14 +72,14 @@ mkdir -p "$share" ! smbd && smbd --debug-stdout -isXP="N" +legacy="N" if [ -f "$STORAGE/windows.old" ]; then MT=$(<"$STORAGE/windows.old") - [[ "${MT,,}" == "pc-q35-2"* ]] && isXP="Y" + [[ "${MT,,}" == "pc-q35-2"* ]] && legacy="Y" fi -if [[ "$isXP" == [Yy1]* ]]; then +if [[ "$legacy" == [Yy1]* ]]; then [[ "$DHCP" == [Yy1]* ]] && return 0 # Enable NetBIOS on Windows XP ! nmbd && nmbd --debug-stdout From be9cdf400f426cea48f8550ae29354650e49668d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 16 May 2024 07:53:25 +0200 Subject: [PATCH 200/505] feat: Add Windows x86 versions (#505) --- src/define.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index b7114ce..c3417fa 100644 --- a/src/define.sh +++ b/src/define.sh @@ -46,6 +46,10 @@ parseVersion() { "7u" | "win7u" | "windows7u" | "windows 7u" ) VERSION="win7${PLATFORM,,}-ultimate" ;; + "7x86" | "win7x86" | "windows7x86" | "win7x86-enterprise" ) + VERSION="win7x86" + [ -z "$DETECTED" ] && DETECTED="win7x86-enterprise" + ;; "vista" | "winvista" | "windowsvista" | "windows vista" ) VERSION="winvista${PLATFORM,,}" [ -z "$DETECTED" ] && DETECTED="winvista${PLATFORM,,}-enterprise" @@ -53,6 +57,10 @@ parseVersion() { "vistu" | "winvistu" | "windowsvistu" | "windows vistu" ) VERSION="winvista${PLATFORM,,}-ultimate" ;; + "vistax86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) + VERSION="winvistax86" + [ -z "$DETECTED" ] && DETECTED="winvistax86-enterprise" + ;; "xp" | "xp32" | "xpx86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" ) VERSION="winxpx86" ;; @@ -630,7 +638,7 @@ getLink2() { sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="$host/Windows%207/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" ;; - "win7x86" | "win7x86enterprise" ) + "win7x86" | "win7x86-enterprise" ) size=2434502656 sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" url="$host/Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" @@ -804,7 +812,7 @@ getLink4() { sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="$host/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" ;; - "win7x86" | "win7x86enterprise" ) + "win7x86" | "win7x86-enterprise" ) size=2434502656 sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" url="$host/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" From 5f066b47cf25ccd1ee6df43cc713e305993eec66 Mon Sep 17 00:00:00 2001 From: Weifeng Wang <qclaogui@gmail.com> Date: Thu, 16 May 2024 14:04:31 +0800 Subject: [PATCH 201/505] fix: Kubernetes yaml format (#506) Signed-off-by: Weifeng Wang <qclaogui@gmail.com> --- kubernetes.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kubernetes.yml b/kubernetes.yml index 9bc95ec..c46d3df 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -25,7 +25,7 @@ spec: protocol: TCP - containerPort: 3389 protocol: TCP - - containerPort: 3389 + - containerPort: 3389 protocol: UDP resources: limits: @@ -66,7 +66,7 @@ spec: port: 3389 targetPort: 3389 nodePort: 43389 - - name: udp-3389 + - name: udp-3389 protocol: UDP port: 3389 targetPort: 3389 From b4f25ab645d69bd14ea5fb7179a55f905e0b9e9f Mon Sep 17 00:00:00 2001 From: xsy420 <73682606+xsy420@users.noreply.github.com> Date: Thu, 16 May 2024 11:38:00 +0100 Subject: [PATCH 202/505] feat: Support multiple languages (#504) --- assets/win10x64-enterprise-eval.xml | 18 +++++++----------- assets/win10x64-enterprise.xml | 18 +++++++----------- assets/win10x64-iot.xml | 18 +++++++----------- assets/win10x64-ltsc.xml | 18 +++++++----------- assets/win10x64.xml | 18 +++++++----------- assets/win11x64-enterprise-eval.xml | 24 ++++++++++-------------- assets/win11x64-enterprise.xml | 22 +++++++++------------- assets/win11x64.xml | 22 +++++++++------------- assets/win2008r2-eval.xml | 18 +++++++----------- assets/win2008r2.xml | 18 +++++++----------- assets/win2012r2-eval.xml | 18 +++++++----------- assets/win2012r2.xml | 18 +++++++----------- assets/win2016-eval.xml | 18 +++++++----------- assets/win2016.xml | 18 +++++++----------- assets/win2019-eval.xml | 18 +++++++----------- assets/win2019.xml | 18 +++++++----------- assets/win2022-eval.xml | 18 +++++++----------- assets/win2022.xml | 18 +++++++----------- assets/win7x64-enterprise.xml | 18 +++++++----------- assets/win7x64-ultimate.xml | 18 +++++++----------- assets/win7x64.xml | 18 +++++++----------- assets/win7x86-enterprise.xml | 18 +++++++----------- assets/win7x86-ultimate.xml | 18 +++++++----------- assets/win7x86.xml | 18 +++++++----------- assets/win81x64-enterprise-eval.xml | 18 +++++++----------- assets/win81x64-enterprise.xml | 18 +++++++----------- assets/win81x64.xml | 18 +++++++----------- 27 files changed, 196 insertions(+), 304 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 5d282e4..9e3fb01 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -292,15 +292,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -453,16 +444,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 8365f38..5a3c262 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -295,15 +295,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -456,16 +447,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 27b5ca1..3b00918 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -301,15 +301,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -462,16 +453,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 787f8e7..3485899 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -298,15 +298,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -459,16 +450,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 4dacfab..62ca61a 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -295,15 +295,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -456,16 +447,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index f696049..8dde5c6 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -310,15 +310,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -466,26 +457,31 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 37722de..c1a22c3 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -313,15 +313,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -469,26 +460,31 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index e773e54..f1c0086 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -313,15 +313,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -469,26 +460,31 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index 4f69250..230743c 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -173,15 +173,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -293,16 +284,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 18bf9f3..9b2a0d7 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -176,15 +176,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -296,16 +287,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 2e1747d..7fcde90 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -203,15 +203,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -332,16 +323,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index 58c1c80..d655136 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -206,15 +206,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -335,16 +326,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 78f4329..6834243 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -203,15 +203,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -362,16 +353,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016.xml b/assets/win2016.xml index db440a8..125638b 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -206,15 +206,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -365,16 +356,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 0baa0b7..b6f6258 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -207,15 +207,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -366,16 +357,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019.xml b/assets/win2019.xml index 76d2a73..2ae76da 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -210,15 +210,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -369,16 +360,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 0e88e0a..53bb0bc 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -207,15 +207,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -366,16 +357,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022.xml b/assets/win2022.xml index f844cf6..aa585a1 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -210,15 +210,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -369,16 +360,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index 6934dd5..e57a310 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -177,15 +177,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -297,16 +288,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index 6e6e36c..dc17ba5 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -177,15 +177,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -297,16 +288,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index 29c0ab7..90c699d 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -177,15 +177,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -297,16 +288,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index 11c78b6..bdd8d26 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -177,15 +177,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -297,16 +288,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index 221ef90..54a7407 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -177,15 +177,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -297,16 +288,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index c243898..ff8b8f0 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -177,15 +177,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -297,16 +288,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 99f9ed3..15dd729 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -188,15 +188,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -317,16 +308,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index b43038e..cbaa582 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -191,15 +191,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -320,16 +311,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 19ea568..5b54c2a 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -198,15 +198,6 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> - <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <FirewallGroups> - <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> - <Active>true</Active> - <Group>Remote Desktop</Group> - <Profile>all</Profile> - </FirewallGroup> - </FirewallGroups> - </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -327,16 +318,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <Description>Add RDP in firewall</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From 1867c3da88a07b0ac3b5e5e0be8accaa9f991133 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 16 May 2024 19:04:21 +0200 Subject: [PATCH 203/505] fix: Revert policies for Windows 7 and 2008 R2 (#510) --- assets/win2008r2-eval.xml | 18 +++++++++++------- assets/win2008r2.xml | 18 +++++++++++------- assets/win7x64-enterprise.xml | 18 +++++++++++------- assets/win7x64-ultimate.xml | 18 +++++++++++------- assets/win7x64.xml | 18 +++++++++++------- assets/win7x86-enterprise.xml | 18 +++++++++++------- assets/win7x86-ultimate.xml | 18 +++++++++++------- assets/win7x86.xml | 18 +++++++++++------- 8 files changed, 88 insertions(+), 56 deletions(-) diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index 230743c..4f69250 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -173,6 +173,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -284,21 +293,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 9b2a0d7..18bf9f3 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -176,6 +176,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -287,21 +296,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index e57a310..6934dd5 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -177,6 +177,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -288,21 +297,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index dc17ba5..6e6e36c 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -177,6 +177,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -288,21 +297,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index 90c699d..29c0ab7 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -177,6 +177,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -288,21 +297,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index bdd8d26..11c78b6 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -177,6 +177,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -288,21 +297,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index 54a7407..221ef90 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -177,6 +177,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -288,21 +297,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index ff8b8f0..c243898 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -177,6 +177,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Group>Remote Desktop</Group> + <Profile>all</Profile> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -288,21 +297,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From 2c8549b594cdcaa21683c9efd59fe1dffac86f0e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 18 May 2024 16:33:12 +0200 Subject: [PATCH 204/505] feat: Multi-language support (#514) --- assets/winvistax64-enterprise.xml | 1 + assets/winvistax64-ultimate.xml | 1 + assets/winvistax64.xml | 1 + assets/winvistax86-enterprise.xml | 1 + assets/winvistax86-ultimate.xml | 1 + assets/winvistax86.xml | 1 + readme.md | 26 +- src/define.sh | 1382 ++++++++++++++++++++++++----- src/entry.sh | 1 + src/install.sh | 452 +++------- src/mido.sh | 1325 ++++++++++++--------------- 11 files changed, 1891 insertions(+), 1301 deletions(-) diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 8d64187..f2efec3 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -119,6 +119,7 @@ <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index b613f6f..9b80a39 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -119,6 +119,7 @@ <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index 252e6ae..009b991 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -119,6 +119,7 @@ <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index 8dfaa54..83e7534 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -119,6 +119,7 @@ <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index 2f95237..db407e3 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -119,6 +119,7 @@ <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index eb9fb05..07d5926 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -119,6 +119,7 @@ <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> diff --git a/readme.md b/readme.md index 8295f9e..2ade57d 100644 --- a/readme.md +++ b/readme.md @@ -15,6 +15,7 @@ Windows in a Docker container. ## Features + - Multi-language - ISO downloader - KVM acceleration - Web-based viewer @@ -107,6 +108,19 @@ kubectl apply -f kubernetes.yml To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). +* ### How do I select the Windows language? + + By default, the English version of Windows will be downloaded. But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: + + ```yaml + environment: + LANGUAGE: "Chinese" + ``` + + You can choose between `Arabic`, `Bulgarian`, `Chinese`, `Croatian`, `Czech`, `Danish`, `Dutch`, `Estonian`, `Finnish`, `French`, `German`, `Greek`, `Hebrew`, `Hungarian`, `Italian`, `Japanese`, `Korean`, `Latvian`, `Lithuanian`, `Norwegian`, `Polish`, `Portuguese`, `Romanian`, `Russian`, `Serbian`, `Slovak`, `Slovenian`, `Spanish`, `Swedish`, `Turkish`, `Thai` and `Ukrainian`. + + If you want to use a keyboard layout or region/locale that is not the default for the selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like `en-US`. + * ### How do I change the storage location? To change the storage location, include the following bind mount in your compose file: @@ -242,11 +256,21 @@ kubectl apply -f kubernetes.yml CPU_CORES: "4" ``` +* ### How do I configure the username and password? + + By default, a user called `Docker` is created during installation with an empty password. You can change these credentials in your compose file: + + ```yaml + environment: + USERNAME: "john" + PASSWORD: "secret" + ``` + * ### How do I connect using RDP? The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. - So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `docker` and by leaving the password empty. + So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `Docker` and by leaving the password empty. There is a good RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. diff --git a/src/define.sh b/src/define.sh index c3417fa..d21f41e 100644 --- a/src/define.sh +++ b/src/define.sh @@ -2,10 +2,15 @@ set -Eeuo pipefail : "${VERIFY:=""}" +: "${REGION:=""}" : "${MANUAL:=""}" : "${REMOVE:=""}" : "${VERSION:=""}" : "${DETECTED:=""}" +: "${KEYBOARD:=""}" +: "${LANGUAGE:=""}" +: "${USERNAME:=""}" +: "${PASSWORD:=""}" MIRRORS=5 PLATFORM="x64" @@ -22,40 +27,40 @@ parseVersion() { case "${VERSION,,}" in "11" | "11p" | "win11" | "win11p" | "windows11" | "windows 11" ) - VERSION="win11${PLATFORM,,}" + VERSION="win11x64" ;; "11e" | "win11e" | "windows11e" | "windows 11e" ) - VERSION="win11${PLATFORM,,}-enterprise-eval" + VERSION="win11x64-enterprise-eval" ;; "10" | "10p" | "win10" | "win10p" | "windows10" | "windows 10" ) - VERSION="win10${PLATFORM,,}" + VERSION="win10x64" ;; "10e" | "win10e" | "windows10e" | "windows 10e" ) - VERSION="win10${PLATFORM,,}-enterprise-eval" + VERSION="win10x64-enterprise-eval" ;; "8" | "8p" | "81" | "81p" | "8.1" | "win8" | "win8p" | "win81" | "win81p" | "windows 8" ) - VERSION="win81${PLATFORM,,}" + VERSION="win81x64" ;; "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" ) - VERSION="win81${PLATFORM,,}-enterprise-eval" + VERSION="win81x64-enterprise-eval" ;; "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" ) - VERSION="win7${PLATFORM,,}" - [ -z "$DETECTED" ] && DETECTED="win7${PLATFORM,,}-enterprise" + VERSION="win7x64" + [ -z "$DETECTED" ] && DETECTED="win7x64-enterprise" ;; "7u" | "win7u" | "windows7u" | "windows 7u" ) - VERSION="win7${PLATFORM,,}-ultimate" + VERSION="win7x64-ultimate" ;; "7x86" | "win7x86" | "windows7x86" | "win7x86-enterprise" ) VERSION="win7x86" [ -z "$DETECTED" ] && DETECTED="win7x86-enterprise" ;; "vista" | "winvista" | "windowsvista" | "windows vista" ) - VERSION="winvista${PLATFORM,,}" - [ -z "$DETECTED" ] && DETECTED="winvista${PLATFORM,,}-enterprise" + VERSION="winvistax64" + [ -z "$DETECTED" ] && DETECTED="winvistax64-enterprise" ;; "vistu" | "winvistu" | "windowsvistu" | "windows vistu" ) - VERSION="winvista${PLATFORM,,}-ultimate" + VERSION="winvistax64-ultimate" ;; "vistax86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) VERSION="winvistax86" @@ -65,7 +70,7 @@ parseVersion() { VERSION="winxpx86" ;; "xp64" | "xpx64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" ) - VERSION="winxp${PLATFORM,,}" + VERSION="winxpx64" ;; "22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022" ) VERSION="win2022-eval" @@ -84,33 +89,263 @@ parseVersion() { ;; "core11" | "core 11" ) VERSION="core11" - [ -z "$DETECTED" ] && DETECTED="win11${PLATFORM,,}" + [ -z "$DETECTED" ] && DETECTED="win11x64" ;; "tiny11" | "tiny 11" ) VERSION="tiny11" - [ -z "$DETECTED" ] && DETECTED="win11${PLATFORM,,}" + [ -z "$DETECTED" ] && DETECTED="win11x64" ;; "tiny10" | "tiny 10" ) VERSION="tiny10" - [ -z "$DETECTED" ] && DETECTED="win10${PLATFORM,,}-ltsc" + [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" ;; - "iot11" | "11iot" | "win11-iot" | "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) - VERSION="win11${PLATFORM,,}-enterprise-iot-eval" - [ -z "$DETECTED" ] && DETECTED="win11${PLATFORM,,}-iot" + "iot11" | "11iot" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + VERSION="win11x64-enterprise-iot-eval" + [ -z "$DETECTED" ] && DETECTED="win11x64-iot" ;; - "iot10" | "10iot" | "win10-iot" | "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) - VERSION="win10${PLATFORM,,}-enterprise-iot-eval" - [ -z "$DETECTED" ] && DETECTED="win10${PLATFORM,,}-iot" + "iot10" | "10iot" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + VERSION="win10x64-enterprise-iot-eval" + [ -z "$DETECTED" ] && DETECTED="win10x64-iot" ;; - "ltsc10" | "10ltsc" | "win10-ltsc" | "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - VERSION="win10${PLATFORM,,}-enterprise-ltsc-eval" - [ -z "$DETECTED" ] && DETECTED="win10${PLATFORM,,}-ltsc" + "ltsc10" | "10ltsc" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + VERSION="win10x64-enterprise-ltsc-eval" + [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" ;; esac return 0 } +getLanguage() { + + local id="$1" + local ret="$2" + local lang="" + local desc="" + local culture="" + + case "${id,,}" in + "ar" | "ar-"* ) + lang="Arabic" + desc="$lang" + culture="ar-SA" ;; + "bg" | "bg-"* ) + lang="Bulgarian" + desc="$lang" + culture="bg-BG" ;; + "cs" | "cs-"* | "cz" | "cz-"* ) + lang="Czech" + desc="$lang" + culture="cs-CZ" ;; + "da" | "da-"* | "dk" | "dk-"* ) + lang="Danish" + desc="$lang" + culture="da-DK" ;; + "de" | "de-"* ) + lang="German" + desc="$lang" + culture="de-DE" ;; + "el" | "el-"* | "gr" | "gr-"* ) + lang="Greek" + desc="$lang" + culture="el-GR" ;; + "gb" | "en-gb" ) + lang="English International" + desc="English" + culture="en-GB" ;; + "en" | "en-"* ) + lang="English (United States)" + desc="English" + culture="en-US" ;; + "mx" | "es-mx" ) + lang="Spanish (Mexico)" + desc="Spanish" + culture="es-MX" ;; + "es" | "es-"* ) + lang="Spanish" + desc="$lang" + culture="es-ES" ;; + "et" | "et-"* ) + lang="Estonian" + desc="$lang" + culture="et-EE" ;; + "fi" | "fi-"* ) + lang="Finnish" + desc="$lang" + culture="fi-FI" ;; + "ca" | "fr-ca" ) + lang="French Canadian" + desc="French" + culture="fr-CA" ;; + "fr" | "fr-"* ) + lang="French" + desc="$lang" + culture="fr-FR" ;; + "he" | "he-"* | "il" | "il-"* ) + lang="Hebrew" + desc="$lang" + culture="he-IL" ;; + "hr" | "hr-"* | "cr" | "cr-"* ) + lang="Croatian" + desc="$lang" + culture="hr-HR" ;; + "hu" | "hu-"* ) + lang="Hungarian" + desc="$lang" + culture="hu-HU" ;; + "it" | "it-"* ) + lang="Italian" + desc="$lang" + culture="it-IT" ;; + "ja" | "ja-"* | "jp" | "jp-"* ) + lang="Japanese" + desc="$lang" + culture="ja-JP" ;; + "ko" | "ko-"* | "kr" | "kr-"* ) + lang="Korean" + desc="$lang" + culture="ko-KR" ;; + "lt" | "lt-"* ) + lang="Lithuanian" + desc="$lang" + culture="lv-LV" ;; + "lv" | "lv-"* ) + lang="Latvian" + desc="$lang" + culture="lt-LT" ;; + "nb" | "nb-"* |"nn" | "nn-"* | "no" | "no-"* ) + lang="Norwegian" + desc="$lang" + culture="nb-NO" ;; + "nl" | "nl-"* ) + lang="Dutch" + desc="$lang" + culture="nl-NL" ;; + "pl" | "pl-"* ) + lang="Polish" + desc="$lang" + culture="pl-PL" ;; + "br" | "pt-br" ) + lang="Brazilian Portuguese" + desc="Portuguese" + culture="pt-BR" ;; + "pt" | "pt-"* ) + lang="Portuguese" + desc="$lang" + culture="pt-BR" ;; + "ro" | "ro-"* ) + lang="Romanian" + desc="$lang" + culture="ro-RO" ;; + "ru" | "ru-"* ) + lang="Russian" + desc="$lang" + culture="ru-RU" ;; + "sk" | "sk-"* ) + lang="Slovak" + desc="$lang" + culture="sk-SK" ;; + "sl" | "sl-"* | "si" | "si-"* ) + lang="Slovenian" + desc="$lang" + culture="sl-SI" ;; + "sr" | "sr-"* ) + lang="Serbian Latin" + desc="Serbian" + culture="sr-Latn-RS" ;; + "sv" | "sv-"* | "se" | "se-"* ) + lang="Swedish" + desc="$lang" + culture="sv-SE" ;; + "th" | "th-"* ) + lang="Thai" + desc="$lang" + culture="th-TH" ;; + "tr" | "tr-"* ) + lang="Turkish" + desc="$lang" + culture="tr-TR" ;; + "ua" | "ua-"* | "uk" | "uk-"* ) + lang="Ukrainian" + desc="$lang" + culture="uk-UA" ;; + "hk" | "zh-hk" | "cn-hk" ) + lang="Chinese Traditional" + desc="Chinese HK" + culture="zh-TW" ;; + "tw" | "zh-tw" | "cn-tw" ) + lang="Chinese Traditional" + desc="Chinese TW" + culture="zh-TW" ;; + "zh" | "zh-"* | "cn" | "cn-"* ) + lang="Chinese Simplified" + desc="Chinese" + culture="zh-CN" ;; + esac + + case "${ret,,}" in + "desc" ) echo "$desc" ;; + "name" ) echo "$lang" ;; + "culture" ) echo "$culture" ;; + *) echo "$desc";; + esac + + return 0 +} + +parseLanguage() { + + REGION="${REGION/_/-/}" + KEYBOARD="${KEYBOARD/_/-/}" + LANGUAGE="${LANGUAGE/_/-/}" + + [ -z "$LANGUAGE" ] && LANGUAGE="en" + + case "${LANGUAGE,,}" in + "arabic" | "arab" ) LANGUAGE="ar" ;; + "bulgarian" | "bu" ) LANGUAGE="bg" ;; + "chinese" | "cn" ) LANGUAGE="zh" ;; + "croatian" | "cr" | "hrvatski" ) LANGUAGE="hr" ;; + "czech" | "cz" | "cesky" ) LANGUAGE="cs" ;; + "danish" | "dk" | "danske" ) LANGUAGE="da" ;; + "dutch" | "nederlands" ) LANGUAGE="nl" ;; + "english" | "gb" | "british" ) LANGUAGE="en" ;; + "estonian" | "eesti" ) LANGUAGE="et" ;; + "finnish" | "suomi" ) LANGUAGE="fi" ;; + "french" | "français" | "francais" ) LANGUAGE="fr" ;; + "german" | "deutsch" ) LANGUAGE="de" ;; + "greek" | "gr" ) LANGUAGE="el" ;; + "hebrew" | "il" ) LANGUAGE="he" ;; + "hungarian" | "magyar" ) LANGUAGE="hu" ;; + "italian" | "italiano" ) LANGUAGE="it" ;; + "japanese" | "jp" ) LANGUAGE="ja" ;; + "korean" | "kr" ) LANGUAGE="ko" ;; + "latvian" | "latvijas" ) LANGUAGE="lv" ;; + "lithuanian" | "lietuvos" ) LANGUAGE="lt" ;; + "norwegian" | "no" | "nb" | "norsk" ) LANGUAGE="nn" ;; + "polish" | "polski" ) LANGUAGE="pl" ;; + "portuguese" | "pt" | "br" ) LANGUAGE="pt-br" ;; + "português" | "portugues" ) LANGUAGE="pt-br" ;; + "romanian" | "română" | "romana" ) LANGUAGE="ro" ;; + "russian" | "ruski" ) LANGUAGE="ru" ;; + "serbian" | "serbian latin" ) LANGUAGE="sr" ;; + "slovak" | "slovenský" | "slovensky" ) LANGUAGE="sk" ;; + "slovenian" | "si" | "slovenski" ) LANGUAGE="sl" ;; + "spanish" | "espanol" | "español" ) LANGUAGE="es" ;; + "swedish" | "se" | "svenska" ) LANGUAGE="sv" ;; + "turkish" | "türk" | "turk" ) LANGUAGE="tr" ;; + "thai" ) LANGUAGE="th" ;; + "ukrainian" | "ua" ) LANGUAGE="uk" ;; + esac + + local culture + culture=$(getLanguage "$LANGUAGE" "culture") + [ -n "$culture" ] && return 0 + + error "Invalid LANGUAGE specified, value \"$LANGUAGE\" is not recognized!" + return 1 +} + printVersion() { local id="$1" @@ -154,12 +389,6 @@ printEdition() { [[ "$result" == "x" ]] && echo "$desc" && return 0 case "${id,,}" in - *"-iot" ) - edition="IoT" - ;; - *"-ltsc" ) - edition="LTSC" - ;; *"-home" ) edition="Home" ;; @@ -175,6 +404,12 @@ printEdition() { *"-education" ) edition="Education" ;; + *"-iot" | *"-iot-eval" ) + edition="IoT" + ;; + *"-ltsc" | *"-ltsc-eval" ) + edition="LTSC" + ;; *"-enterprise-eval" ) edition="Enterprise (Evaluation)" ;; @@ -377,80 +612,42 @@ switchEdition() { return 0 } -getCatalog() { - - local id="$1" - local ret="$2" - local url="" - local name="" - local edition="" - - case "${id,,}" in - "win11${PLATFORM,,}" ) - edition="Professional" - name="Windows 11 Pro" - url="https://go.microsoft.com/fwlink?linkid=2156292" - ;; - "win10${PLATFORM,,}" ) - edition="Professional" - name="Windows 10 Pro" - url="https://go.microsoft.com/fwlink/?LinkId=841361" - ;; - "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval") - edition="Enterprise" - name="Windows 11 Enterprise" - url="https://go.microsoft.com/fwlink?linkid=2156292" - ;; - "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) - edition="Enterprise" - name="Windows 10 Enterprise" - url="https://go.microsoft.com/fwlink/?LinkId=841361" - ;; - esac - - case "${ret,,}" in - "url" ) echo "$url" ;; - "name" ) echo "$name" ;; - "edition" ) echo "$edition" ;; - *) echo "";; - esac - - return 0 -} - getMido() { local id="$1" - local ret="$2" + local lang="$2" + local ret="$3" local sum="" local size="" + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + case "${id,,}" in - "win11${PLATFORM,,}" ) + "win11x64" ) size=6812706816 sum="36de5ecb7a0daa58dce68c03b9465a543ed0f5498aa8ae60ab45fb7c8c4ae402" ;; - "win11${PLATFORM,,}-enterprise-eval" ) + "win11x64-enterprise-eval" ) size=6209064960 sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c" ;; - "win10${PLATFORM,,}" ) + "win10x64" ) size=6140975104 sum="a6f470ca6d331eb353b815c043e327a347f594f37ff525f17764738fe812852e" ;; - "win10${PLATFORM,,}-enterprise-eval" ) + "win10x64-enterprise-eval" ) size=5550497792 sum="ef7312733a9f5d7d51cfa04ac497671995674ca5e1058d5164d6028f0938d668" ;; - "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + "win10x64-enterprise-ltsc-eval" ) size=4898582528 sum="e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5" ;; - "win81${PLATFORM,,}" ) + "win81x64" ) size=4320526336 sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" ;; - "win81${PLATFORM,,}-enterprise-eval" ) + "win81x64-enterprise-eval" ) size=3961473024 sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" ;; @@ -482,7 +679,7 @@ getMido() { *) echo "";; esac - return 1 + return 0 } getLink1() { @@ -490,109 +687,112 @@ getLink1() { # Fallbacks for users who cannot connect to the Microsoft servers local id="$1" - local ret="$2" + local lang="$2" + local ret="$3" local url="" local sum="" local size="" local host="https://dl.bobpony.com/windows" + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + case "${id,,}" in - "win11${PLATFORM,,}" ) + "win11x64" ) size=5946128384 sum="5bb1459034f50766ee480d895d751af73a4af30814240ae32ebc5633546a5af7" - url="$host/11/en-us_windows_11_23h2_${PLATFORM,,}.iso" + url="11/en-us_windows_11_23h2_x64.iso" ;; - "win10${PLATFORM,,}" ) + "win10x64" ) size=4957009920 sum="6673e2ab6c6939a74eceff2c2bb4d36feb94ff8a6f71700adef0f0b998fdcaca" - url="$host/10/en-us_windows_10_22h2_${PLATFORM,,}.iso" + url="10/en-us_windows_10_22h2_x64.iso" ;; - "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) + "win10x64-iot" | "win10x64-enterprise-iot-eval" ) size=4851668992 sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" - url="$host/10/en-us_windows_10_iot_enterprise_ltsc_2021_${PLATFORM,,}_dvd_257ad90f.iso" + url="10/en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso" ;; - "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) size=4899461120 sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" - url="$host/10/en-us_windows_10_enterprise_ltsc_2021_${PLATFORM,,}_dvd_d289cf96.iso" + url="10/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso" ;; - "win81${PLATFORM,,}" ) + "win81x64" ) size=4320526336 sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" - url="$host/8.x/8.1/en_windows_8.1_with_update_${PLATFORM,,}_dvd_6051480.iso" + url="8.x/8.1/en_windows_8.1_with_update_x64_dvd_6051480.iso" ;; "win2022" | "win2022-eval" ) size=5365624832 sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db" - url="$host/server/2022/en-us_windows_server_2022_updated_jan_2024_${PLATFORM,,}_dvd_2b7a0c9f.iso" + url="server/2022/en-us_windows_server_2022_updated_jan_2024_x64_dvd_2b7a0c9f.iso" ;; "win2019" | "win2019-eval" ) size=5575774208 sum="0067afe7fdc4e61f677bd8c35a209082aa917df9c117527fc4b2b52a447e89bb" - url="$host/server/2019/en-us_windows_server_2019_updated_aug_2021_${PLATFORM,,}_dvd_a6431a28.iso" + url="server/2019/en-us_windows_server_2019_updated_aug_2021_x64_dvd_a6431a28.iso" ;; "win2016" | "win2016-eval" ) size=6006587392 sum="af06e5483c786c023123e325cea4775050324d9e1366f46850b515ae43f764be" - url="$host/server/2016/en_windows_server_2016_updated_feb_2018_${PLATFORM,,}_dvd_11636692.iso" + url="server/2016/en_windows_server_2016_updated_feb_2018_x64_dvd_11636692.iso" ;; "win2012r2" | "win2012r2-eval" ) size=5397889024 sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" - url="$host/server/2012r2/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708-004.iso" + url="server/2012r2/en_windows_server_2012_r2_with_update_x64_dvd_6052708-004.iso" ;; "win2008r2" | "win2008r2-eval" ) size=3166584832 sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" - url="$host/server/2008r2/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601-018.iso" + url="server/2008r2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601-018.iso" ;; - "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise" ) + "win7x64" | "win7x64-enterprise" ) size=3182604288 sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" - url="$host/7/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" + url="7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" ;; - "win7${PLATFORM,,}-ultimate" ) + "win7x64-ultimate" ) size=3320836096 sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1" - url="$host/7/en_windows_7_with_sp1_${PLATFORM,,}.iso" + url="7/en_windows_7_with_sp1_x64.iso" ;; "win7x86" | "win7x86-enterprise" ) size=2434502656 sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" - url="$host/7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" ;; "win7x86-ultimate" ) size=2564411392 sum="99f3369c90160816be07093dbb0ac053e0a84e52d6ed1395c92ae208ccdf67e5" - url="$host/7/en_windows_7_with_sp1_x86.iso" + url="7/en_windows_7_with_sp1_x86.iso" ;; - "winvista${PLATFORM,,}-ultimate" ) + "winvistax64-ultimate" ) size=3861460992 sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" - url="$host/vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" + url="vista/en_windows_vista_sp2_x64_dvd_342267.iso" ;; "winvistax86-ultimate" ) size=3243413504 sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" - url="$host/vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" + url="vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" - url="$host/xp/professional/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" + url="xp/professional/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" ;; "winxpx64" ) size=614166528 sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" - url="$host/xp/professional/en_win_xp_pro_${PLATFORM,,}_vl.iso" + url="xp/professional/en_win_xp_pro_x64_vl.iso" ;; esac case "${ret,,}" in "sum" ) echo "$sum" ;; "size" ) echo "$size" ;; - *) echo "$url";; + *) [ -n "$url" ] && echo "$host/$url";; esac return 0 @@ -601,89 +801,92 @@ getLink1() { getLink2() { local id="$1" - local ret="$2" + local lang="$2" + local ret="$3" local url="" local sum="" local size="" local host="https://files.dog/MSDN" + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + case "${id,,}" in - "win81${PLATFORM,,}" ) + "win81x64" ) size=4320526336 sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" - url="$host/Windows%208.1%20with%20Update/en_windows_8.1_with_update_${PLATFORM,,}_dvd_6051480.iso" + url="Windows%208.1%20with%20Update/en_windows_8.1_with_update_x64_dvd_6051480.iso" ;; - "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) + "win81x64-enterprise" | "win81x64-enterprise-eval" ) size=4139163648 sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" - url="$host/Windows%208.1%20with%20Update/en_windows_8.1_enterprise_with_update_${PLATFORM,,}_dvd_6054382.iso" + url="Windows%208.1%20with%20Update/en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso" ;; "win2012r2" | "win2012r2-eval" ) size=5397889024 sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" - url="$host/Windows%20Server%202012%20R2%20with%20Update/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708.iso" + url="Windows%20Server%202012%20R2%20with%20Update/en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso" ;; "win2008r2" | "win2008r2-eval" ) size=3166584832 sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" - url="$host/Windows%20Server%202008%20R2/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601.iso" + url="Windows%20Server%202008%20R2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso" ;; - "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise" ) + "win7x64" | "win7x64-enterprise" ) size=3182604288 sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" - url="$host/Windows%207/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" + url="Windows%207/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" ;; - "win7${PLATFORM,,}-ultimate" ) + "win7x64-ultimate" ) size=3320903680 sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" - url="$host/Windows%207/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" + url="Windows%207/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso" ;; "win7x86" | "win7x86-enterprise" ) size=2434502656 sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" - url="$host/Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" ;; "win7x86-ultimate" ) size=2564476928 sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" - url="$host/Windows%207/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso" + url="Windows%207/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso" ;; - "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" ) + "winvistax64" | "winvistax64-enterprise" ) size=3205953536 sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" - url="$host/Windows%20Vista/en_windows_vista_enterprise_sp2_${PLATFORM,,}_dvd_342332.iso" + url="Windows%20Vista/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso" ;; - "winvista${PLATFORM,,}-ultimate" ) + "winvistax64-ultimate" ) size=3861460992 sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" - url="$host/Windows%20Vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" + url="Windows%20Vista/en_windows_vista_sp2_x64_dvd_342267.iso" ;; "winvistax86" | "winvistax86-enterprise" ) size=2420981760 sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" - url="$host/Windows%20Vista/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" + url="Windows%20Vista/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" ;; "winvistax86-ultimate" ) size=3243413504 sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" - url="$host/Windows%20Vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" + url="Windows%20Vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" - url="$host/Windows%20XP/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" + url="Windows%20XP/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" ;; "winxpx64" ) size=614166528 sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" - url="$host/Windows%20XP/en_win_xp_pro_${PLATFORM,,}_vl.iso" + url="Windows%20XP/en_win_xp_pro_x64_vl.iso" ;; esac case "${ret,,}" in "sum" ) echo "$sum" ;; "size" ) echo "$size" ;; - *) echo "$url";; + *) [ -n "$url" ] && echo "$host/$url";; esac return 0 @@ -692,34 +895,37 @@ getLink2() { getLink3() { local id="$1" - local ret="$2" + local lang="$2" + local ret="$3" local url="" local sum="" local size="" local host="https://file.cnxiaobai.com/Windows" + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + case "${id,,}" in "core11" ) size=2159738880 sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" - url="$host/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%20core%20${PLATFORM,,}%20beta%201.iso" + url="%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%20core%20x64%20beta%201.iso" ;; "tiny11" ) size=3788177408 sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280" - url="$host/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%202311%20${PLATFORM,,}.iso" + url="%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%202311%20x64.iso" ;; "tiny10" ) size=3839819776 sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" - url="$host/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny10%2023H2%20${PLATFORM,,}.iso" + url="%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny10%2023H2%20x64.iso" ;; esac case "${ret,,}" in "sum" ) echo "$sum" ;; "size" ) echo "$size" ;; - *) echo "$url";; + *) [ -n "$url" ] && echo "$host/$url";; esac return 0 @@ -730,124 +936,807 @@ getLink4() { # Fallbacks for users who cannot connect to the Microsoft servers local id="$1" - local ret="$2" + local lang="$2" + local ret="$3" local url="" local sum="" local size="" local host="https://drive.massgrave.dev" + culture=$(getLanguage "$lang" "culture") + case "${id,,}" in - "win11${PLATFORM,,}" ) - size=7004780544 - sum="a6c21313210182e0315054789a2b658b77394d5544b69b5341075492f89f51e5" - url="$host/en-us_windows_11_consumer_editions_version_23h2_updated_april_2024_${PLATFORM,,}_dvd_d986680b.iso" + "win11x64" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "bg" | "bg-"* ) url="bg-bg_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "cs" | "cs-"* ) url="cs-cz_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "da" | "da-"* ) url="da-dk_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "de" | "de-"* ) url="de-de_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "el" | "el-"* ) url="el-gr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "gb" | "en-gb" ) url="en-gb_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "en" | "en-"* ) + size=7004780544 + sum="a6c21313210182e0315054789a2b658b77394d5544b69b5341075492f89f51e5" + url="en-us_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "mx" | "es-mx" ) url="es-mx_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "es" | "es-"* ) url="es-es_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "et" | "et-"* ) url="et-ee_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "fi" | "fi-"* ) url="fi-fi_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "he" | "he-"* ) url="he-il_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "hr" | "hr-"* ) url="hr-hr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "it" | "it-"* ) url="it-it_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "lt" | "lt-"* ) url="lt-lt_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "lv" | "lv-"* ) url="lv-lv_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "nb" | "nb-"* ) url="nb-no_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "ro" | "ro-"* ) url="ro-ro_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "sk" | "sk-"* ) url="sk-sk_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "sl" | "sl-"* ) url="sl-si_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "th" | "th-"* ) url="th-th_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "uk" | "uk-"* ) url="uk-ua_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + esac ;; - "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) - size=6879023104 - sum="3d4d388d6ffa371956304fa7401347b4535fd10e3137978a8f7750b790a43521" - url="$host/en-us_windows_11_business_editions_version_23h2_updated_april_2024_${PLATFORM,,}_dvd_349cd577.iso" + "win11x64-enterprise" | "win11x64-enterprise-eval" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_7c2ed97c.iso" ;; + "bg" | "bg-"* ) url="bg-bg_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b04d691c.iso" ;; + "cs" | "cs-"* ) url="cs-cz_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_a03b763a.iso" ;; + "da" | "da-"* ) url="da-dk_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b7b16bf7.iso" ;; + "de" | "de-"* ) url="de-de_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b8a95188.iso" ;; + "el" | "el-"* ) url="el-gr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_c80dd818.iso" ;; + "gb" | "en-gb" ) url="en-gb_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_0716ab50.iso" ;; + "en" | "en-"* ) + size=6879023104 + sum="3d4d388d6ffa371956304fa7401347b4535fd10e3137978a8f7750b790a43521" + url="en-us_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_349cd577.iso" ;; + "mx" | "es-mx" ) url="es-mx_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_79352ef9.iso" ;; + "es" | "es-"* ) url="es-es_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_252a527a.iso" ;; + "et" | "et-"* ) url="et-ee_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_3952b855.iso" ;; + "fi" | "fi-"* ) url="fi-fi_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_a90c9768.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_f4e143d8.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_9f143fd4.iso" ;; + "he" | "he-"* ) url="he-il_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_767966f8.iso" ;; + "hr" | "hr-"* ) url="hr-hr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_dcc7bb81.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_305a2313.iso" ;; + "it" | "it-"* ) url="it-it_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_f0af2584.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_1b3949b3.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b34a9c97.iso" ;; + "lt" | "lt-"* ) url="lt-lt_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_dbab7eb4.iso" ;; + "lv" | "lv-"* ) url="lv-lv_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_55d75975.iso" ;; + "nb" | "nb-"* ) url="nb-no_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_7baab32f.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_d223773d.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_55984e5b.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_151a4636.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_37cc9525.iso" ;; + "ro" | "ro-"* ) url="ro-ro_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_9a2982f1.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_a81ee700.iso" ;; + "sk" | "sk-"* ) url="sk-sk_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_e71e6779.iso" ;; + "sl" | "sl-"* ) url="sl-si_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_d48dc41a.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_86a8483f.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_96fc11d1.iso" ;; + "th" | "th-"* ) url="th-th_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_282dc814.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_26e6c580.iso" ;; + "uk" | "uk-"* ) url="uk-ua_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b2d33085.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_6aa057e6.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_3db5a62b.iso" ;; + esac ;; - "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + "win10x64" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "bg" | "bg-"* ) url="bg-bg_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "cs" | "cs-"* ) url="cs-cz_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "da" | "da-"* ) url="da-dk_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "de" | "de-"* ) url="de-de_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "el" | "el-"* ) url="el-gr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "gb" | "en-gb" ) url="en-gb_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "en" | "en-"* ) + size=6605459456 + sum="b072627c9b8d9f62af280faf2a8b634376f91dc73ea1881c81943c151983aa4a" + url="en-us_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "mx" | "es-mx" ) url="es-mx_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "es" | "es-"* ) url="es-es_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "et" | "et-"* ) url="et-ee_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "fi" | "fi-"* ) url="fi-fi_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "he" | "he-"* ) url="he-il_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "hr" | "hr-"* ) url="hr-hr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "it" | "it-"* ) url="it-it_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "lt" | "lt-"* ) url="lt-lt_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "lv" | "lv-"* ) url="lv-lv_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "nb" | "nb-"* ) url="nb-no_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "ro" | "ro-"* ) url="ro-ro_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "sk" | "sk-"* ) url="sk-sk_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "sl" | "sl-"* ) url="sl-si_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "th" | "th-"* ) url="th-th_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "uk" | "uk-"* ) url="uk-ua_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + esac + ;; + "win10x64-enterprise" | "win10x64-enterprise-eval" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4453f818.iso" ;; + "bg" | "bg-"* ) url="bg-bg_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_1777c1d1.iso" ;; + "cs" | "cs-"* ) url="cs-cz_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_c57cc386.iso" ;; + "da" | "da-"* ) url="da-dk_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_45f3ae0c.iso" ;; + "de" | "de-"* ) url="de-de_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_8042d5ca.iso" ;; + "el" | "el-"* ) url="el-gr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_60cc062b.iso" ;; + "gb" | "en-gb" ) url="en-gb_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_da84fbf3.iso" ;; + "en" | "en-"* ) + size=6428377088 + sum="05fe9de04c2626bd00fbe69ad19129b2dbb75a93a2fe030ebfb2256d937ceab8" + url="en-us_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_c00090a7.iso" ;; + "mx" | "es-mx" ) url="es-mx_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_87806b10.iso" ;; + "es" | "es-"* ) url="es-es_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_a464088d.iso" ;; + "et" | "et-"* ) url="et-ee_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_bd09a0ce.iso" ;; + "fi" | "fi-"* ) url="fi-fi_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4d76cfbd.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_40643c76.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_8ca89ac8.iso" ;; + "he" | "he-"* ) url="he-il_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_804bcaf0.iso" ;; + "hr" | "hr-"* ) url="hr-hr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4c4f5b26.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_43302dfb.iso" ;; + "it" | "it-"* ) url="it-it_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_73996e82.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_0aaece93.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_37654eaa.iso" ;; + "lt" | "lt-"* ) url="lt-lt_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_83c6a9b7.iso" ;; + "lv" | "lv-"* ) url="lv-lv_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_2b80cd3c.iso" ;; + "nb" | "nb-"* ) url="nb-no_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_2a274012.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_5eae56c5.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_6497a429.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_de63f2f7.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_a95933fb.iso" ;; + "ro" | "ro-"* ) url="ro-ro_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_d008e588.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_12b02d35.iso" ;; + "sk" | "sk-"* ) url="sk-sk_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_7caf6b4f.iso" ;; + "sl" | "sl-"* ) url="sl-si_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_e1e76668.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_b72c40ce.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4800fcd8.iso" ;; + "th" | "th-"* ) url="th-th_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_5077fb45.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_7703a6c4.iso" ;; + "uk" | "uk-"* ) url="uk-ua_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_37caf402.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_35f0e5a7.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_a2873093.iso" ;; + esac + ;; + "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_windows_10_enterprise_ltsc_2021_x64_dvd_60bc2a7a.iso" ;; + "bg" | "bg-"* ) url="bg-bg_windows_10_enterprise_ltsc_2021_x64_dvd_b0887275.iso" ;; + "cs" | "cs-"* ) url="cs-cz_windows_10_enterprise_ltsc_2021_x64_dvd_d624c653.iso" ;; + "da" | "da-"* ) url="da-dk_windows_10_enterprise_ltsc_2021_x64_dvd_6ec511bb.iso" ;; + "de" | "de-"* ) url="de-de_windows_10_enterprise_ltsc_2021_x64_dvd_71796d33.iso" ;; + "el" | "el-"* ) url="el-gr_windows_10_enterprise_ltsc_2021_x64_dvd_c83eab34.iso" ;; + "gb" | "en-gb" ) url="en-gb_windows_10_enterprise_ltsc_2021_x64_dvd_7fe51fe8.iso" ;; + "en" | "en-"* ) + size=4899461120 + sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" + url="en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso" ;; + "mx" | "es-mx" ) url="es-mx_windows_10_enterprise_ltsc_2021_x64_dvd_f6aaf384.iso" ;; + "es" | "es-"* ) url="es-es_windows_10_enterprise_ltsc_2021_x64_dvd_51d721ea.iso" ;; + "et" | "et-"* ) url="et-ee_windows_10_enterprise_ltsc_2021_x64_dvd_012a5c50.iso" ;; + "fi" | "fi-"* ) url="fi-fi_windows_10_enterprise_ltsc_2021_x64_dvd_551582d9.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_windows_10_enterprise_ltsc_2021_x64_dvd_2770e649.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_10_enterprise_ltsc_2021_x64_dvd_bda01eb0.iso" ;; + "he" | "he-"* ) url="he-il_windows_10_enterprise_ltsc_2021_x64_dvd_3a55ecd6.iso" ;; + "hr" | "hr-"* ) url="hr-hr_windows_10_enterprise_ltsc_2021_x64_dvd_f5085b75.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_10_enterprise_ltsc_2021_x64_dvd_d541ddb3.iso" ;; + "it" | "it-"* ) url="it-it_windows_10_enterprise_ltsc_2021_x64_dvd_0c1aa034.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_10_enterprise_ltsc_2021_x64_dvd_ef58c6a1.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_10_enterprise_ltsc_2021_x64_dvd_6d26f398.iso" ;; + "lt" | "lt-"* ) url="lt-lt_windows_10_enterprise_ltsc_2021_x64_dvd_9ffbbd5b.iso" ;; + "lv" | "lv-"* ) url="lv-lv_windows_10_enterprise_ltsc_2021_x64_dvd_6c89d2e0.iso" ;; + "nb" | "nb-"* ) url="nb-no_windows_10_enterprise_ltsc_2021_x64_dvd_c65c51a5.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_10_enterprise_ltsc_2021_x64_dvd_88f53466.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_10_enterprise_ltsc_2021_x64_dvd_eff40776.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_10_enterprise_ltsc_2021_x64_dvd_f318268e.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_10_enterprise_ltsc_2021_x64_dvd_f2e9b6a0.iso" ;; + "ro" | "ro-"* ) url="ro-ro_windows_10_enterprise_ltsc_2021_x64_dvd_ae2284d6.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_10_enterprise_ltsc_2021_x64_dvd_5044a1e7.iso" ;; + "sk" | "sk-"* ) url="sk-sk_windows_10_enterprise_ltsc_2021_x64_dvd_d6c64c5f.iso" ;; + "sl" | "sl-"* ) url="sl-si_windows_10_enterprise_ltsc_2021_x64_dvd_ec090386.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_windows_10_enterprise_ltsc_2021_x64_dvd_2d2f8815.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_10_enterprise_ltsc_2021_x64_dvd_9a28bb6b.iso" ;; + "th" | "th-"* ) url="th-th_windows_10_enterprise_ltsc_2021_x64_dvd_b7ed34d6.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_10_enterprise_ltsc_2021_x64_dvd_e55b1896.iso" ;; + "uk" | "uk-"* ) url="uk-ua_windows_10_enterprise_ltsc_2021_x64_dvd_816da3c3.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_10_enterprise_ltsc_2021_x64_dvd_80dba877.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_10_enterprise_ltsc_2021_x64_dvd_033b7312.iso" ;; + esac + ;; + "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=6248140800 sum="5d9b86ad467bc89f488d1651a6c5ad3656a7ea923f9f914510657a24c501bb86" - url="$host/en-us_windows_11_iot_enterprise_version_23h2_${PLATFORM,,}_dvd_fb37549c.iso" + url="en-us_windows_11_iot_enterprise_version_23h2_x64_dvd_fb37549c.iso" ;; - "win10${PLATFORM,,}" ) - size=6605459456 - sum="b072627c9b8d9f62af280faf2a8b634376f91dc73ea1881c81943c151983aa4a" - url="$host/en-us_windows_10_consumer_editions_version_22h2_updated_april_2024_${PLATFORM,,}_dvd_9a92dc89.iso" - ;; - "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) - size=6428377088 - sum="05fe9de04c2626bd00fbe69ad19129b2dbb75a93a2fe030ebfb2256d937ceab8" - url="$host/en-us_windows_10_business_editions_version_22h2_updated_april_2024_${PLATFORM,,}_dvd_c00090a7.iso" - ;; - "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) + "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=4851668992 sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" - url="$host/en-us_windows_10_iot_enterprise_ltsc_2021_${PLATFORM,,}_dvd_257ad90f.iso" + url="en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso" ;; - "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - size=4899461120 - sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" - url="$host/en-us_windows_10_enterprise_ltsc_2021_${PLATFORM,,}_dvd_d289cf96.iso" - ;; - "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) - size=4139163648 - sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" - url="$host/en_windows_8.1_enterprise_with_update_${PLATFORM,,}_dvd_6054382.iso" + "win81x64-enterprise" | "win81x64-enterprise-eval" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar_windows_8.1_enterprise_with_update_x64_dvd_6050360.iso" ;; + "bg" | "bg-"* ) url="bg_windows_8.1_enterprise_with_update_x64_dvd_6050367.iso" ;; + "cs" | "cs-"* ) url="cs_windows_8.1_enterprise_with_update_x64_dvd_6050393.iso" ;; + "da" | "da-"* ) url="da_windows_8.1_enterprise_with_update_x64_dvd_6050394.iso" ;; + "de" | "de-"* ) url="de_windows_8.1_enterprise_with_update_x64_dvd_6050501.iso" ;; + "el" | "el-"* ) url="el_windows_8.1_enterprise_with_update_x64_dvd_6050503.iso" ;; + "gb" | "en-gb" ) url="en-gb_windows_8.1_enterprise_with_update_x64_dvd_6054383.iso" ;; + "en" | "en-"* ) + size=4139163648 + sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" + url="en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso" ;; + "es" | "es-"* ) url="es_windows_8.1_enterprise_with_update_x64_dvd_6050578.iso" ;; + "et" | "et-"* ) url="et_windows_8.1_enterprise_with_update_x64_dvd_6054384.iso" ;; + "fi" | "fi-"* ) url="fi_windows_8.1_enterprise_with_update_x64_dvd_6050497.iso" ;; + "fr" | "fr-"* ) url="fr_windows_8.1_enterprise_with_update_x64_dvd_6050499.iso" ;; + "he" | "he-"* ) url="he_windows_8.1_enterprise_with_update_x64_dvd_6050504.iso" ;; + "hr" | "hr-"* ) url="hr_windows_8.1_enterprise_with_update_x64_dvd_6050391.iso" ;; + "hu" | "hu-"* ) url="hu_windows_8.1_enterprise_with_update_x64_dvd_6050505.iso" ;; + "it" | "it-"* ) url="it_windows_8.1_enterprise_with_update_x64_dvd_6050507.iso" ;; + "ja" | "ja-"* ) url="ja_windows_8.1_enterprise_with_update_x64_dvd_6050508.iso" ;; + "ko" | "ko-"* ) url="ko_windows_8.1_enterprise_with_update_x64_dvd_6050509.iso" ;; + "lt" | "lt-"* ) url="lt_windows_8.1_enterprise_with_update_x64_dvd_6050511.iso" ;; + "lv" | "lv-"* ) url="lv_windows_8.1_enterprise_with_update_x64_dvd_6050510.iso" ;; + "nb" | "nb-"* ) url="nb_windows_8.1_enterprise_with_update_x64_dvd_6050512.iso" ;; + "nl" | "nl-"* ) url="nl_windows_8.1_enterprise_with_update_x64_dvd_6054381.iso" ;; + "pl" | "pl-"* ) url="pl_windows_8.1_enterprise_with_update_x64_dvd_6050515.iso" ;; + "br" | "pt-br" ) url="pt_windows_8.1_enterprise_with_update_x64_dvd_6050521.iso" ;; + "pt" | "pt-"* ) url="pp_windows_8.1_enterprise_with_update_x64_dvd_6050526.iso" ;; + "ro" | "ro-"* ) url="ro_windows_8.1_enterprise_with_update_x64_dvd_6050534.iso" ;; + "ru" | "ru-"* ) url="ru_windows_8.1_enterprise_with_update_x64_dvd_6050542.iso" ;; + "sk" | "sk-"* ) url="sk_windows_8.1_enterprise_with_update_x64_dvd_6050562.iso" ;; + "sl" | "sl-"* ) url="sl_windows_8.1_enterprise_with_update_x64_dvd_6050570.iso" ;; + "sr" | "sr-"* ) url="sr-latn_windows_8.1_enterprise_with_update_x64_dvd_6050553.iso" ;; + "sv" | "sv-"* ) url="sv_windows_8.1_enterprise_with_update_x64_dvd_6050590.iso" ;; + "th" | "th-"* ) url="th_windows_8.1_enterprise_with_update_x64_dvd_6050602.iso" ;; + "tr" | "tr-"* ) url="tr_windows_8.1_enterprise_with_update_x64_dvd_6050609.iso" ;; + "uk" | "uk-"* ) url="uk_windows_8.1_enterprise_with_update_x64_dvd_6050618.iso" ;; + "zh-hk" ) url="hk_windows_8.1_enterprise_with_update_x64_dvd_6050380.iso" ;; + "zh-tw" ) url="tw_windows_8.1_enterprise_with_update_x64_dvd_6050387.iso" ;; + "zh" | "zh-"* ) url="cn_windows_8.1_enterprise_with_update_x64_dvd_6050374.iso" ;; + esac ;; "win2022" | "win2022-eval" ) - size=5515755520 - sum="7f41d603224e8a0bf34ba957d3abf0a02437ab75000dd758b5ce3f050963e91f" - url="$host/en-us_windows_server_2022_updated_april_2024_${PLATFORM,,}_dvd_164349f3.iso" + case "${culture,,}" in + "cs" | "cs-"* ) url="cs-cz_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "de" | "de-"* ) url="de-de_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "en" | "en-"* ) + size=5515755520 + sum="7f41d603224e8a0bf34ba957d3abf0a02437ab75000dd758b5ce3f050963e91f" + url="en-us_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "es" | "es-"* ) url="es-es_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "it" | "it-"* ) url="it-it_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + esac ;; "win2019" | "win2019-eval" ) - size=4843268096 - sum="4c5dd63efee50117986a2e38d4b3a3fbaf3c1c15e2e7ea1d23ef9d8af148dd2d" - url="$host/en_windows_server_2019_${PLATFORM,,}_dvd_4cb967d8.iso" + case "${culture,,}" in + "cs" | "cs-"* ) url="cs_windows_server_2019_x64_dvd_65383121.iso" ;; + "de" | "de-"* ) url="de_windows_server_2019_x64_dvd_17559a5b.iso" ;; + "en" | "en-"* ) + size=4843268096 + sum="4c5dd63efee50117986a2e38d4b3a3fbaf3c1c15e2e7ea1d23ef9d8af148dd2d" + url="en_windows_server_2019_x64_dvd_4cb967d8.iso" ;; + "es" | "es-"* ) url="es_windows_server_2019_x64_dvd_dd6b7747.iso" ;; + "fr" | "fr-"* ) url="fr_windows_server_2019_x64_dvd_d936fc7a.iso" ;; + "hu" | "hu-"* ) url="hu_windows_server_2019_x64_dvd_c8f2c460.iso" ;; + "it" | "it-"* ) url="it_windows_server_2019_x64_dvd_03c34df6.iso" ;; + "ja" | "ja-"* ) url="ja_windows_server_2019_x64_dvd_260a1d93.iso" ;; + "ko" | "ko-"* ) url="ko_windows_server_2019_x64_dvd_8778047d.iso" ;; + "nl" | "nl-"* ) url="nl_windows_server_2019_x64_dvd_82f9a152.iso" ;; + "pl" | "pl-"* ) url="pl_windows_server_2019_x64_dvd_2cd7adba.iso" ;; + "br" | "pt-br" ) url="pt_windows_server_2019_x64_dvd_e078dea6.iso" ;; + "pt" | "pt-"* ) url="pp_windows_server_2019_x64_dvd_e8fadd22.iso" ;; + "ru" | "ru-"* ) url="ru_windows_server_2019_x64_dvd_3411c84a.iso" ;; + "sv" | "sv-"* ) url="sv_windows_server_2019_x64_dvd_ce3d1a8d.iso" ;; + "tr" | "tr-"* ) url="tr_windows_server_2019_x64_dvd_475b2d44.iso" ;; + "zh-hk" | "zh-tw" ) url="ct_windows_server_2019_x64_dvd_b776f44b.iso" ;; + "zh" | "zh-"* ) url="cn_windows_server_2019_x64_dvd_4de40f33.iso" ;; + esac ;; "win2016" | "win2016-eval" ) - size=5653628928 - sum="4caeb24b661fcede81cd90661aec31aa69753bf49a5ac247253dd021bc1b5cbb" - url="$host/en_windows_server_2016_${PLATFORM,,}_dvd_9327751.iso" + case "${culture,,}" in + "cs" | "cs-"* ) url="cs_windows_server_2016_x64_dvd_9327749.iso" ;; + "de" | "de-"* ) url="de_windows_server_2016_x64_dvd_9327757.iso" ;; + "en" | "en-"* ) + size=5653628928 + sum="4caeb24b661fcede81cd90661aec31aa69753bf49a5ac247253dd021bc1b5cbb" + url="en_windows_server_2016_x64_dvd_9327751.iso" ;; + "es" | "es-"* ) url="es_windows_server_2016_x64_dvd_9327767.iso" ;; + "fr" | "fr-"* ) url="fr_windows_server_2016_x64_dvd_9327754.iso" ;; + "hu" | "hu-"* ) url="hu_windows_server_2016_x64_dvd_9327759.iso" ;; + "it" | "it-"* ) url="it_windows_server_2016_x64_dvd_9327760.iso" ;; + "ja" | "ja-"* ) url="ja_windows_server_2016_x64_dvd_9327761.iso" ;; + "ko" | "ko-"* ) url="ko_windows_server_2016_x64_dvd_9327762.iso" ;; + "nl" | "nl-"* ) url="nl_windows_server_2016_x64_dvd_9327750.iso" ;; + "pl" | "pl-"* ) url="pl_windows_server_2016_x64_dvd_9327763.iso" ;; + "br" | "pt-br" ) url="pt_windows_server_2016_x64_dvd_9327764.iso" ;; + "pt" | "pt-"* ) url="pp_windows_server_2016_x64_dvd_9327765.iso" ;; + "ru" | "ru-"* ) url="ru_windows_server_2016_x64_dvd_9327766.iso" ;; + "sv" | "sv-"* ) url="sv_windows_server_2016_x64_dvd_9327768.iso" ;; + "tr" | "tr-"* ) url="tr_windows_server_2016_x64_dvd_9327769.iso" ;; + "zh-hk" | "zh-tw" ) url="ct_windows_server_2016_x64_dvd_9327748.iso" ;; + "zh" | "zh-"* ) url="cn_windows_server_2016_x64_dvd_9327743.iso" ;; + esac ;; "win2012r2" | "win2012r2-eval" ) - size=5397889024 - sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" - url="$host/en_windows_server_2012_r2_with_update_${PLATFORM,,}_dvd_6052708.iso" + case "${culture,,}" in + "cs" | "cs-"* ) url="cs_windows_server_2012_r2_with_update_x64_dvd_6052695.iso" ;; + "de" | "de-"* ) url="de_windows_server_2012_r2_with_update_x64_dvd_6052720.iso" ;; + "en" | "en-"* ) + size=5397889024 + sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" + url="en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso" ;; + "es" | "es-"* ) url="es_windows_server_2012_r2_with_update_x64_dvd_6052769.iso" ;; + "fr" | "fr-"* ) url="fr_windows_server_2012_r2_with_update_x64_dvd_6052713.iso" ;; + "hu" | "hu-"* ) url="hu_windows_server_2012_r2_with_update_x64_dvd_6052727.iso" ;; + "it" | "it-"* ) url="it_windows_server_2012_r2_with_update_x64_dvd_6052734.iso" ;; + "ja" | "ja-"* ) url="ja_windows_server_2012_r2_with_update_x64_dvd_6052738.iso" ;; + "ko" | "ko-"* ) url="ko_windows_server_2012_r2_with_update_x64_dvd_6052743.iso" ;; + "nl" | "nl-"* ) url="nl_windows_server_2012_r2_with_update_x64_dvd_6052701.iso" ;; + "pl" | "pl-"* ) url="pl_windows_server_2012_r2_with_update_x64_dvd_6052749.iso" ;; + "br" | "pt-br" ) url="pt_windows_server_2012_r2_with_update_x64_dvd_6052754.iso" ;; + "pt" | "pt-"* ) url="pp_windows_server_2012_r2_with_update_x64_dvd_6052758.iso" ;; + "ru" | "ru-"* ) url="ru_windows_server_2012_r2_with_update_x64_dvd_6052763.iso" ;; + "sv" | "sv-"* ) url="sv_windows_server_2012_r2_with_update_x64_dvd_6052773.iso" ;; + "tr" | "tr-"* ) url="tr_windows_server_2012_r2_with_update_x64_dvd_6052778.iso" ;; + "zh-hk" ) url="hk_windows_server_2012_r2_with_update_x64_dvd_6052731.iso" ;; + "zh-tw" ) url="tw_windows_server_2012_r2_with_update_x64_dvd_6052736.iso" ;; + "zh" | "zh-"* ) url="cn_windows_server_2012_r2_with_update_x64_dvd_6052725.iso" ;; + esac ;; "win2008r2" | "win2008r2-eval" ) - size=3166584832 - sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" - url="$host/en_windows_server_2008_r2_with_sp1_${PLATFORM,,}_dvd_617601.iso" + case "${culture,,}" in + "cs" | "cs-"* ) url="cs_windows_server_2008_r2_with_sp1_x64_dvd_617602.iso" ;; + "de" | "de-"* ) url="de_windows_server_2008_r2_with_sp1_x64_dvd_617380.iso" ;; + "en" | "en-"* ) + size=3166584832 + sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" + url="en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso" ;; + "es" | "es-"* ) url="es_windows_server_2008_r2_with_sp1_x64_dvd_617398.iso" ;; + "fr" | "fr-"* ) url="fr_windows_server_2008_r2_with_sp1_x64_dvd_617591.iso" ;; + "hu" | "hu-"* ) url="hu_windows_server_2008_r2_with_sp1_x64_dvd_617383.iso" ;; + "it" | "it-"* ) url="it_windows_server_2008_r2_with_sp1_x64_dvd_617391.iso" ;; + "ja" | "ja-"* ) url="ja_windows_server_2008_r2_with_sp1_x64_dvd_617387.iso" ;; + "ko" | "ko-"* ) url="ko_windows_server_2008_r2_with_sp1_x64_dvd_617385.iso" ;; + "nl" | "nl-"* ) url="nl_windows_server_2008_r2_with_sp1_x64_dvd_617597.iso" ;; + "pl" | "pl-"* ) url="pl_windows_server_2008_r2_with_sp1_x64_dvd_617388.iso" ;; + "br" | "pt-br" ) url="pt_windows_server_2008_r2_with_sp1_x64_dvd_617599.iso" ;; + "pt" | "pt-"* ) url="pp_windows_server_2008_r2_with_sp1_x64_dvd_617382.iso" ;; + "ru" | "ru-"* ) url="ru_windows_server_2008_r2_with_sp1_x64_dvd_617389.iso" ;; + "sv" | "sv-"* ) url="sv_windows_server_2008_r2_with_sp1_x64_dvd_617393.iso" ;; + "tr" | "tr-"* ) url="tr_windows_server_2008_r2_with_sp1_x64_dvd_617390.iso" ;; + "zh-hk" ) url="hk_windows_server_2008_r2_with_sp1_x64_dvd_617586.iso" ;; + "zh-tw" ) url="tw_windows_server_2008_r2_with_sp1_x64_dvd_617595.iso" ;; + "zh" | "zh-"* ) url="cn_windows_server_2008_r2_with_sp1_x64_dvd_617598.iso" ;; + esac ;; - "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise" ) - size=3182604288 - sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" - url="$host/en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" + "win7x64" | "win7x64-enterprise" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar_windows_7_enterprise_with_sp1_x64_dvd_u_677643.iso" ;; + "bg" | "bg-"* ) url="bg_windows_7_enterprise_with_sp1_x64_dvd_u_677644.iso" ;; + "cs" | "cs-"* ) url="cs_windows_7_enterprise_with_sp1_x64_dvd_u_677646.iso" ;; + "da" | "da-"* ) url="da_windows_7_enterprise_with_sp1_x64_dvd_u_677648.iso" ;; + "de" | "de-"* ) url="de_windows_7_enterprise_with_sp1_x64_dvd_u_677649.iso" ;; + "el" | "el-"* ) url="el_windows_7_enterprise_with_sp1_x64_dvd_u_677650.iso" ;; + "en" | "en-"* ) + size=3182604288 + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" ;; + "es" | "es-"* ) url="es_windows_7_enterprise_with_sp1_x64_dvd_u_677652.iso" ;; + "et" | "et-"* ) url="et_windows_7_enterprise_with_sp1_x64_dvd_u_677653.iso" ;; + "fi" | "fi-"* ) url="fi_windows_7_enterprise_with_sp1_x64_dvd_u_677655.iso" ;; + "fr" | "fr-"* ) url="fr_windows_7_enterprise_with_sp1_x64_dvd_u_677656.iso" ;; + "he" | "he-"* ) url="he_windows_7_enterprise_with_sp1_x64_dvd_u_677657.iso" ;; + "hr" | "hr-"* ) url="hr_windows_7_enterprise_with_sp1_x64_dvd_u_677658.iso" ;; + "hu" | "hu-"* ) url="hu_windows_7_enterprise_with_sp1_x64_dvd_u_677659.iso" ;; + "it" | "it-"* ) url="it_windows_7_enterprise_with_sp1_x64_dvd_u_677660.iso" ;; + "ja" | "ja-"* ) url="ja_windows_7_enterprise_with_sp1_x64_dvd_u_677662.iso" ;; + "ko" | "ko-"* ) url="ko_windows_7_enterprise_k_with_sp1_x64_dvd_u_677728.iso" ;; + "lt" | "lt-"* ) url="lt_windows_7_enterprise_with_sp1_x64_dvd_u_677663.iso" ;; + "lv" | "lv-"* ) url="lv_windows_7_enterprise_with_sp1_x64_dvd_u_677664.iso" ;; + "nb" | "nb-"* ) url="no_windows_7_enterprise_with_sp1_x64_dvd_u_677665.iso" ;; + "nl" | "nl-"* ) url="nl_windows_7_enterprise_with_sp1_x64_dvd_u_677666.iso" ;; + "pl" | "pl-"* ) url="pl_windows_7_enterprise_with_sp1_x64_dvd_u_677667.iso" ;; + "br" | "pt-br" ) url="pt_windows_7_enterprise_with_sp1_x64_dvd_u_677668.iso" ;; + "pt" | "pt-"* ) url="pp_windows_7_enterprise_with_sp1_x64_dvd_u_677669.iso" ;; + "ro" | "ro-"* ) url="ro_windows_7_enterprise_with_sp1_x64_dvd_u_677670.iso" ;; + "ru" | "ru-"* ) url="ru_windows_7_enterprise_with_sp1_x64_dvd_u_677671.iso" ;; + "sk" | "sk-"* ) url="sk_windows_7_enterprise_with_sp1_x64_dvd_u_677673.iso" ;; + "sl" | "sl-"* ) url="sl_windows_7_enterprise_with_sp1_x64_dvd_u_677674.iso" ;; + "sr" | "sr-"* ) url="sr_windows_7_enterprise_with_sp1_x64_dvd_u_677675.iso" ;; + "sv" | "sv-"* ) url="sv_windows_7_enterprise_with_sp1_x64_dvd_u_677676.iso" ;; + "th" | "th-"* ) url="th_windows_7_enterprise_with_sp1_x64_dvd_u_677678.iso" ;; + "tr" | "tr-"* ) url="tr_windows_7_enterprise_with_sp1_x64_dvd_u_677681.iso" ;; + "uk" | "uk-"* ) url="uk_windows_7_enterprise_with_sp1_x64_dvd_u_677683.iso" ;; + "zh-hk" ) url="hk_windows_7_enterprise_with_sp1_x64_dvd_u_677687.iso" ;; + "zh-tw" ) url="tw_windows_7_enterprise_with_sp1_x64_dvd_u_677689.iso" ;; + "zh" | "zh-"* ) url="cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso" ;; + esac ;; - "win7${PLATFORM,,}-ultimate" ) - size=3320903680 - sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" - url="$host/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" + "win7x64-ultimate" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar_windows_7_ultimate_with_sp1_x64_dvd_u_677345.iso" ;; + "bg" | "bg-"* ) url="bg_windows_7_ultimate_with_sp1_x64_dvd_u_677363.iso" ;; + "cs" | "cs-"* ) url="cs_windows_7_ultimate_with_sp1_x64_dvd_u_677376.iso" ;; + "da" | "da-"* ) url="da_windows_7_ultimate_with_sp1_x64_dvd_u_677294.iso" ;; + "de" | "de-"* ) url="de_windows_7_ultimate_with_sp1_x64_dvd_u_677306.iso" ;; + "el" | "el-"* ) url="el_windows_7_ultimate_with_sp1_x64_dvd_u_677318.iso" ;; + "en" | "en-"* ) + size=3320903680 + sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" + url="en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso" ;; + "es" | "es-"* ) url="es_windows_7_ultimate_with_sp1_x64_dvd_u_677350.iso" ;; + "et" | "et-"* ) url="et_windows_7_ultimate_with_sp1_x64_dvd_u_677368.iso" ;; + "fi" | "fi-"* ) url="fi_windows_7_ultimate_with_sp1_x64_dvd_u_677378.iso" ;; + "fr" | "fr-"* ) url="fr_windows_7_ultimate_with_sp1_x64_dvd_u_677299.iso" ;; + "he" | "he-"* ) url="he_windows_7_ultimate_with_sp1_x64_dvd_u_677312.iso" ;; + "hr" | "hr-"* ) url="hr_windows_7_ultimate_with_sp1_x64_dvd_u_677324.iso" ;; + "hu" | "hu-"* ) url="hu_windows_7_ultimate_with_sp1_x64_dvd_u_677338.iso" ;; + "it" | "it-"* ) url="it_windows_7_ultimate_with_sp1_x64_dvd_u_677356.iso" ;; + "ja" | "ja-"* ) url="ja_windows_7_ultimate_with_sp1_x64_dvd_u_677372.iso" ;; + "ko" | "ko-"* ) url="ko_windows_7_ultimate_k_with_sp1_x64_dvd_u_677502.iso" ;; + "lt" | "lt-"* ) url="lt_windows_7_ultimate_with_sp1_x64_dvd_u_677379.iso" ;; + "lv" | "lv-"* ) url="lv_windows_7_ultimate_with_sp1_x64_dvd_u_677302.iso" ;; + "nb" | "nb-"* ) url="no_windows_7_ultimate_with_sp1_x64_dvd_u_677314.iso" ;; + "nl" | "nl-"* ) url="nl_windows_7_ultimate_with_sp1_x64_dvd_u_677325.iso" ;; + "pl" | "pl-"* ) url="pl_windows_7_ultimate_with_sp1_x64_dvd_u_677341.iso" ;; + "br" | "pt-br" ) url="pt_windows_7_ultimate_with_sp1_x64_dvd_u_677358.iso" ;; + "pt" | "pt-"* ) url="pp_windows_7_ultimate_with_sp1_x64_dvd_u_677373.iso" ;; + "ro" | "ro-"* ) url="ro_windows_7_ultimate_with_sp1_x64_dvd_u_677380.iso" ;; + "ru" | "ru-"* ) url="ru_windows_7_ultimate_with_sp1_x64_dvd_u_677391.iso" ;; + "sk" | "sk-"* ) url="sk_windows_7_ultimate_with_sp1_x64_dvd_u_677393.iso" ;; + "sl" | "sl-"* ) url="sl_windows_7_ultimate_with_sp1_x64_dvd_u_677396.iso" ;; + "sr" | "sr-"* ) url="sr_windows_7_ultimate_with_sp1_x64_dvd_u_677398.iso" ;; + "sv" | "sv-"* ) url="sv_windows_7_ultimate_with_sp1_x64_dvd_u_677400.iso" ;; + "th" | "th-"* ) url="th_windows_7_ultimate_with_sp1_x64_dvd_u_677402.iso" ;; + "tr" | "tr-"* ) url="tr_windows_7_ultimate_with_sp1_x64_dvd_u_677404.iso" ;; + "uk" | "uk-"* ) url="uk_windows_7_ultimate_with_sp1_x64_dvd_u_677406.iso" ;; + "zh-hk" ) url="hk_windows_7_ultimate_with_sp1_x64_dvd_u_677411.iso" ;; + "zh-tw" ) url="tw_windows_7_ultimate_with_sp1_x64_dvd_u_677414.iso" ;; + "zh" | "zh-"* ) url="cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso" ;; + esac ;; "win7x86" | "win7x86-enterprise" ) - size=2434502656 - sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" - url="$host/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + case "${culture,,}" in + "ar" | "ar-"* ) url="ar_windows_7_enterprise_with_sp1_x86_dvd_u_677691.iso" ;; + "bg" | "bg-"* ) url="bg_windows_7_enterprise_with_sp1_x86_dvd_u_677693.iso" ;; + "cs" | "cs-"* ) url="cs_windows_7_enterprise_with_sp1_x86_dvd_u_677695.iso" ;; + "da" | "da-"* ) url="da_windows_7_enterprise_with_sp1_x86_dvd_u_677698.iso" ;; + "de" | "de-"* ) url="de_windows_7_enterprise_with_sp1_x86_dvd_u_677702.iso" ;; + "el" | "el-"* ) url="el_windows_7_enterprise_with_sp1_x86_dvd_u_677706.iso" ;; + "en" | "en-"* ) + size=2434502656 + sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" + url="en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" ;; + "es" | "es-"* ) url="es_windows_7_enterprise_with_sp1_x86_dvd_u_677714.iso" ;; + "et" | "et-"* ) url="et_windows_7_enterprise_with_sp1_x86_dvd_u_677718.iso" ;; + "fi" | "fi-"* ) url="fi_windows_7_enterprise_with_sp1_x86_dvd_u_677722.iso" ;; + "fr" | "fr-"* ) url="fr_windows_7_enterprise_with_sp1_x86_dvd_u_677727.iso" ;; + "he" | "he-"* ) url="he_windows_7_enterprise_with_sp1_x86_dvd_u_677733.iso" ;; + "hr" | "hr-"* ) url="hr_windows_7_enterprise_with_sp1_x86_dvd_u_677739.iso" ;; + "hu" | "hu-"* ) url="hu_windows_7_enterprise_with_sp1_x86_dvd_u_677744.iso" ;; + "it" | "it-"* ) url="it_windows_7_enterprise_with_sp1_x86_dvd_u_677749.iso" ;; + "ja" | "ja-"* ) url="ja_windows_7_enterprise_with_sp1_x86_dvd_u_677757.iso" ;; + "ko" | "ko-"* ) url="ko_windows_7_enterprise_k_with_sp1_x86_dvd_u_677732.iso" ;; + "lt" | "lt-"* ) url="lt_windows_7_enterprise_with_sp1_x86_dvd_u_677764.iso" ;; + "lv" | "lv-"* ) url="lv_windows_7_enterprise_with_sp1_x86_dvd_u_677677.iso" ;; + "nb" | "nb-"* ) url="no_windows_7_enterprise_with_sp1_x86_dvd_u_677679.iso" ;; + "nl" | "nl-"* ) url="nl_windows_7_enterprise_with_sp1_x86_dvd_u_677682.iso" ;; + "pl" | "pl-"* ) url="pl_windows_7_enterprise_with_sp1_x86_dvd_u_677684.iso" ;; + "br" | "pt-br" ) url="pt_windows_7_enterprise_with_sp1_x86_dvd_u_677686.iso" ;; + "pt" | "pt-"* ) url="pp_windows_7_enterprise_with_sp1_x86_dvd_u_677688.iso" ;; + "ro" | "ro-"* ) url="ro_windows_7_enterprise_with_sp1_x86_dvd_u_677690.iso" ;; + "ru" | "ru-"* ) url="ru_windows_7_enterprise_with_sp1_x86_dvd_u_677692.iso" ;; + "sk" | "sk-"* ) url="sk_windows_7_enterprise_with_sp1_x86_dvd_u_677694.iso" ;; + "sl" | "sl-"* ) url="sl_windows_7_enterprise_with_sp1_x86_dvd_u_677696.iso" ;; + "sr" | "sr-"* ) url="sr_windows_7_enterprise_with_sp1_x86_dvd_u_677699.iso" ;; + "sv" | "sv-"* ) url="sv_windows_7_enterprise_with_sp1_x86_dvd_u_677701.iso" ;; + "th" | "th-"* ) url="th_windows_7_enterprise_with_sp1_x86_dvd_u_677705.iso" ;; + "tr" | "tr-"* ) url="tr_windows_7_enterprise_with_sp1_x86_dvd_u_677708.iso" ;; + "uk" | "uk-"* ) url="uk_windows_7_enterprise_with_sp1_x86_dvd_u_677712.iso" ;; + "zh-hk" ) url="hk_windows_7_enterprise_with_sp1_x86_dvd_u_677720.iso" ;; + "zh-tw" ) url="tw_windows_7_enterprise_with_sp1_x86_dvd_u_677723.iso" ;; + "zh" | "zh-"* ) url="cn_windows_7_enterprise_with_sp1_x86_dvd_u_677716.iso" ;; + esac ;; "win7x86-ultimate" ) - size=2564476928 - sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" - url="$host/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso" + case "${culture,,}" in + "ar" | "ar-"* ) url="ar_windows_7_ultimate_with_sp1_x86_dvd_u_677448.iso" ;; + "bg" | "bg-"* ) url="bg_windows_7_ultimate_with_sp1_x86_dvd_u_677450.iso" ;; + "cs" | "cs-"* ) url="cs_windows_7_ultimate_with_sp1_x86_dvd_u_677452.iso" ;; + "da" | "da-"* ) url="da_windows_7_ultimate_with_sp1_x86_dvd_u_677454.iso" ;; + "de" | "de-"* ) url="de_windows_7_ultimate_with_sp1_x86_dvd_u_677456.iso" ;; + "el" | "el-"* ) url="el_windows_7_ultimate_with_sp1_x86_dvd_u_677458.iso" ;; + "en" | "en-"* ) + size=2564476928 + sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" + url="en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso" ;; + "es" | "es-"* ) url="es_windows_7_ultimate_with_sp1_x86_dvd_u_677462.iso" ;; + "et" | "et-"* ) url="et_windows_7_ultimate_with_sp1_x86_dvd_u_677464.iso" ;; + "fi" | "fi-"* ) url="fi_windows_7_ultimate_with_sp1_x86_dvd_u_677466.iso" ;; + "fr" | "fr-"* ) url="fr_windows_7_ultimate_with_sp1_x86_dvd_u_677434.iso" ;; + "he" | "he-"* ) url="he_windows_7_ultimate_with_sp1_x86_dvd_u_677436.iso" ;; + "hr" | "hr-"* ) url="hr_windows_7_ultimate_with_sp1_x86_dvd_u_677438.iso" ;; + "hu" | "hu-"* ) url="hu_windows_7_ultimate_with_sp1_x86_dvd_u_677441.iso" ;; + "it" | "it-"* ) url="it_windows_7_ultimate_with_sp1_x86_dvd_u_677443.iso" ;; + "ja" | "ja-"* ) url="ja_windows_7_ultimate_with_sp1_x86_dvd_u_677445.iso" ;; + "ko" | "ko-"* ) url="ko_windows_7_ultimate_k_with_sp1_x86_dvd_u_677508.iso" ;; + "lt" | "lt-"* ) url="lt_windows_7_ultimate_with_sp1_x86_dvd_u_677447.iso" ;; + "lv" | "lv-"* ) url="lv_windows_7_ultimate_with_sp1_x86_dvd_u_677449.iso" ;; + "nb" | "nb-"* ) url="no_windows_7_ultimate_with_sp1_x86_dvd_u_677451.iso" ;; + "nl" | "nl-"* ) url="nl_windows_7_ultimate_with_sp1_x86_dvd_u_677453.iso" ;; + "pl" | "pl-"* ) url="pl_windows_7_ultimate_with_sp1_x86_dvd_u_677455.iso" ;; + "br" | "pt-br" ) url="pt_windows_7_ultimate_with_sp1_x86_dvd_u_677457.iso" ;; + "pt" | "pt-"* ) url="pp_windows_7_ultimate_with_sp1_x86_dvd_u_677459.iso" ;; + "ro" | "ro-"* ) url="ro_windows_7_ultimate_with_sp1_x86_dvd_u_677461.iso" ;; + "ru" | "ru-"* ) url="ru_windows_7_ultimate_with_sp1_x86_dvd_u_677463.iso" ;; + "sk" | "sk-"* ) url="sk_windows_7_ultimate_with_sp1_x86_dvd_u_677465.iso" ;; + "sl" | "sl-"* ) url="sl_windows_7_ultimate_with_sp1_x86_dvd_u_677467.iso" ;; + "sr" | "sr-"* ) url="sr_windows_7_ultimate_with_sp1_x86_dvd_u_677468.iso" ;; + "sv" | "sv-"* ) url="sv_windows_7_ultimate_with_sp1_x86_dvd_u_677482.iso" ;; + "th" | "th-"* ) url="th_windows_7_ultimate_with_sp1_x86_dvd_u_677483.iso" ;; + "tr" | "tr-"* ) url="tr_windows_7_ultimate_with_sp1_x86_dvd_u_677484.iso" ;; + "uk" | "uk-"* ) url="uk_windows_7_ultimate_with_sp1_x86_dvd_u_677485.iso" ;; + "zh-hk" ) url="hk_windows_7_ultimate_with_sp1_x86_dvd_u_677487.iso" ;; + "zh-tw" ) url="tw_windows_7_ultimate_with_sp1_x86_dvd_u_677488.iso" ;; + "zh" | "zh-"* ) url="cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso" ;; + esac ;; - "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" ) - size=3205953536 - sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" - url="$host/en_windows_vista_enterprise_sp2_${PLATFORM,,}_dvd_342332.iso" + "winvistax64" | "winvistax64-enterprise" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar_windows_vista_enterprise_with_sp2_x64_dvd_x15-40408.iso" ;; + "bg" | "bg-"* ) url="bg_windows_vista_enterprise_with_sp2_x64_dvd_x15-40410.iso" ;; + "cs" | "cs-"* ) url="cs_windows_vista_enterprise_with_sp2_x64_dvd_x15-40412.iso" ;; + "da" | "da-"* ) url="da_windows_vista_enterprise_with_sp2_x64_dvd_x15-40416.iso" ;; + "de" | "de-"* ) url="de_windows_vista_enterprise_sp2_x64_dvd_342376.iso" ;; + "el" | "el-"* ) url="el_windows_vista_enterprise_with_sp2_x64_dvd_x15-40423.iso" ;; + "en" | "en-"* ) + size=3205953536 + sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" + url="en_windows_vista_enterprise_sp2_x64_dvd_342332.iso" ;; + "es" | "es-"* ) url="es_windows_vista_enterprise_sp2_x64_dvd_342415.iso" ;; + "et" | "et-"* ) url="et_windows_vista_enterprise_with_sp2_x64_dvd_x15-40437.iso" ;; + "fi" | "fi-"* ) url="fi_windows_vista_enterprise_with_sp2_x64_dvd_x15-40451.iso" ;; + "fr" | "fr-"* ) url="fr_windows_vista_enterprise_sp2_x64_dvd_342355.iso" ;; + "he" | "he-"* ) url="he_windows_vista_enterprise_with_sp2_x64_dvd_x15-40425.iso" ;; + "hr" | "hr-"* ) url="hr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40396.iso" ;; + "hu" | "hu-"* ) url="hu_windows_vista_enterprise_with_sp2_x64_dvd_x15-40427.iso" ;; + "it" | "it-"* ) url="it_windows_vista_enterprise_with_sp2_x64_dvd_x15-40429.iso" ;; + "ja" | "ja-"* ) url="ja_windows_vista_enterprise_sp2_x64_dvd_342393.iso" ;; + "ko" | "ko-"* ) url="ko_windows_vista_enterprise_k_with_sp2_x64_dvd_x15-40433.iso" ;; + "lt" | "lt-"* ) url="lt_windows_vista_enterprise_with_sp2_x64_dvd_x15-40394.iso" ;; + "lv" | "lv-"* ) url="lv_windows_vista_enterprise_with_sp2_x64_dvd_x15-40392.iso" ;; + "nb" | "nb-"* ) url="no_windows_vista_enterprise_with_sp2_x64_dvd_x15-40439.iso" ;; + "nl" | "nl-"* ) url="nl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40441.iso" ;; + "pl" | "pl-"* ) url="pl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40445.iso" ;; + "br" | "pt-br" ) url="pt_windows_vista_enterprise_with_sp2_x64_dvd_x15-40400.iso" ;; + "pt" | "pt-"* ) url="pp_windows_vista_enterprise_with_sp2_x64_dvd_x15-40443.iso" ;; + "ro" | "ro-"* ) url="ro_windows_vista_enterprise_with_sp2_x64_dvd_x15-40447.iso" ;; + "ru" | "ru-"* ) url="ru_windows_vista_enterprise_with_sp2_x64_dvd_x15-40455.iso" ;; + "sk" | "sk-"* ) url="sk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40453.iso" ;; + "sl" | "sl-"* ) url="sl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40435.iso" ;; + "sr" | "sr-"* ) url="sr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40406.iso" ;; + "sv" | "sv-"* ) url="sv_windows_vista_enterprise_with_sp2_x64_dvd_x15-40449.iso" ;; + "th" | "th-"* ) url="th_windows_vista_enterprise_with_sp2_x64_dvd_x15-40457.iso" ;; + "tr" | "tr-"* ) url="tr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40459.iso" ;; + "uk" | "uk-"* ) url="uk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40398.iso" ;; + "zh-hk" ) url="hk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40463.iso" ;; + "zh-tw" ) url="tw_windows_vista_enterprise_with_sp2_x64_dvd_x15-40461.iso" ;; + "zh" | "zh-"* ) url="cn_windows_vista_enterprise_with_sp2_x64_dvd_x15-40402.iso" ;; + esac ;; - "winvista${PLATFORM,,}-ultimate" ) - size=3861460992 - sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" - url="$host/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" + "winvistax64-ultimate" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar_windows_vista_with_sp2_x64_dvd_x15-36318.iso" ;; + "bg" | "bg-"* ) url="bg_windows_vista_with_sp2_x64_dvd_x15-36321.iso" ;; + "cs" | "cs-"* ) url="cs_windows_vista_with_sp2_x64_dvd_x15-36327.iso" ;; + "da" | "da-"* ) url="da_windows_vista_with_sp2_x64_dvd_x15-36329.iso" ;; + "de" | "de-"* ) url="de_windows_vista_sp2_x64_dvd_342287.iso" ;; + "el" | "el-"* ) url="el_windows_vista_with_sp2_x64_dvd_x15-36343.iso" ;; + "en" | "en-"* ) + size=3861460992 + sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" + url="en_windows_vista_sp2_x64_dvd_342267.iso" ;; + "es" | "es-"* ) url="es_windows_vista_sp2_x64_dvd_342309.iso" ;; + "et" | "et-"* ) url="et_windows_vista_with_sp2_x64_dvd_x15-36335.iso" ;; + "fi" | "fi-"* ) url="fi_windows_vista_with_sp2_x64_dvd_x15-36337.iso" ;; + "fr" | "fr-"* ) url="fr_windows_vista_sp2_x64_dvd_342277.iso" ;; + "he" | "he-"* ) url="he_windows_vista_with_sp2_x64_dvd_x15-36344.iso" ;; + "hr" | "hr-"* ) url="hr_windows_vista_with_sp2_x64_dvd_x15-36325.iso" ;; + "hu" | "hu-"* ) url="hu_windows_vista_with_sp2_x64_dvd_x15-36346.iso" ;; + "it" | "it-"* ) url="it_windows_vista_with_sp2_x64_dvd_x15-36348.iso" ;; + "ja" | "ja-"* ) url="ja_windows_vista_sp2_x64_dvd_342298.iso" ;; + "ko" | "ko-"* ) url="ko_windows_vista_k_and_kn_with_sp2_x86_dvd_x15-36302.iso" ;; + "lt" | "lt-"* ) url="lt_windows_vista_with_sp2_x64_dvd_x15-36355.iso" ;; + "lv" | "lv-"* ) url="lv_windows_vista_with_sp2_x64_dvd_x15-36353.iso" ;; + "nb" | "nb-"* ) url="no_windows_vista_with_sp2_x64_dvd_x15-36357.iso" ;; + "nl" | "nl-"* ) url="nl_windows_vista_with_sp2_x64_dvd_x15-36331.iso" ;; + "pl" | "pl-"* ) url="pl_windows_vista_with_sp2_x64_dvd_x15-36359.iso" ;; + "br" | "pt-br" ) url="pt_windows_vista_with_sp2_x64_dvd_x15-36319.iso" ;; + "pt" | "pt-"* ) url="pp_windows_vista_with_sp2_x64_dvd_x15-36361.iso" ;; + "ro" | "ro-"* ) url="ro_windows_vista_with_sp2_x64_dvd_x15-36363.iso" ;; + "ru" | "ru-"* ) url="ru_windows_vista_with_sp2_x64_dvd_x15-36364.iso" ;; + "sk" | "sk-"* ) url="sk_windows_vista_with_sp2_x64_dvd_x15-36367.iso" ;; + "sl" | "sl-"* ) url="sl_windows_vista_with_sp2_x64_dvd_x15-36369.iso" ;; + "sr" | "sr-"* ) url="sr_windows_vista_with_sp2_x64_dvd_x15-36365.iso" ;; + "sv" | "sv-"* ) url="sv_windows_vista_with_sp2_x64_dvd_x15-36373.iso" ;; + "th" | "th-"* ) url="th_windows_vista_with_sp2_x64_dvd_x15-36374.iso" ;; + "tr" | "tr-"* ) url="tr_windows_vista_with_sp2_x64_dvd_x15-36375.iso" ;; + "uk" | "uk-"* ) url="uk_windows_vista_with_sp2_x64_dvd_x15-36376.iso" ;; + "zh-hk" ) url="hk_windows_vista_with_sp2_x64_dvd_x15-36324.iso" ;; + "zh-tw" ) url="tw_windows_vista_with_sp2_x64_dvd_x15-36323.iso" ;; + "zh" | "zh-"* ) url="cn_windows_vista_with_sp2_x64_dvd_x15-36322.iso" ;; + esac ;; "winvistax86" | "winvistax86-enterprise" ) - size=2420981760 - sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" - url="$host/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" + case "${culture,,}" in + "ar" | "ar-"* ) url="ar_windows_vista_enterprise_with_sp2_x86_dvd_x15-40263.iso" ;; + "bg" | "bg-"* ) url="bg_windows_vista_enterprise_with_sp2_x86_dvd_x15-40265.iso" ;; + "cs" | "cs-"* ) url="cs_windows_vista_enterprise_with_sp2_x86_dvd_x15-40267.iso" ;; + "da" | "da-"* ) url="da_windows_vista_enterprise_with_sp2_x86_dvd_x15-40271.iso" ;; + "de" | "de-"* ) url="de_windows_vista_enterprise_sp2_x86_dvd_342373.iso" ;; + "el" | "el-"* ) url="el_windows_vista_enterprise_with_sp2_x86_dvd_x15-40277.iso" ;; + "en" | "en-"* ) + size=2420981760 + sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" + url="en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" ;; + "es" | "es-"* ) url="es_windows_vista_enterprise_sp2_x86_dvd_342413.iso" ;; + "et" | "et-"* ) url="et_windows_vista_enterprise_with_sp2_x86_dvd_x15-40291.iso" ;; + "fi" | "fi-"* ) url="fi_windows_vista_enterprise_with_sp2_x86_dvd_x15-40305.iso" ;; + "fr" | "fr-"* ) url="fr_windows_vista_enterprise_sp2_x86_dvd_342352.iso" ;; + "he" | "he-"* ) url="he_windows_vista_enterprise_with_sp2_x86_dvd_x15-40279.iso" ;; + "hr" | "hr-"* ) url="hr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40251.iso" ;; + "hu" | "hu-"* ) url="hu_windows_vista_enterprise_with_sp2_x86_dvd_x15-40281.iso" ;; + "it" | "it-"* ) url="it_windows_vista_enterprise_with_sp2_x86_dvd_x15-40283.iso" ;; + "ja" | "ja-"* ) url="ja_windows_vista_enterprise_sp2_x86_dvd_342391.iso" ;; + "ko" | "ko-"* ) url="ko_windows_vista_enterprise_k_with_sp2_x86_dvd_x15-40287.iso" ;; + "lt" | "lt-"* ) url="lt_windows_vista_enterprise_with_sp2_x86_dvd_x15-40249.iso" ;; + "lv" | "lv-"* ) url="lv_windows_vista_enterprise_with_sp2_x86_dvd_x15-40247.iso" ;; + "nb" | "nb-"* ) url="no_windows_vista_enterprise_with_sp2_x86_dvd_x15-40293.iso" ;; + "nl" | "nl-"* ) url="nl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40295.iso" ;; + "pl" | "pl-"* ) url="pl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40299.iso" ;; + "br" | "pt-br" ) url="pt_windows_vista_enterprise_with_sp2_x86_dvd_x15-40255.iso" ;; + "pt" | "pt-"* ) url="pp_windows_vista_enterprise_with_sp2_x86_dvd_x15-40297.iso" ;; + "ro" | "ro-"* ) url="ro_windows_vista_enterprise_with_sp2_x86_dvd_x15-40301.iso" ;; + "ru" | "ru-"* ) url="ru_windows_vista_enterprise_with_sp2_x86_dvd_x15-40309.iso" ;; + "sk" | "sk-"* ) url="sk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40307.iso" ;; + "sl" | "sl-"* ) url="sl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40289.iso" ;; + "sr" | "sr-"* ) url="sr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40261.iso" ;; + "sv" | "sv-"* ) url="sv_windows_vista_enterprise_with_sp2_x86_dvd_x15-40303.iso" ;; + "th" | "th-"* ) url="th_windows_vista_enterprise_with_sp2_x86_dvd_x15-40311.iso" ;; + "tr" | "tr-"* ) url="tr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40313.iso" ;; + "uk" | "uk-"* ) url="uk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40253.iso" ;; + "zh-hk" ) url="hk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40317.iso" ;; + "zh-tw" ) url="tw_windows_vista_enterprise_with_sp2_x86_dvd_x15-40315.iso" ;; + "zh" | "zh-"* ) url="cn_windows_vista_enterprise_with_sp2_x86_dvd_x15-40257.iso" ;; + esac ;; "winvistax86-ultimate" ) - size=3243413504 - sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" - url="$host/en_windows_vista_with_sp2_x86_dvd_342266.iso" + case "${culture,,}" in + "ar" | "ar-"* ) url="ar_windows_vista_with_sp2_x86_dvd_x15-36282.iso" ;; + "bg" | "bg-"* ) url="bg_windows_vista_with_sp2_x86_dvd_x15-36284.iso" ;; + "hr" | "hr-"* ) url="hr_windows_vista_with_sp2_x86_dvd_x15-36288.iso" ;; + "cs" | "cs-"* ) url="cs_windows_vista_with_sp2_x86_dvd_x15-36289.iso" ;; + "da" | "da-"* ) url="da_windows_vista_with_sp2_x86_dvd_x15-36290.iso" ;; + "de" | "de-"* ) url="de_windows_vista_sp2_x86_dvd_342286.iso" ;; + "el" | "el-"* ) url="el_windows_vista_with_sp2_x86_dvd_x15-36297.iso" ;; + "en" | "en-"* ) + size=3243413504 + sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" + url="en_windows_vista_with_sp2_x86_dvd_342266.iso" ;; + "es" | "es-"* ) url="es_windows_vista_sp2_x86_dvd_342308.iso" ;; + "et" | "et-"* ) url="et_windows_vista_with_sp2_x86_dvd_x15-36293.iso" ;; + "fi" | "fi-"* ) url="fi_windows_vista_with_sp2_x86_dvd_x15-36294.iso" ;; + "fr" | "fr-"* ) url="fr_windows_vista_sp2_x86_dvd_342276.iso" ;; + "he" | "he-"* ) url="he_windows_vista_with_sp2_x86_dvd_x15-36298.iso" ;; + "hu" | "hu-"* ) url="hu_windows_vista_with_sp2_x86_dvd_x15-36299.iso" ;; + "it" | "it-"* ) url="it_windows_vista_with_sp2_x86_dvd_x15-36300.iso" ;; + "ja" | "ja-"* ) url="ja_windows_vista_sp2_x86_dvd_342296.iso" ;; + "ko" | "ko-"* ) url="ko_windows_vista_k_with_sp2_x64_dvd_x15-36350.iso" ;; + "lt" | "lt-"* ) url="lt_windows_vista_with_sp2_x86_dvd_x15-36304.iso" ;; + "lv" | "lv-"* ) url="lv_windows_vista_with_sp2_x86_dvd_x15-36303.iso" ;; + "nb" | "nb-"* ) url="no_windows_vista_with_sp2_x86_dvd_x15-36305.iso" ;; + "nl" | "nl-"* ) url="nl_windows_vista_with_sp2_x86_dvd_x15-36291.iso" ;; + "pl" | "pl-"* ) url="pl_windows_vista_with_sp2_x86_dvd_x15-36306.iso" ;; + "br" | "pt-br" ) url="pt_windows_vista_with_sp2_x86_dvd_x15-36283.iso" ;; + "pt" | "pt-"* ) url="pp_windows_vista_with_sp2_x86_dvd_x15-36307.iso" ;; + "ro" | "ro-"* ) url="ro_windows_vista_with_sp2_x86_dvd_x15-36308.iso" ;; + "ru" | "ru-"* ) url="ru_windows_vista_with_sp2_x86_dvd_x15-36309.iso" ;; + "sk" | "sk-"* ) url="sk_windows_vista_with_sp2_x86_dvd_x15-36311.iso" ;; + "sl" | "sl-"* ) url="sl_windows_vista_with_sp2_x86_dvd_x15-36312.iso" ;; + "sr" | "sr-"* ) url="sr_windows_vista_with_sp2_x86_dvd_x15-36310.iso" ;; + "sv" | "sv-"* ) url="sv_windows_vista_with_sp2_x86_dvd_x15-36314.iso" ;; + "th" | "th-"* ) url="th_windows_vista_with_sp2_x86_dvd_x15-36315.iso" ;; + "tr" | "tr-"* ) url="tr_windows_vista_with_sp2_x86_dvd_x15-36316.iso" ;; + "uk" | "uk-"* ) url="uk_windows_vista_with_sp2_x86_dvd_x15-36317.iso" ;; + "zh-hk" ) url="hk_windows_vista_with_sp2_x86_dvd_x15-36287.iso" ;; + "zh-tw" ) url="tw_windows_vista_with_sp2_x86_dvd_x15-36286.iso" ;; + "zh" | "zh-"* ) url="cn_windows_vista_with_sp2_x86_dvd_x15-36285.iso" ;; + esac + ;; + "winxpx86" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74065.iso" ;; + "cs" | "cs-"* ) url="cs_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73965.iso" ;; + "da" | "da-"* ) url="da_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73968.iso" ;; + "de" | "de-"* ) url="de_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73985.iso" ;; + "el" | "el-"* ) url="el_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73988.iso" ;; + "es" | "es-"* ) url="es_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74009.iso" ;; + "fi" | "fi-"* ) url="fi_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73979.iso" ;; + "fr" | "fr-"* ) url="fr_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73982.iso" ;; + "he" | "he-"* ) url="he_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74143.iso" ;; + "hu" | "hu-"* ) url="hu_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73991.iso" ;; + "it" | "it-"* ) url="it_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73994.iso" ;; + "ja" | "ja-"* ) url="ja_windows_xp_professional_with_service_pack_3_x86_dvd_vl_x14-74058.iso" ;; + "nb" | "nb-"* ) url="no_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74000.iso" ;; + "nl" | "nl-"* ) url="nl_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73971.iso" ;; + "pl" | "pl-"* ) url="pl_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74003.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74137.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74006.iso" ;; + "ru" | "ru-"* ) url="ru_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74146.iso" ;; + "sv" | "sv-"* ) url="sv_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74012.iso" ;; + "tr" | "tr-"* ) url="tr_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74085.iso" ;; + "zh-hk" ) url="zh-hk_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74075.iso" ;; + "zh-tw" ) url="zh-tw_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74140.iso" ;; + "zh" | "zh-"* ) url="zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso" ;; + esac + ;; + "winxpx64" ) + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + size=628168704 + sum="b641514c2265ba6c0a9ddbcfa4a6daaac6539db8d1ce704366cdfe5a516e0495" + url="en_win_xp_pro_x64_with_sp2_vl_x13-41611.iso" ;; esac case "${ret,,}" in "sum" ) echo "$sum" ;; "size" ) echo "$size" ;; - *) echo "$url";; + *) [ -n "$url" ] && echo "$host/$url";; esac return 0 @@ -856,39 +1745,42 @@ getLink4() { getLink5() { local id="$1" - local ret="$2" + local lang="$2" + local ret="$3" local url="" local sum="" local size="" local host="https://archive.org/download" + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + case "${id,,}" in "core11" ) size=2159738880 sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" - url="$host/tiny-11-core-x-64-beta-1/tiny11%20core%20${PLATFORM,,}%20beta%201.iso" + url="tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" ;; "tiny11" ) size=3788177408 sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280" - url="$host/tiny11-2311/tiny11%202311%20${PLATFORM,,}.iso" + url="tiny11-2311/tiny11%202311%20x64.iso" ;; "tiny10" ) size=3839819776 sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" - url="$host/tiny-10-23-h2/tiny10%20${PLATFORM,,}%2023h2.iso" + url="tiny-10-23-h2/tiny10%20x64%2023h2.iso" ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" - url="$host/XPPRO_SP3_ENU/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" + url="XPPRO_SP3_ENU/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" ;; esac case "${ret,,}" in "sum" ) echo "$sum" ;; "size" ) echo "$size" ;; - *) echo "$url";; + *) [ -n "$url" ] && echo "$host/$url";; esac return 0 @@ -897,12 +1789,13 @@ getLink5() { getValue() { local val="" - local id="$3" - local type="$2" + local id="$2" + local lang="$3" + local type="$4" local func="getLink$1" if [ "$1" -gt 0 ] && [ "$1" -le "$MIRRORS" ]; then - val=$($func "$id" "$type") + val=$($func "$id" "$lang" "$type") fi echo "$val" @@ -911,8 +1804,8 @@ getValue() { getLink() { - local url="" - url=$(getValue "$1" "" "$2") + local url + url=$(getValue "$1" "$2" "$3" "") echo "$url" return 0 @@ -920,8 +1813,8 @@ getLink() { getHash() { - local sum="" - sum=$(getValue "$1" "sum" "$2") + local sum + sum=$(getValue "$1" "$2" "$3" "sum") echo "$sum" return 0 @@ -929,8 +1822,8 @@ getHash() { getSize() { - local size="" - size=$(getValue "$1" "size" "$2") + local size + size=$(getValue "$1" "$2" "$3" "size") echo "$size" return 0 @@ -939,9 +1832,10 @@ getSize() { isMido() { local id="$1" + local lang="$2" local sum - sum=$(getMido "$id" "sum") + sum=$(getMido "$id" "en" "sum") [ -n "$sum" ] && return 0 return 1 @@ -950,10 +1844,19 @@ isMido() { isESD() { local id="$1" - local url + local lang="$2" - url=$(getCatalog "$id" "url") - [ -n "$url" ] && return 0 + case "${id,,}" in + "win11${PLATFORM,,}" | "win10${PLATFORM,,}" ) + return 0 + ;; + "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval") + return 0 + ;; + "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) + return 0 + ;; + esac return 1 } @@ -961,14 +1864,15 @@ isESD() { validVersion() { local id="$1" + local lang="$2" local url - isESD "$id" && return 0 - isMido "$id" && return 0 + isESD "$id" "$lang" && return 0 + isMido "$id" "$lang" && return 0 for ((i=1;i<=MIRRORS;i++)); do - url=$(getLink "$i" "$id") + url=$(getLink "$i" "$id" "$lang") [ -n "$url" ] && return 0 done @@ -984,12 +1888,12 @@ migrateFiles() { [ -f "$base" ] && return 0 - [[ "${version,,}" == "tiny10" ]] && file="tiny10_${PLATFORM,,}_23h2.iso" - [[ "${version,,}" == "tiny11" ]] && file="tiny11_2311_${PLATFORM,,}.iso" - [[ "${version,,}" == "core11" ]] && file="tiny11_core_${PLATFORM,,}_beta_1.iso" + [[ "${version,,}" == "tiny10" ]] && file="tiny10_x64_23h2.iso" + [[ "${version,,}" == "tiny11" ]] && file="tiny11_2311_x64.iso" + [[ "${version,,}" == "core11" ]] && file="tiny11_core_x64_beta_1.iso" [[ "${version,,}" == "winxpx86" ]] && file="en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" - [[ "${version,,}" == "winvista${PLATFORM,,}" ]] && file="en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" - [[ "${version,,}" == "win7${PLATFORM,,}" ]] && file="en_windows_7_enterprise_with_sp1_${PLATFORM,,}_dvd_u_677651.iso" + [[ "${version,,}" == "winvistax64" ]] && file="en_windows_vista_sp2_x64_dvd_342267.iso" + [[ "${version,,}" == "win7x64" ]] && file="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" [ ! -f "$STORAGE/$file" ] && return 0 ! mv -f "$STORAGE/$file" "$base" && return 1 diff --git a/src/entry.sh b/src/entry.sh index 8893716..20ec453 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -10,6 +10,7 @@ cd /run . reset.sh # Initialize system . define.sh # Define versions +. mido.sh # Download code . install.sh # Run installation . disk.sh # Initialize disks . display.sh # Initialize graphics diff --git a/src/install.sh b/src/install.sh index 47e4327..93a225c 100644 --- a/src/install.sh +++ b/src/install.sh @@ -73,6 +73,16 @@ startInstall() { : "${file//+/ }"; printf -v file '%b' "${_//%/\\x}" file=$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g') + else + + local language + language=$(getLanguage "$LANGUAGE" "culture") + language="${language%%-*}" + + if [ -n "$language" ] && [[ "${language,,}" != "en" ]]; then + file="${VERSION/\//}_${language,,}.iso" + fi + fi BOOT="$STORAGE/$file" @@ -209,273 +219,6 @@ detectCustom() { return 0 } -getESD() { - - local dir="$1" - local version="$2" - local editionName - local winCatalog size - - if ! isESD "${version,,}"; then - error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 - fi - - winCatalog=$(getCatalog "$version" "url") - editionName=$(getCatalog "$version" "edition") - - local msg="Downloading product information from Microsoft..." - info "$msg" && html "$msg" - - rm -rf "$dir" - mkdir -p "$dir" - - local wFile="catalog.cab" - local xFile="products.xml" - local eFile="esd_edition.xml" - local fFile="products_filter.xml" - - { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=10; rc=$?; } || : - (( rc != 0 )) && error "Failed to download $winCatalog , reason: $rc" && return 1 - - cd "$dir" - - if ! cabextract "$wFile" > /dev/null; then - cd /run - error "Failed to extract $wFile!" && return 1 - fi - - cd /run - - if [ ! -s "$dir/$xFile" ]; then - error "Failed to find $xFile in $wFile!" && return 1 - fi - - local esdLang="en-us" - local edQuery='//File[Architecture="'${PLATFORM}'"][Edition="'${editionName}'"]' - - echo -e '<Catalog>' > "$dir/$fFile" - xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" >> "$dir/$fFile" 2>/dev/null - echo -e '</Catalog>'>> "$dir/$fFile" - xmllint --nonet --xpath '//File[LanguageCode="'${esdLang}'"]' "$dir/$fFile" >"$dir/$eFile" - - size=$(stat -c%s "$dir/$eFile") - if ((size<20)); then - error "Failed to find Windows product in $eFile!" && return 1 - fi - - local tag="FilePath" - ESD=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") - - if [ -z "$ESD" ]; then - error "Failed to find ESD URL in $eFile!" && return 1 - fi - - tag="Sha1" - ESD_SUM=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") - tag="Size" - ESD_SIZE=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") - - rm -rf "$dir" - return 0 -} - -verifyFile() { - - local iso="$1" - local size="$2" - local total="$3" - local check="$4" - - if [ -n "$size" ] && [[ "$total" != "$size" ]] && [[ "$size" != "0" ]]; then - warn "The downloaded file has an unexpected size: $total bytes, while expected value was: $size bytes. Please report this at $SUPPORT/issues" - fi - - local hash="" - local algo="SHA256" - - [ -z "$check" ] && return 0 - [[ "$VERIFY" != [Yy1]* ]] && return 0 - [[ "${#check}" == "40" ]] && algo="SHA1" - - local msg="Verifying downloaded ISO..." - info "$msg" && html "$msg" - - if [[ "${algo,,}" != "sha256" ]]; then - hash=$(sha1sum "$iso" | cut -f1 -d' ') - else - hash=$(sha256sum "$iso" | cut -f1 -d' ') - fi - - if [[ "$hash" == "$check" ]]; then - info "Succesfully verified ISO!" && return 0 - fi - - error "The downloaded file has an invalid $algo checksum: $hash , while expected value was: $check. Please report this at $SUPPORT/issues" - - rm -f "$iso" - return 1 -} - -doMido() { - - local iso="$1" - local version="$2" - local desc="$3" - local rc sum size total - - rm -f "$iso" - rm -f "$iso.PART" - - size=$(getMido "$version" "size") - sum=$(getMido "$version" "sum") - - local msg="Downloading $desc..." - info "$msg" && html "$msg" - /run/progress.sh "$iso.PART" "$size" "Downloading $desc ([P])..." & - - cd "$TMP" - { /run/mido.sh "${version,,}"; rc=$?; } || : - cd /run - - fKill "progress.sh" - - if (( rc == 0 )) && [ -f "$iso" ]; then - total=$(stat -c%s "$iso") - if [ "$total" -gt 100000000 ]; then - ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 - html "Download finished successfully..." && return 0 - fi - fi - - rm -f "$iso" - rm -f "$iso.PART" - - return 1 -} - -downloadFile() { - - local iso="$1" - local url="$2" - local sum="$3" - local size="$4" - local desc="$5" - local rc total progress domain dots - - rm -f "$iso" - - # Check if running with interactive TTY or redirected to docker log - if [ -t 1 ]; then - progress="--progress=bar:noscroll" - else - progress="--progress=dot:giga" - fi - - local msg="Downloading $desc..." - html "$msg" - - domain=$(echo "$url" | awk -F/ '{print $3}') - dots=$(echo "$domain" | tr -cd '.' | wc -c) - (( dots > 1 )) && domain=$(expr "$domain" : '.*\.\(.*\..*\)') - - if [ -n "$domain" ] && [[ "${domain,,}" != *"microsoft.com" ]]; then - msg="Downloading $desc from $domain..." - fi - - info "$msg" - /run/progress.sh "$iso" "$size" "Downloading $desc ([P])..." & - - { wget "$url" -O "$iso" -q --timeout=10 --show-progress "$progress"; rc=$?; } || : - - fKill "progress.sh" - - if (( rc == 0 )) && [ -f "$iso" ]; then - total=$(stat -c%s "$iso") - if [ "$total" -gt 100000000 ]; then - ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 - html "Download finished successfully..." && return 0 - fi - fi - - error "Failed to download $url , reason: $rc" - - rm -f "$iso" - return 1 -} - -downloadImage() { - - local iso="$1" - local version="$2" - local tried="n" - local url sum size base desc - - if [[ "${version,,}" == "http"* ]]; then - base=$(basename "$iso") - desc=$(fromFile "$base") - downloadFile "$iso" "$version" "" "" "$desc" && return 0 - return 1 - fi - - if ! validVersion "$version"; then - error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 - fi - - desc=$(printVersion "$version" "") - - if isMido "$version"; then - tried="y" - doMido "$iso" "$version" "$desc" && return 0 - fi - - switchEdition "$version" - - if isESD "$version"; then - - if [[ "$tried" != "n" ]]; then - info "Failed to download $desc using Mido, will try a diferent method now..." - fi - - tried="y" - - if getESD "$TMP/esd" "$version"; then - ISO="${ISO%.*}.esd" - downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$desc" && return 0 - ISO="$iso" - fi - - fi - - for ((i=1;i<=MIRRORS;i++)); do - - url=$(getLink "$i" "$version") - - if [ -n "$url" ]; then - if [[ "$tried" != "n" ]]; then - info "Failed to download $desc, will try another mirror now..." - fi - tried="y" - size=$(getSize "$i" "$version") - sum=$(getHash "$i" "$version") - downloadFile "$iso" "$url" "$sum" "$size" "$desc" && return 0 - fi - - done - - return 1 -} - -removeDownload() { - - local iso="$1" - - [ ! -f "$iso" ] && return 0 - [ -n "$CUSTOM" ] && return 0 - ! rm -f "$iso" 2> /dev/null && warn "failed to remove $iso !" - - return 0 -} - extractESD() { local iso="$1" @@ -609,19 +352,6 @@ extractImage() { return 0 } -setXML() { - - local file="/custom.xml" - [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" - [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" - [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" - [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/$DETECTED.xml" - [ ! -f "$file" ] || [ ! -s "$file" ] && return 1 - - XML="$file" - return 0 -} - getPlatform() { local xml="$1" @@ -641,6 +371,26 @@ getPlatform() { return 0 } +checkPlatform() { + + local xml="$1" + local platform compat + + platform=$(getPlatform "$xml") + + case "${platform,,}" in + "x86" ) compat="x64" ;; + "x64" ) compat="$platform" ;; + "arm64" ) compat="$platform" ;; + * ) compat="${PLATFORM,,}" ;; + esac + + [[ "${compat,,}" == "${PLATFORM,,}" ]] && return 0 + + error "You cannot boot ${platform^^} images on a $PLATFORM CPU!" + return 1 +} + hasVersion() { local id="$1" @@ -686,26 +436,6 @@ selectVersion() { return 0 } -checkPlatform() { - - local xml="$1" - local platform compat - - platform=$(getPlatform "$xml") - - case "${platform,,}" in - "x86" ) compat="x64" ;; - "x64" ) compat="$platform" ;; - "arm64" ) compat="$platform" ;; - * ) compat="${PLATFORM,,}" ;; - esac - - [[ "${compat,,}" == "${PLATFORM,,}" ]] && return 0 - - error "You cannot boot ${platform^^} images on a $PLATFORM CPU!" - return 1 -} - detectVersion() { local xml="$1" @@ -720,11 +450,51 @@ detectVersion() { return 0 } +detectLanguage() { + + local xml="$1" + local lang="" + + if [[ "$xml" == *"LANGUAGE><DEFAULT>"* ]]; then + lang="${xml#*LANGUAGE><DEFAULT>}" + lang="${lang%%<*}" + else + if [[ "$xml" == *"FALLBACK><DEFAULT>"* ]]; then + lang="${xml#*FALLBACK><DEFAULT>}" + lang="${lang%%<*}" + fi + fi + + if [ -z "$lang" ]; then + warn "Language could not be detected from ISO!" && return 0 + fi + + local culture + culture=$(getLanguage "$lang" "culture") + [ -n "$culture" ] && LANGUAGE="$lang" && return 0 + + warn "Invalid language detected: \"$lang\"" + return 0 +} + +setXML() { + + local file="/custom.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/$DETECTED.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && return 1 + + XML="$file" + return 0 +} + detectImage() { local dir="$1" local version="$2" - local desc msg + local desc msg language XML="" @@ -787,6 +557,12 @@ detectImage() { fi desc=$(printEdition "$DETECTED" "$DETECTED") + detectLanguage "$info" + + if [[ "${LANGUAGE,,}" != "en" ]] && [[ "${LANGUAGE,,}" != "en-"* ]]; then + language=$(getLanguage "$LANGUAGE" "desc") + desc="$desc ($language)" + fi info "Detected: $desc" setXML "" && return 0 @@ -844,10 +620,55 @@ prepareImage() { return 1 } +updateXML() { + + local asset="$1" + local language="$2" + local culture region keyboard + + culture=$(getLanguage "$language" "culture") + + if [ -n "$culture" ] && [[ "${culture,,}" != "en-us" ]]; then + sed -i "s/<UILanguage>en-US<\/UILanguage>/<UILanguage>$culture<\/UILanguage>/g" "$asset" + fi + + region="$REGION" + [ -z "$region" ] && region="$culture" + + if [ -n "$region" ] && [[ "${region,,}" != "en-us" ]]; then + sed -i "s/<UserLocale>en-US<\/UserLocale>/<UserLocale>$region<\/UserLocale>/g" "$asset" + sed -i "s/<SystemLocale>en-US<\/SystemLocale>/<SystemLocale>$region<\/SystemLocale>/g" "$asset" + fi + + keyboard="$KEYBOARD" + [ -z "$keyboard" ] && keyboard="$culture" + + if [ -n "$keyboard" ] && [[ "${keyboard,,}" != "en-us" ]]; then + sed -i "s/<InputLocale>en-US<\/InputLocale>/<InputLocale>$keyboard<\/InputLocale>/g" "$asset" + sed -i "s/<InputLocale>0409:00000409<\/InputLocale>/<InputLocale>$keyboard<\/InputLocale>/g" "$asset" + fi + + if [ -n "$USERNAME" ]; then + sed -i "s/where name=\"Docker\"/where name=\"$USERNAME\"/g" "$asset" + sed -i "s/<Name>Docker<\/Name>/<Name>$USERNAME<\/Name>/g" "$asset" + sed -i "s/<FullName>Docker<\/FullName>/<FullName>$USERNAME<\/FullName>/g" "$asset" + sed -i "s/<Username>Docker<\/Username>/<Username>$USERNAME<\/Username>/g" "$asset" + fi + + if [ -n "$PASSWORD" ]; then + sed -i "s/<Value>password<\/Value>/<Value>$PASSWORD<\/Value>/g" "$asset" + sed -z "s/<Password>...........<Value \/>/<Password>\n <Value>$PASSWORD<\/Value>/g" -i "$asset" + sed -z "s/<Password>...............<Value \/>/<Password>\n <Value>$PASSWORD<\/Value>/g" -i "$asset" + fi + + return 0 +} + updateImage() { local dir="$1" local asset="$2" + local language="$3" local file="autounattend.xml" local org="${file/.xml/.org}" local dat="${file/.xml/.dat}" @@ -903,13 +724,19 @@ updateImage() { xml=$(basename "$asset") info "Adding $xml for automatic installation..." - if ! wimlib-imagex update "$loc" "$index" --command "add $asset /$file" > /dev/null; then + local answer="$TMP/$xml" + cp "$asset" "$answer" + updateXML "$answer" "$language" + + if ! wimlib-imagex update "$loc" "$index" --command "add $answer /$file" > /dev/null; then MANUAL="Y" warn "failed to add answer file ($xml) to ISO image, $FB" else - wimlib-imagex update "$loc" "$index" --command "add $asset /$dat" > /dev/null || true + wimlib-imagex update "$loc" "$index" --command "add $answer /$dat" > /dev/null || true fi + rm -f "$answer" + fi if [[ "$MANUAL" == [Yy1]* ]]; then @@ -920,9 +747,10 @@ updateImage() { if ! wimlib-imagex update "$loc" "$index" --command "add $TMP/$org /$file" > /dev/null; then warn "failed to restore original answer file ($org)." fi - rm -f "$TMP/$org" fi + rm -f "$TMP/$org" + fi local find="$file" @@ -940,6 +768,17 @@ updateImage() { return 0 } +removeDownload() { + + local iso="$1" + + [ ! -f "$iso" ] && return 0 + [ -n "$CUSTOM" ] && return 0 + ! rm -f "$iso" 2> /dev/null && warn "failed to remove $iso !" + + return 0 +} + copyOEM() { local dir="$1" @@ -1105,6 +944,7 @@ bootWindows() { ###################################### ! parseVersion && exit 58 +! parseLanguage && exit 56 ! detectCustom && exit 59 if ! startInstall; then @@ -1113,7 +953,7 @@ if ! startInstall; then fi if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then - if ! downloadImage "$ISO" "$VERSION"; then + if ! downloadImage "$ISO" "$VERSION" "$LANGUAGE"; then rm -f "$ISO" 2> /dev/null || true exit 61 fi @@ -1134,7 +974,7 @@ if ! prepareImage "$ISO" "$DIR"; then exit 60 fi -if ! updateImage "$DIR" "$XML"; then +if ! updateImage "$DIR" "$XML" "$LANGUAGE"; then abortInstall "$ISO" && return 0 exit 60 fi diff --git a/src/mido.sh b/src/mido.sh index abafce4..59ceae7 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -1,761 +1,576 @@ -#!/bin/sh - -# Copyright (C) 2024 Elliot Killick <contact@elliotkillick.com> -# Licensed under the MIT License. See LICENSE file for details. - -# Prefer Dash shell for greater security if available -if [ "$BASH" ] && command -v dash > /dev/null; then - exec dash "$0" "$@" -fi - -# Test for 4-bit color (16 colors) -# Operand "colors" is undefined by POSIX -# If the operand doesn't exist, the terminal probably doesn't support color and the program will continue normally without it -if [ "0$(tput colors 2> /dev/null)" -ge 16 ]; then - RED='\033[0;31m' - BLUE='\033[0;34m' - GREEN='\033[0;32m' - NC='\033[0m' -fi - -# Avoid printing messages as potential terminal escape sequences -echo_ok() { printf "%b%s%b" "${GREEN}[+]${NC} " "$1" "\n" >&2; } -echo_info() { printf "%b%s%b" "${BLUE}[i]${NC} " "$1" "\n" >&2; } -echo_err() { printf "%b%s%b" "${RED}[!]${NC} " "$1" "\n" >&2; } - -# https://pubs.opengroup.org/onlinepubs/9699919799/utilities/fold.html -format() { fold -s; } - -word_count() { echo $#; } - -usage() { - echo "Mido - The Secure Microsoft Windows Downloader" - echo "" - echo "Usage: $0 <windows_media>..." - echo "" - echo "Download specified list of Windows media." - echo "" - echo "Specify \"all\", or one or more of the following Windows media:" - echo " win7x64-ultimate" - echo " win81x64" - echo " win10x64" - echo " win11x64" - echo " win81x64-enterprise-eval" - echo " win10x64-enterprise-eval" - echo " win11x64-enterprise-eval" - echo " win10x64-enterprise-ltsc-eval (most secure)" - echo " win2008r2" - echo " win2012r2-eval" - echo " win2016-eval" - echo " win2019-eval" - echo " win2022-eval" - echo "" - echo "Each ISO download takes between 3 - 7 GiBs (average: 5 GiBs)." - echo "" - echo "Updates" - echo "-------" - echo "All the downloads provided here are the most up-to-date releases that Microsoft provides. This is ensured by programmatically checking Microsoft's official download pages to get the latest download link. In other cases, the Windows version in question is no longer supported by Microsoft meaning a direct download link (stored in Mido) will always point to the most up-to-date release." | format - echo "" - echo "Remember to update Windows to the latest patch level after installation." - echo "" - echo "Overuse" - echo "-------" - echo "Newer consumer versions of Windows including win81x64, win10x64, and win11x64 are downloaded through Microsoft's gated download web interface. Do not overuse this interface. Microsoft may be quick to do ~24 hour IP address bans after only a few download requests (especially if they are done in quick succession). Being temporarily banned from one of these downloads (e.g. win11x64) doesn't cause you to be banned from any of the other downloads provided through this interface." | format - echo "" - echo "Privacy Preserving Technologies" - echo "-------------------------------" - echo "The aforementioned Microsoft gated download web interface is currently blocking Tor (and similar technologies). They say this is to prevent people in restricted regions from downloading certain Windows media they shouldn't have access to. This is fine by most standards because Tor is too slow for large downloads anyway and we have checksum verification for security." | format - echo "" - echo "Language" - echo "--------" - echo "All the downloads provided here are for English (United States). This helps to great simplify maintenance and minimize the user's fingerprint. If another language is desired then that can easily be configured in Windows once it's installed." | format - echo "" - echo "Architecture" - echo "------------" - echo "All the downloads provided here are for x86-64 (x64). This is the only architecture Microsoft ships Windows Server in.$([ -d /run/qubes ] && echo ' Also, the only architecture Qubes OS supports.')" | format -} - -# Media naming scheme info: -# Windows Server has no architecture because Microsoft only supports amd64 for this version of Windows (the last version to support x86 was Windows Server 2008 without the R2) -# "eval" is short for "evaluation", it's simply the license type included with the Windows installation (only exists on enterprise/server) and must be specified in the associated answer file -# "win7x64" has the "ultimate" edition appended to it because it isn't "multi-edition" like the other Windows ISOs (for multi-edition ISOs the edition is specified in the associated answer file) - -readonly win7x64_ultimate="win7x64-ultimate.iso" -readonly win81x64="win81x64.iso" -readonly win10x64="win10x64.iso" -readonly win11x64="win11x64.iso" -readonly win81x64_enterprise_eval="win81x64-enterprise-eval.iso" -readonly win10x64_enterprise_eval="win10x64-enterprise-eval.iso" -readonly win11x64_enterprise_eval="win11x64-enterprise-eval.iso" -readonly win10x64_enterprise_ltsc_eval="win10x64-enterprise-ltsc-eval.iso" -readonly win2008r2="win2008r2.iso" -readonly win2012r2_eval="win2012r2-eval.iso" -readonly win2016_eval="win2016-eval.iso" -readonly win2019_eval="win2019-eval.iso" -readonly win2022_eval="win2022-eval.iso" - -parse_args() { - for arg in "$@"; do - if [ "$arg" = "-h" ] || [ "$arg" = "--help" ]; then - usage - exit - fi - done - - if [ $# -lt 1 ]; then - usage >&2 - exit 1 - fi - - # Append to media_list so media is downloaded in the order they're passed in - for arg in "$@"; do - case "$arg" in - win7x64-ultimate) - media_list="$media_list $win7x64_ultimate" - ;; - win81x64) - media_list="$media_list $win81x64" - ;; - win10x64) - media_list="$media_list $win10x64" - ;; - win11x64) - media_list="$media_list $win11x64" - ;; - win81x64-enterprise-eval) - media_list="$media_list $win81x64_enterprise_eval" - ;; - win10x64-enterprise-eval) - media_list="$media_list $win10x64_enterprise_eval" - ;; - win11x64-enterprise-eval) - media_list="$media_list $win11x64_enterprise_eval" - ;; - win10x64-enterprise-ltsc-eval) - media_list="$media_list $win10x64_enterprise_ltsc_eval" - ;; - win2008r2) - media_list="$media_list $win2008r2" - ;; - win2012r2-eval) - media_list="$media_list $win2012r2_eval" - ;; - win2016-eval) - media_list="$media_list $win2016_eval" - ;; - win2019-eval) - media_list="$media_list $win2019_eval" - ;; - win2022-eval) - media_list="$media_list $win2022_eval" - ;; - all) - media_list="$win7x64_ultimate $win81x64 $win10x64 $win11x64 $win81x64_enterprise_eval $win10x64_enterprise_eval $win11x64_enterprise_eval $win10x64_enterprise_ltsc_eval $win2008r2 $win2012r2_eval $win2016_eval $win2019_eval $win2022_eval" - break - ;; - *) - echo_err "Invalid Windows media specified: $arg" - exit 1 - ;; - esac - done -} +#!/usr/bin/env bash +set -Eeuo pipefail handle_curl_error() { - error_code="$1" - fatal_error_action=2 - - case "$error_code" in - 6) - echo_err "Failed to resolve Microsoft servers! Is there an Internet connection? Exiting..." - return "$fatal_error_action" - ;; - 7) - echo_err "Failed to contact Microsoft servers! Is there an Internet connection or is the server down?" - ;; - 8) - echo_err "Microsoft servers returned a malformed HTTP response!" - ;; - 22) - echo_err "Microsoft servers returned a failing HTTP status code!" - ;; - 23) - echo_err "Failed at writing Windows media to disk! Out of disk space or permission error? Exiting..." - return "$fatal_error_action" - ;; - 26) - echo_err "Ran out of memory during download! Exiting..." - return "$fatal_error_action" - ;; - 36) - echo_err "Failed to continue earlier download!" - ;; - 63) - echo_err "Microsoft servers returned an unexpectedly large response!" - ;; - # POSIX defines exit statuses 1-125 as usable by us - # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02 - $((error_code <= 125))) - # Must be some other server or network error (possibly with this specific request/file) - # This is when accounting for all possible errors in the curl manual assuming a correctly formed curl command and an HTTP(S) request, using only the curl features we're using, and a sane build - echo_err "Miscellaneous server or network error!" - ;; - 126 | 127) - echo_err "Curl command not found! Please install curl and try again. Exiting..." - return "$fatal_error_action" - ;; - # Exit statuses are undefined by POSIX beyond this point - *) - case "$(kill -l "$error_code")" in - # Signals defined to exist by POSIX: - # https://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html - INT) - echo_err "Curl was interrupted!" - ;; - # There could be other signals but these are most common - SEGV | ABRT) - echo_err "Curl crashed! Failed exploitation attempt? Please report any core dumps to curl developers. Exiting..." - return "$fatal_error_action" - ;; - *) - echo_err "Curl terminated due to a fatal signal!" - ;; - esac - esac - - return 1 -} - -part_ext=".PART" -unverified_ext=".UNVERIFIED" - -scurl_file() { - out_file="$1" - tls_version="$2" - url="$3" - - part_file="${out_file}${part_ext}" - - # --location: Microsoft likes to change which endpoint these downloads are stored on but is usually kind enough to add redirects - # --fail: Return an error on server errors where the HTTP response code is 400 or greater - curl --progress-bar --location --output "$part_file" --continue-at - --max-filesize 10G --fail --proto =https "--tlsv$tls_version" --http1.1 -- "$url" || { - error_code=$? - handle_curl_error "$error_code" - error_action=$? - - # Clean up and make sure a future resume doesn't happen from a bad download resume file - if [ -f "$out_file" ]; then - # If file is empty, bad HTTP code, or bad download resume file - if [ ! -s "$out_file" ] || [ "$error_code" = 22 ] || [ "$error_code" = 36 ]; then - echo_info "Deleting failed download..." - rm -f "$out_file" - fi - fi - - return "$error_action" - } - - # Full downloaded succeeded, ready for verification check - mv "$part_file" "${out_file}" -} - -manual_verification() { - media_verification_failed_list="$1" - checksum_verification_failed_list="$2" - - echo_info "Manual verification instructions" - echo " 1. Get checksum (may already be done for you):" >&2 - echo " sha256sum <ISO_FILENAME>" >&2 - echo "" >&2 - echo " 2. Verify media:" >&2 - echo " Web search: https://duckduckgo.com/?q=%22CHECKSUM_HERE%22" >&2 - echo " Onion search: https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/?q=%22CHECKSUM_HERE%22" >&2 - echo " \"No results found\" or unexpected results indicates the media has been modified and should not be used." >&2 - echo "" >&2 - echo " 3. Remove the $unverified_ext extension from the file after performing or deciding to skip verification (not recommended):" >&2 - echo " mv <ISO_FILENAME>$unverified_ext <ISO_FILENAME>" >&2 - echo "" >&2 - - for media in $media_verification_failed_list; do - # Read current checksum in list and then read remaining checksums back into the list (effectively running "shift" on the variable) - # POSIX sh doesn't support indexing so do this instead to iterate both lists at once - # POSIX sh doesn't support here-strings (<<<). We could also use the "cut" program but that's not a builtin - IFS=' ' read -r checksum checksum_verification_failed_list << EOF -$checksum_verification_failed_list -EOF - - echo " ${media}${unverified_ext} = $checksum" >&2 - echo " Web search: https://duckduckgo.com/?q=%22$checksum%22" >&2 - echo " Onion search: https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/?q=%22$checksum%22" >&2 - echo " mv ${media}${unverified_ext} $media" >&2 - echo "" >&2 - done - - echo " Theses searches can be performed in a web/Tor browser or more securely using" >&2 - echo " ddgr (Debian/Fedora packages available) terminal search tool if preferred." >&2 - echo " Once validated, consider updating the checksums in Mido by submitting a pull request on GitHub." >&2 - - # If you're looking for a single secondary source to cross-reference checksums then try here: https://files.rg-adguard.net/search - # This site is recommended by the creator of Rufus in the Fido README and has worked well for me -} - -consumer_download() { - # Copyright (C) 2024 Elliot Killick <contact@elliotkillick.com> - # Licensed under the MIT License. See LICENSE file for details. - # - # This function is from the Mido project: - # https://github.com/ElliotKillick/Mido - - # Download newer consumer Windows versions from behind gated Microsoft API - - out_file="$1" - # Either 8, 10, or 11 - windows_version="$2" - - url="https://www.microsoft.com/en-us/software-download/windows$windows_version" - case "$windows_version" in - 8 | 10) url="${url}ISO" ;; - esac - - user_agent="Mozilla/5.0 (X11; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0" - # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs - session_id="$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random)" - - # Get product edition ID for latest release of given Windows version - # Product edition ID: This specifies both the Windows release (e.g. 22H2) and edition ("multi-edition" is default, either Home/Pro/Edu/etc., we select "Pro" in the answer files) in one number - # This is a request we make that Fido doesn't. Fido manually maintains a list of all the Windows release/edition product edition IDs in its script (see: $WindowsVersions array). This is helpful for downloading older releases (e.g. Windows 10 1909, 21H1, etc.) but we always want to get the newest release which is why we get this value dynamically - # Also, keeping a "$WindowsVersions" array like Fido does would be way too much of a maintenance burden - # Remove "Accept" header that curl sends by default (match Fido requests) - iso_download_page_html="$(curl -sS --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || { - handle_curl_error $? - return $? - } - - # tr: Filter for only numerics to prevent HTTP parameter injection - # head -c was recently added to POSIX: https://austingroupbugs.net/view.php?id=407 - product_edition_id="$(echo "$iso_download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16)" - [ "$VERBOSE" ] && echo "Product edition ID: $product_edition_id" >&2 - - # Permit Session ID - # "org_id" is always the same value - curl -sS --output /dev/null --user-agent "$user_agent" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://vlscppe.microsoft.com/tags?org_id=y6jn8c31&session_id=$session_id" || { - # This should only happen if there's been some change to how this API works - handle_curl_error $? - return $? - } - - # Extract everything after the last slash - url_segment_parameter="${url##*/}" - - # Get language -> skuID association table - # SKU ID: This specifies the language of the ISO. We always use "English (United States)", however, the SKU for this changes with each Windows release - # We must make this request so our next one will be allowed - # --data "" is required otherwise no "Content-Length" header will be sent causing HTTP response "411 Length Required" - language_skuid_table_html="$(curl -sS --request POST --user-agent "$user_agent" --data "" --header "Accept:" --max-filesize 10K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=a8f8f489-4c7f-463a-9ca6-5cff94d8d041&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=getskuinformationbyproductedition&sessionId=$session_id&productEditionId=$product_edition_id&sdVersion=2")" || { - handle_curl_error $? - return $? - } - - # tr: Filter for only alphanumerics or "-" to prevent HTTP parameter injection - sku_id="$(echo "$language_skuid_table_html" | grep "English (United States)" | sed 's/&quot;//g' | cut -d ',' -f 1 | cut -d ':' -f 2 | tr -cd '[:alnum:]-' | head -c 16)" - [ "$VERBOSE" ] && echo "SKU ID: $sku_id" >&2 - - # Get ISO download link - # If any request is going to be blocked by Microsoft it's always this last one (the previous requests always seem to succeed) - # --referer: Required by Microsoft servers to allow request - iso_download_link_html="$(curl -sS --request POST --user-agent "$user_agent" --data "" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=6e2a1789-ef16-4f27-a296-74ef7ef5d96b&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=GetProductDownloadLinksBySku&sessionId=$session_id&skuId=$sku_id&language=English&sdVersion=2")" || { - # This should only happen if there's been some change to how this API works - handle_curl_error $? - return $? - } - - if ! [ "$iso_download_link_html" ]; then - # This should only happen if there's been some change to how this API works - echo_err "Microsoft servers gave us an empty response to our request for an automated download." - manual_verification="true" - return 1 - fi - - if echo "$iso_download_link_html" | grep -q "We are unable to complete your request at this time."; then - echo_err "Microsoft blocked the automated download request based on your IP address." - manual_verification="true" - return 1 - fi - - # Filter for 64-bit ISO download URL - # sed: HTML decode "&" character - # tr: Filter for only alphanumerics or punctuation - iso_download_link="$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]')" - - if ! [ "$iso_download_link" ]; then - # This should only happen if there's been some change to the download endpoint web address - echo_err "Microsoft servers gave us no download link to our request for an automated download." - manual_verification="true" - return 1 - fi - - #echo_ok "Got latest ISO download link (valid for 24 hours): $iso_download_link" - - # Download ISO - scurl_file "$out_file" "1.3" "$iso_download_link" -} - -enterprise_eval_download() { - # Copyright (C) 2024 Elliot Killick <contact@elliotkillick.com> - # Licensed under the MIT License. See LICENSE file for details. - # - # This function is from the Mido project: - # https://github.com/ElliotKillick/Mido - - # Download enterprise evaluation Windows versions - - out_file="$1" - windows_version="$2" - enterprise_type="$3" - - url="https://www.microsoft.com/en-us/evalcenter/download-$windows_version" - - iso_download_page_html="$(curl -sS --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || { - handle_curl_error $? - return $? - } - - if ! [ "$iso_download_page_html" ]; then - # This should only happen if there's been some change to where this download page is located - echo_err "Windows enterprise evaluation download page gave us an empty response" - return 1 - fi - - iso_download_links="$(echo "$iso_download_page_html" | grep -o "https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=en-us&country=US")" || { - # This should only happen if there's been some change to the download endpoint web address - echo_err "Windows enterprise evaluation download page gave us no download link" - return 1 - } - - # Limit untrusted size for input validation - iso_download_links="$(echo "$iso_download_links" | head -c 1024)" - - case "$enterprise_type" in - # Select x64 download link - "enterprise") iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; - # Select x64 LTSC download link - "ltsc") iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) ;; - *) iso_download_link="$iso_download_links" ;; - esac - - # Follow redirect so proceeding log message is useful - # This is a request we make this Fido doesn't - # We don't need to set "--max-filesize" here because this is a HEAD request and the output is to /dev/null anyway - iso_download_link="$(curl -sS --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link")" || { - # This should only happen if the Microsoft servers are down - handle_curl_error $? - return $? - } - - # Limit untrusted size for input validation - iso_download_link="$(echo "$iso_download_link" | head -c 1024)" - - #echo_ok "Got latest ISO download link: $iso_download_link" - - # Use highest TLS version for endpoints that support it - case "$iso_download_link" in - "https://download.microsoft.com"*) tls_version="1.2" ;; - *) tls_version="1.3" ;; - esac - - # Download ISO - scurl_file "$out_file" "$tls_version" "$iso_download_link" -} - -download_media() { - echo_info "Downloading Windows media from official Microsoft servers..." - - media_download_failed_list="" - - for media in $media_list; do - case "$media" in - "$win7x64_ultimate") - echo_info "Downloading Windows 7..." - # Source, Google search this (it can be found many places): "dec04cbd352b453e437b2fe9614b67f28f7c0b550d8351827bc1e9ef3f601389" "download.microsoft.com" - # This Windows 7 ISO bundles MSU update packages - # It's the most up-to-date Windows 7 ISO that Microsoft offers (August 2018 update): https://files.rg-adguard.net/files/cea4210a-3474-a17a-88d4-4b3e10bd9f66 - # Of particular interest to us is the update that adds support for SHA-256 driver signatures so Qubes Windows Tools installs correctly - # - # Microsoft purged Windows 7 from all their servers... - # More info about this event: https://github.com/pbatard/Fido/issues/64 - # Luckily, the ISO is still available on the Wayback Machine so get the last copy of it from there - # This is still secure because we validate with the checksum from before the purge - # The only con then is that web.archive.org is a much slower download source than the Microsoft servers - echo_info "Microsoft has unfortunately purged all downloads of Windows 7 from their servers so this identical download is sourced from: web.archive.org" - scurl_file "$media" "1.3" "https://web.archive.org/web/20221228154140/https://download.microsoft.com/download/5/1/9/5195A765-3A41-4A72-87D8-200D897CBE21/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_ULTIMATE_x64FRE_en-us.iso" - ;; - "$win81x64") - echo_info "Downloading Windows 8.1..." - consumer_download "$media" 8 - ;; - "$win10x64") - echo_info "Downloading Windows 10..." - consumer_download "$media" 10 - ;; - "$win11x64") - echo_info "Downloading Windows 11..." - consumer_download "$media" 11 - ;; - - "$win81x64_enterprise_eval") - echo_info "Downloading Windows 8.1 Enterprise Evaluation..." - # This download link is "Update 1": https://files.rg-adguard.net/file/166cbcab-1647-53d5-1785-6ef9e22a6500 - # A more up-to-date "Update 3" enterprise ISO exists but it was only ever distributed by Microsoft through MSDN which means it's impossible to get a Microsoft download link now: https://files.rg-adguard.net/file/549a58f2-7813-3e77-df6c-50609bc6dd7c - # win81x64 is "Update 3" but that's isn't an enterprise version (although technically it's possible to modify a few files in the ISO to get any edition) - # If you want "Update 3" enterprise though (not from Microsoft servers), then you should still be able to get it from here: https://archive.org/details/en_windows_8.1_enterprise_with_update_x64_dvd_6054382_202110 - # "Update 1" enterprise also seems to be the ISO used by other projects - # Old source, used to be here but Microsoft deleted it: http://technet.microsoft.com/en-us/evalcenter/hh699156.aspx - # Source: https://gist.github.com/eyecatchup/11527136b23039a0066f - scurl_file "$media" "1.2" "https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" - ;; - "$win10x64_enterprise_eval") - echo_info "Downloading Windows 10 Enterprise Evaluation..." - enterprise_eval_download "$media" windows-10-enterprise enterprise - ;; - "$win11x64_enterprise_eval") - echo_info "Downloading Windows 11 Enterprise Evaluation..." - enterprise_eval_download "$media" windows-11-enterprise enterprise - ;; - "$win10x64_enterprise_ltsc_eval") - echo_info "Downloading Windows 10 Enterprise LTSC Evaluation..." - enterprise_eval_download "$media" windows-10-enterprise ltsc - ;; - - "$win2008r2") - echo_info "Downloading Windows Server 2008 R2..." - # Old source, used to be here but Microsoft deleted it: https://www.microsoft.com/en-us/download/details.aspx?id=11093 - # Microsoft took down the original download link provided by that source too but this new one has the same checksum - # Source: https://github.com/rapid7/metasploitable3/pull/563 - scurl_file "$media" "1.2" "https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" - ;; - "$win2012r2_eval") - echo_info "Downloading Windows Server 2012 R2 Evaluation..." - enterprise_eval_download "$media" windows-server-2012-r2 server - ;; - "$win2016_eval") - echo_info "Downloading Windows Server 2016 Evaluation..." - enterprise_eval_download "$media" windows-server-2016 server - ;; - "$win2019_eval") - echo_info "Downloading Windows Server 2019 Evaluation..." - enterprise_eval_download "$media" windows-server-2019 server - ;; - "$win2022_eval") - echo_info "Downloading Windows Server 2022 Evaluation..." - enterprise_eval_download "$media" windows-server-2022 server - ;; - esac || { - error_action=$? - media_download_failed_list="$media_download_failed_list $media" - # Return immediately on a fatal error action - if [ "$error_action" = 2 ]; then - return - fi - } - done -} - -verify_media() { - # SHA256SUMS file - # Some of these Windows ISOs are EOL (e.g. win81x64) so their checksums will always match - # For all other Windows ISOs, a new release will make their checksums no longer match - # - # IMPORTANT: These checksums are not necessarily subject to being updated - # Unfortunately, the maintenance burden would be too large and even if I did there would still be some time gap between Microsoft releasing a new ISO and me updating the checksum (also, users would have to update this script) - # For these reasons, I've opted for a slightly more manual verification where you have to look up the checksum to see if it's a well-known Windows ISO checksum - # Ultimately, you have to trust Microsoft because they could still include a backdoor in the verified ISO (keeping Windows air gapped could help with this) - # Community contributions for these checksums are welcome - # - # Leading backslash is to avoid prepending a newline while maintaining alignment - readonly sha256sums="\ -dec04cbd352b453e437b2fe9614b67f28f7c0b550d8351827bc1e9ef3f601389 win7x64-ultimate.iso -d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51 win81x64.iso -# Windows 10 22H2 -a6f470ca6d331eb353b815c043e327a347f594f37ff525f17764738fe812852e win10x64.iso -# Windows 11 23H2 v2 -36de5ecb7a0daa58dce68c03b9465a543ed0f5498aa8ae60ab45fb7c8c4ae402 win11x64.iso -2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2 win81x64-enterprise-eval.iso -ef7312733a9f5d7d51cfa04ac497671995674ca5e1058d5164d6028f0938d668 win10x64-enterprise-eval.iso -ebbc79106715f44f5020f77bd90721b17c5a877cbc15a3535b99155493a1bb3f win11x64-enterprise-eval.iso -e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5 win10x64-enterprise-ltsc-eval.iso -30832ad76ccfa4ce48ccb936edefe02079d42fb1da32201bf9e3a880c8ed6312 win2008r2.iso -6612b5b1f53e845aacdf96e974bb119a3d9b4dcb5b82e65804ab7e534dc7b4d5 win2012r2-eval.iso -1ce702a578a3cb1ac3d14873980838590f06d5b7101c5daaccbac9d73f1fb50f win2016-eval.iso -6dae072e7f78f4ccab74a45341de0d6e2d45c39be25f1f5920a2ab4f51d7bcbb win2019-eval.iso -3e4fa6d8507b554856fc9ca6079cc402df11a8b79344871669f0251535255325 win2022-eval.iso" - - # Read sha256sums line-by-line to build known checksum and media lists - # Only use shell builtins for better security and stability - # Don't use a for loop because IFS cannot temporarily be set using that - while IFS="$(printf '\n')" read -r line; do - # Ignore comments and empty lines - case "$line" in - "#"* | "") continue ;; - esac - - # Read first and second words of line - IFS=' ' read -r known_checksum known_media _ << EOF -$line -EOF - - known_checksum_list="$known_checksum_list $known_checksum" - known_media_list="$known_media_list $known_media" - done << EOF -$sha256sums -EOF - - media_verification_failed_list="" - checksum_verification_failed_list="" - - for media in $media_list; do - # Scan for unverified media files - if ! [ -f "${media}${unverified_ext}" ]; then - continue - fi - - if [ "$verify_media_message_shown" != "true" ]; then - echo_info "Verifying integrity..." - verify_media_message_shown="true" - fi - - checksum_line="$(sha256sum "${media}${unverified_ext}")" - # Get first word of checksum line - IFS=' ' read -r checksum _ << EOF -$checksum_line -EOF - - # Sanity check: Assert correct size of SHA-256 checksum - if [ ${#checksum} != 64 ]; then - echo_err "Failed SHA-256 sanity check! Exiting..." - exit 2 - fi - - known_checksum_list_iterator="$known_checksum_list" - - # Search known media and checksum lists for the current media - for known_media in $known_media_list; do - IFS=' ' read -r known_checksum known_checksum_list_iterator << EOF -$known_checksum_list_iterator -EOF - - if [ "$media" = "$known_media" ]; then - break - fi - done - - # Verify current media integrity - if [ "$checksum" = "$known_checksum" ]; then - echo "$media: OK" - mv "${media}${unverified_ext}" "$media" - else - echo "$media: UNVERIFIED" - media_verification_failed_list="$media_verification_failed_list $media" - checksum_verification_failed_list="$checksum_verification_failed_list $checksum" - fi - - # Reset known checksum list iterator so we can iterate on it again for the next media - known_checksum_list_iterator="$known_checksum_list" - done -} - -ending_summary() { - echo "" >&2 - - if [ "$media_download_failed_list" ]; then - for media in $media_download_failed_list; do - media_download_failed_argument_list="$media_download_failed_argument_list ${media%%.iso}" - done - fi - - # Exit codes - # 0: Success - # 1: Argument parsing error - # 2: Runtime error (see error message for more info) - # 3: One or more downloads failed - # 4: One or more verifications failed - # 5: At least one download and one verification failed (when more than one media is specified) - - exit_code=0 - - # Determine exit code - if [ "$media_download_failed_list" ] && [ "$media_verification_failed_list" ]; then - exit_code=5 - else - if [ "$media_download_failed_list" ]; then - exit_code=3 - elif [ "$media_verification_failed_list" ]; then - exit_code=4 - fi - fi - - trap -- - EXIT - - if [ "$exit_code" = 0 ]; then - echo_ok "Successfully downloaded Windows image!" - else - echo_ok "Finished! Please see the above errors with information" - exit "$exit_code" - fi -} - -# https://unix.stackexchange.com/questions/752570/why-does-trap-passthough-zero-instead-of-the-signal-the-process-was-killed-wit -handle_exit() { - exit_code=$? - signal="$1" - - if [ "$exit_code" != 0 ] || [ "$signal" ]; then - echo "" >&2 - echo_err "Mido was exited abruptly!" - fi - - if [ "$exit_code" != 0 ]; then - trap -- - EXIT - exit "$exit_code" - elif [ "$signal" ]; then - trap -- - "$signal" - kill -s "$signal" -- $$ - fi -} - -# Enable exiting on error -# -# Disable shell globbing -# This isn't necessary given that all unquoted variables (e.g. for determining word count) are set directly by us but it's just a precaution -set -ef - -# IFS defaults to many different kinds of whitespace but we only care about space -# Note: This means that ISO filenames cannot contain spaces but that's a bad idea anyway -IFS=' ' - -parse_args "$@" - -# POSIX sh doesn't include signals in its EXIT trap so do it ourselves -signo=1 -while true; do - # "kill" is a shell builtin - # shellcheck disable=SC2064 - case "$(kill -l "$signo" 2> /dev/null)" in - # Trap on all catchable terminating signals as defined by POSIX - # Stop (i.e. suspend) signals (like Ctrl + Z or TSTP) are fine because they can be resumed - # Most signals result in termination so this way is easiest (Linux signal(7) only adds more terminating signals) - # + local error_code="$1" + + case "$error_code" in + 6) error "Failed to resolve Microsoft servers! Is there an Internet connection?" ;; + 7) error "Failed to contact Microsoft servers! Is there an Internet connection or is the server down?" ;; + 8) error "Microsoft servers returned a malformed HTTP response!" ;; + 22) error "Microsoft servers returned a failing HTTP status code!" ;; + 23) error "Failed at writing Windows media to disk! Out of disk space or permission error?" ;; + 26) error "Ran out of memory during download!" ;; + 28) error "Connection timed out to Microsoft server!" ;; + 35) error "SSL connection error from Microsoft server!" ;; + 36) error "Failed to continue earlier download!" ;; + 52) error "Received no data from the Microsoft server!" ;; + 63) error "Microsoft servers returned an unexpectedly large response!" ;; + # POSIX defines exit statuses 1-125 as usable by us + # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02 + $((error_code <= 125))) + # Must be some other server or network error (possibly with this specific request/file) + # This is when accounting for all possible errors in the curl manual assuming a correctly formed curl command and an HTTP(S) request, using only the curl features we're using, and a sane build + error "Miscellaneous server or network error, reason: $error_code" + ;; + 126 | 127 ) error "Curl command not found!" ;; + # Exit statuses are undefined by POSIX beyond this point + *) + case "$(kill -l "$error_code")" in + # Signals defined to exist by POSIX: # https://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html - # https://unix.stackexchange.com/a/490816 - # Signal WINCH was recently added to POSIX: https://austingroupbugs.net/view.php?id=249 - CHLD | CONT | URG | WINCH | KILL | STOP | TSTP | TTIN | TTOU) ;; - *) trap "handle_exit $signo" "$signo" 2> /dev/null || break ;; - esac + INT) error "Curl was interrupted!" ;; + # There could be other signals but these are most common + SEGV | ABRT ) error "Curl crashed! Failed exploitation attempt? Please report any core dumps to curl developers." ;; + *) error "Curl terminated due to a fatal signal!" ;; + esac + esac - signo=$((signo + 1)) -done -trap handle_exit EXIT + return 1 +} -download_media -verify_media -ending_summary +download_windows() { + + local id="$1" + local lang="$2" + local sku_id="" + local language="" + local session_id="" + local browser_version="" + local windows_version="" + local iso_download_link="" + local product_edition_id="" + local iso_download_link_html="" + local iso_download_page_html="" + local language_skuid_table_html="" + + case "${id,,}" in + "win11${PLATFORM,,}" ) windows_version="11" ;; + "win10${PLATFORM,,}" ) windows_version="10" ;; + "win81${PLATFORM,,}" ) windows_version="8" ;; + * ) error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;; + esac + + language=$(getLanguage "$lang" "name") + + local url="https://www.microsoft.com/en-us/software-download/windows$windows_version" + case "$windows_version" in + 8 | 10) url="${url}ISO";; + esac + + # Determine approximate latest Firefox release + browser_version="$((124 + ($(date +%s) - 1710892800) / 2419200))" + local user_agent="Mozilla/5.0 (X11; Linux x86_64; rv:${browser_version}.0) Gecko/20100101 Firefox/${browser_version}.0" + + # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs + session_id="$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random)" + + # Get product edition ID for latest release of given Windows version + # Product edition ID: This specifies both the Windows release (e.g. 22H2) and edition ("multi-edition" is default, either Home/Pro/Edu/etc., we select "Pro" in the answer files) in one number + # This is the *only* request we make that Fido doesn't. Fido manually maintains a list of all the Windows release/edition product edition IDs in its script (see: $WindowsVersions array). This is helpful for downloading older releases (e.g. Windows 10 1909, 21H1, etc.) but we always want to get the newest release which is why we get this value dynamically + # Also, keeping a "$WindowsVersions" array like Fido does would be way too much of a maintenance burden + # Remove "Accept" header that curl sends by default + [[ "$DEBUG" == [Yy1]* ]] && echo " - Parsing download page: ${url}" + iso_download_page_html="$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || { + handle_curl_error $? + return $? + } + + [[ "$DEBUG" == [Yy1]* ]] && echo -n "Getting Product edition ID: " + # tr: Filter for only numerics to prevent HTTP parameter injection + # head -c was recently added to POSIX: https://austingroupbugs.net/view.php?id=407 + product_edition_id="$(echo "$iso_download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16)" + [[ "$DEBUG" == [Yy1]* ]] && echo "$product_edition_id" + + [[ "$DEBUG" == [Yy1]* ]] && echo "Permit Session ID: $session_id" + # Permit Session ID + # "org_id" is always the same value + curl --silent --max-time 30 --output /dev/null --user-agent "$user_agent" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://vlscppe.microsoft.com/tags?org_id=y6jn8c31&session_id=$session_id" || { + # This should only happen if there's been some change to how this API works + handle_curl_error $? + return $? + } + + # Extract everything after the last slash + local url_segment_parameter="${url##*/}" + + [[ "$DEBUG" == [Yy1]* ]] && echo -n "Getting language SKU ID: " + # Get language -> skuID association table + # SKU ID: This specifies the language of the ISO. We always use "English (United States)", however, the SKU for this changes with each Windows release + # We must make this request so our next one will be allowed + # --data "" is required otherwise no "Content-Length" header will be sent causing HTTP response "411 Length Required" + language_skuid_table_html="$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --header "Accept:" --max-filesize 10K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=a8f8f489-4c7f-463a-9ca6-5cff94d8d041&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=getskuinformationbyproductedition&sessionId=$session_id&productEditionId=$product_edition_id&sdVersion=2")" || { + handle_curl_error $? + return $? + } + + # tr: Filter for only alphanumerics or "-" to prevent HTTP parameter injection + sku_id="$(echo "$language_skuid_table_html" | grep -m 1 ">${language}<" | sed 's/&quot;//g' | cut -d ',' -f 1 | cut -d ':' -f 2 | tr -cd '[:alnum:]-' | head -c 16)" + + if [ -z "$sku_id" ]; then + language=$(getLanguage "$lang" "desc") + error "No download for the $language language available!" + return 1 + fi + + [[ "$DEBUG" == [Yy1]* ]] && echo "$sku_id" + [[ "$DEBUG" == [Yy1]* ]] && echo "Getting ISO download link..." + + # Get ISO download link + # If any request is going to be blocked by Microsoft it's always this last one (the previous requests always seem to succeed) + # --referer: Required by Microsoft servers to allow request + iso_download_link_html="$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=6e2a1789-ef16-4f27-a296-74ef7ef5d96b&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=GetProductDownloadLinksBySku&sessionId=$session_id&skuId=$sku_id&language=English&sdVersion=2")" + + if ! [ "$iso_download_link_html" ]; then + # This should only happen if there's been some change to how this API works + error "Microsoft servers gave us an empty response to our request for an automated download." + return 1 + fi + + if echo "$iso_download_link_html" | grep -q "We are unable to complete your request at this time."; then + error "Microsoft blocked the automated download request based on your IP address." + return 1 + fi + + # Filter for 64-bit ISO download URL + # sed: HTML decode "&" character + # tr: Filter for only alphanumerics or punctuation + iso_download_link="$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]')" + + if ! [ "$iso_download_link" ]; then + # This should only happen if there's been some change to the download endpoint web address + error "Microsoft servers gave us no download link to our request for an automated download!" + return 1 + fi + + MIDO_URL="$iso_download_link" + return 0 +} + +download_windows_eval() { + + local id="$1" + local lang="$2" + local culture="" + local language="" + local windows_version="" + local enterprise_type="" + + case "${id,,}" in + "win11${PLATFORM,,}-enterprise-eval" ) + windows_version="windows-11-enterprise" + enterprise_type="enterprise" ;; + "win10${PLATFORM,,}-enterprise-eval" ) + windows_version="windows-10-enterprise" + enterprise_type="enterprise" ;; + "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + windows_version="windows-10-enterprise" + enterprise_type="ltsc" ;; + "win2022-eval" ) + windows_version="windows-server-2022" + enterprise_type="server" ;; + "win2019-eval" ) + windows_version="windows-server-2019" + enterprise_type="server" ;; + "win2016-eval" ) + windows_version="windows-server-2016" + enterprise_type="server" ;; + "win2012r2-eval" ) + windows_version="windows-server-2012-r2" + enterprise_type="server" ;; + * ) + error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;; + esac + + culture=$(getLanguage "$lang" "culture") + + local country="${culture#*-}" + local iso_download_page_html="" + local url="https://www.microsoft.com/en-us/evalcenter/download-$windows_version" + + [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" + iso_download_page_html="$(curl --silent --max-time 30 --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || { + handle_curl_error $? + return $? + } + + if ! [ "$iso_download_page_html" ]; then + # This should only happen if there's been some change to where this download page is located + error "Windows server download page gave us an empty response" + return 1 + fi + + [[ "$DEBUG" == [Yy1]* ]] && echo "Getting download link.." + iso_download_links="$(echo "$iso_download_page_html" | grep -o "https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}")" || { + # This should only happen if there's been some change to the download endpoint web address + if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then + error "Windows server download page gave us no download link!" + else + language=$(getLanguage "$lang" "desc") + error "No download for the $language language available!" + fi + return 1 + } + + # Limit untrusted size for input validation + iso_download_links="$(echo "$iso_download_links" | head -c 1024)" + + case "$enterprise_type" in + # Select x64 download link + "enterprise") iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; + # Select x64 LTSC download link + "ltsc") iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) ;; + *) iso_download_link="$iso_download_links" ;; + esac + + # Follow redirect so proceeding log message is useful + # This is a request we make this Fido doesn't + # We don't need to set "--max-filesize" here because this is a HEAD request and the output is to /dev/null anyway + iso_download_link="$(curl --silent --max-time 30 --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link")" || { + # This should only happen if the Microsoft servers are down + handle_curl_error $? + return $? + } + + MIDO_URL="$iso_download_link" + return 0 +} + +getWindows() { + + local version="$1" + local lang="$2" + local desc="$3" + local language + + local msg="Requesting $desc from Microsoft server..." + info "$msg" && html "$msg" + + case "${version,,}" in + "win81${PLATFORM,,}" | "win10${PLATFORM,,}" | "win11${PLATFORM,,}" ) + download_windows "$version" "$lang" && return 0 + ;; + "win11${PLATFORM,,}-enterprise-eval" ) + download_windows_eval "$version" "$lang" && return 0 + ;; + "win10${PLATFORM,,}-enterprise-eval" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + download_windows_eval "$version" "$lang" && return 0 + ;; + "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) + download_windows_eval "$version" "$lang" && return 0 + ;; + "win81${PLATFORM,,}-enterprise-eval" ) + if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then + MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" && return 0 + fi + language=$(getLanguage "$lang" "desc") + error "No download for the $language language available!" + ;; + "win2008r2" ) + if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then + MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" && return 0 + fi + language=$(getLanguage "$lang" "desc") + error "No download for the $language language available!" + ;; + * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; + esac + + MIDO_URL="" + return 1 +} + +getCatalog() { + + local id="$1" + local ret="$2" + local url="" + local name="" + local edition="" + + case "${id,,}" in + "win11${PLATFORM,,}" ) + edition="Professional" + name="Windows 11 Pro" + url="https://go.microsoft.com/fwlink?linkid=2156292" ;; + "win10${PLATFORM,,}" ) + edition="Professional" + name="Windows 10 Pro" + url="https://go.microsoft.com/fwlink/?LinkId=841361" ;; + "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval") + edition="Enterprise" + name="Windows 11 Enterprise" + url="https://go.microsoft.com/fwlink?linkid=2156292" ;; + "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) + edition="Enterprise" + name="Windows 10 Enterprise" + url="https://go.microsoft.com/fwlink/?LinkId=841361" ;; + esac + + case "${ret,,}" in + "url" ) echo "$url" ;; + "name" ) echo "$name" ;; + "edition" ) echo "$edition" ;; + *) echo "";; + esac + + return 0 +} + +getESD() { + + local dir="$1" + local version="$2" + local lang="$3" + local desc="$4" + local culture + local language + local editionName + local winCatalog size + + culture=$(getLanguage "$lang" "culture") + winCatalog=$(getCatalog "$version" "url") + editionName=$(getCatalog "$version" "edition") + + if [ -z "$winCatalog" ] || [ -z "$editionName" ]; then + error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 + fi + + local msg="Downloading product information from Microsoft server..." + info "$msg" && html "$msg" + + rm -rf "$dir" + mkdir -p "$dir" + + local wFile="catalog.cab" + local xFile="products.xml" + local eFile="esd_edition.xml" + local fFile="products_filter.xml" + + { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30; rc=$?; } || : + (( rc == 4 )) && error "Failed to download $winCatalog , network failure!" && return 1 + (( rc != 0 )) && error "Failed to download $winCatalog , reason: $rc" && return 1 + + cd "$dir" + + if ! cabextract "$wFile" > /dev/null; then + cd /run + error "Failed to extract $wFile!" && return 1 + fi + + cd /run + + if [ ! -s "$dir/$xFile" ]; then + error "Failed to find $xFile in $wFile!" && return 1 + fi + + local edQuery='//File[Architecture="'${PLATFORM}'"][Edition="'${editionName}'"]' + + echo -e '<Catalog>' > "$dir/$fFile" + xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" >> "$dir/$fFile" 2>/dev/null + echo -e '</Catalog>'>> "$dir/$fFile" + + xmllint --nonet --xpath "//File[LanguageCode=\"${culture,,}\"]" "$dir/$fFile" >"$dir/$eFile" + + size=$(stat -c%s "$dir/$eFile") + if ((size<20)); then + language=$(getLanguage "$lang" "desc") + error "the $language language is not supported by this download method!" && return 1 + fi + + local tag="FilePath" + ESD=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") + + if [ -z "$ESD" ]; then + error "Failed to find ESD URL in $eFile!" && return 1 + fi + + tag="Sha1" + ESD_SUM=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") + tag="Size" + ESD_SIZE=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") + + rm -rf "$dir" + return 0 +} + +verifyFile() { + + local iso="$1" + local size="$2" + local total="$3" + local check="$4" + + if [ -n "$size" ] && [[ "$total" != "$size" ]] && [[ "$size" != "0" ]]; then + warn "The downloaded file has an unexpected size: $total bytes, while expected value was: $size bytes. Please report this at $SUPPORT/issues" + fi + + local hash="" + local algo="SHA256" + + [ -z "$check" ] && return 0 + [[ "$VERIFY" != [Yy1]* ]] && return 0 + [[ "${#check}" == "40" ]] && algo="SHA1" + + local msg="Verifying downloaded ISO..." + info "$msg" && html "$msg" + + if [[ "${algo,,}" != "sha256" ]]; then + hash=$(sha1sum "$iso" | cut -f1 -d' ') + else + hash=$(sha256sum "$iso" | cut -f1 -d' ') + fi + + if [[ "$hash" == "$check" ]]; then + info "Succesfully verified ISO!" && return 0 + fi + + error "The downloaded file has an invalid $algo checksum: $hash , while expected value was: $check. Please report this at $SUPPORT/issues" + + rm -f "$iso" + return 1 +} + +downloadFile() { + + local iso="$1" + local url="$2" + local sum="$3" + local size="$4" + local lang="$5" + local desc="$6" + local rc total progress domain dots + + rm -f "$iso" + + # Check if running with interactive TTY or redirected to docker log + if [ -t 1 ]; then + progress="--progress=bar:noscroll" + else + progress="--progress=dot:giga" + fi + + local msg="Downloading $desc..." + html "$msg" + + domain=$(echo "$url" | awk -F/ '{print $3}') + dots=$(echo "$domain" | tr -cd '.' | wc -c) + (( dots > 1 )) && domain=$(expr "$domain" : '.*\.\(.*\..*\)') + + if [ -n "$domain" ] && [[ "${domain,,}" != *"microsoft.com" ]]; then + msg="Downloading $desc from $domain..." + fi + + info "$msg" + /run/progress.sh "$iso" "$size" "Downloading $desc ([P])..." & + + { wget "$url" -O "$iso" -q --timeout=30 --show-progress "$progress"; rc=$?; } || : + + fKill "progress.sh" + + if (( rc == 0 )) && [ -f "$iso" ]; then + total=$(stat -c%s "$iso") + if [ "$total" -gt 100000000 ]; then + ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 + html "Download finished successfully..." && return 0 + fi + fi + + if (( rc != 4 )); then + error "Failed to download $url , reason: $rc" + else + error "Failed to download $url , network failure!" + fi + + rm -f "$iso" + return 1 +} + +downloadImage() { + + local iso="$1" + local version="$2" + local lang="$3" + local tried="n" + local url sum size base desc language + + if [[ "${version,,}" == "http"* ]]; then + base=$(basename "$iso") + desc=$(fromFile "$base") + downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 + return 1 + fi + + if ! validVersion "$version" "en"; then + error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 + fi + + desc=$(printVersion "$version" "") + + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + language=$(getLanguage "$lang" "desc") + if ! validVersion "$version" "$lang"; then + desc=$(printEdition "$version" "$desc") + error "The $language language version of $desc is not available, please switch to English." && return 1 + fi + desc="$desc in $language" + fi + + if isMido "$version" "$lang"; then + tried="y" + if getWindows "$version" "$lang" "$desc"; then + size=$(getMido "$version" "$lang" "size" ) + sum=$(getMido "$version" "$lang" "sum") + downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 + fi + fi + + switchEdition "$version" + + if isESD "$version" "$lang"; then + + if [[ "$tried" != "n" ]]; then + info "Failed to download $desc, will try a diferent method now..." + fi + + tried="y" + + if getESD "$TMP/esd" "$version" "$lang" "$desc"; then + ISO="${ISO%.*}.esd" + downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 + ISO="$iso" + fi + + fi + + for ((i=1;i<=MIRRORS;i++)); do + + url=$(getLink "$i" "$version" "$lang") + + if [ -n "$url" ]; then + if [[ "$tried" != "n" ]]; then + info "Failed to download $desc, will try another mirror now..." + fi + tried="y" + size=$(getSize "$i" "$version" "$lang") + sum=$(getHash "$i" "$version" "$lang") + downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 + fi + + done + + return 1 +} + +return 0 From 59a1e51f7b9c3b6ebc03db15602cf166d679dc63 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 18 May 2024 17:04:55 +0200 Subject: [PATCH 205/505] docs: Multi-language (#515) --- readme.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 2ade57d..ed204f3 100644 --- a/readme.md +++ b/readme.md @@ -119,7 +119,13 @@ kubectl apply -f kubernetes.yml You can choose between `Arabic`, `Bulgarian`, `Chinese`, `Croatian`, `Czech`, `Danish`, `Dutch`, `Estonian`, `Finnish`, `French`, `German`, `Greek`, `Hebrew`, `Hungarian`, `Italian`, `Japanese`, `Korean`, `Latvian`, `Lithuanian`, `Norwegian`, `Polish`, `Portuguese`, `Romanian`, `Russian`, `Serbian`, `Slovak`, `Slovenian`, `Spanish`, `Swedish`, `Turkish`, `Thai` and `Ukrainian`. - If you want to use a keyboard layout or region/locale that is not the default for the selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like `en-US`. + If you want to use a keyboard layout or locale that is not the default for the selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: + + ```yaml + environment: + REGION: "en-US" + KEYBOARD: "en-US" + ``` * ### How do I change the storage location? From 113dd94494aad0a906bba24a80d8718e66f15f96 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 18 May 2024 17:18:44 +0200 Subject: [PATCH 206/505] docs: Version table (#516) --- readme.md | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/readme.md b/readme.md index ed204f3..41b22ab 100644 --- a/readme.md +++ b/readme.md @@ -83,28 +83,29 @@ kubectl apply -f kubernetes.yml Select from the values below: - | **Value** | **Version** | **Size** | + | **Value** | **Version** | **Size** | |---|---|---| - | `win11` | Windows 11 Pro | 6.4 GB | - | `win11e` | Windows 11 Enterprise | 5.8 GB | - | `win10` | Windows 10 Pro | 5.8 GB | - | `ltsc10` | Windows 10 LTSC | 4.6 GB | - | `win10e` | Windows 10 Enterprise | 5.2 GB | - | `win81` | Windows 8.1 Pro | 4.2 GB | - | `win81e` | Windows 8.1 Enterprise | 3.8 GB | - | `win7` | Windows 7 Enterprise | 3.0 GB | - | `vista` | Windows Vista Enterprise | 3.0 GB | - | `winxp` | Windows XP Professional | 0.6 GB | + | `win11` | Windows 11 Pro | 6.4 GB | + | `win11e` | Windows 11 Enterprise | 5.8 GB | + | `win10` | Windows 10 Pro | 5.8 GB | + | `ltsc10` | Windows 10 LTSC | 4.6 GB | + | `win10e` | Windows 10 Enterprise | 5.2 GB | + |||| + | `win8` | Windows 8.1 Pro | 4.2 GB | + | `win8e` | Windows 8.1 Enterprise | 3.8 GB | + | `win7` | Windows 7 Enterprise | 3.0 GB | + | `vista` | Windows Vista Enterprise | 3.0 GB | + | `winxp` | Windows XP Professional | 0.6 GB | |||| - | `2022` | Windows Server 2022 | 4.7 GB | - | `2019` | Windows Server 2019 | 5.3 GB | - | `2016` | Windows Server 2016 | 6.5 GB | - | `2012` | Windows Server 2012 | 4.3 GB | - | `2008` | Windows Server 2008 | 3.0 GB | + | `2022` | Windows Server 2022 | 4.7 GB | + | `2019` | Windows Server 2019 | 5.3 GB | + | `2016` | Windows Server 2016 | 6.5 GB | + | `2012` | Windows Server 2012 | 4.3 GB | + | `2008` | Windows Server 2008 | 3.0 GB | |||| - | `core11` | Tiny 11 Core | 2.1 GB | - | `tiny11` | Tiny 11 | 3.8 GB | - | `tiny10` | Tiny 10 | 3.6 GB | + | `core11` | Tiny 11 Core | 2.1 GB | + | `tiny11` | Tiny 11 | 3.8 GB | + | `tiny10` | Tiny 10 | 3.6 GB | To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). From 59319ff8dfcec5b5d9dcd55d768ec882e4c30b95 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 18 May 2024 22:11:37 +0200 Subject: [PATCH 207/505] feat: Multi-language answer files (#518) --- assets/win10x64-enterprise-eval.xml | 18 +++++++++++------- assets/win10x64-enterprise.xml | 18 +++++++++++------- assets/win10x64-iot.xml | 18 +++++++++++------- assets/win10x64-ltsc.xml | 18 +++++++++++------- assets/win10x64.xml | 18 +++++++++++------- assets/win11x64-enterprise-eval.xml | 24 ++++++++++++++---------- assets/win11x64-enterprise.xml | 22 +++++++++++++--------- assets/win11x64.xml | 22 +++++++++++++--------- assets/win2008r2-eval.xml | 6 +++--- assets/win2008r2.xml | 6 +++--- assets/win2012r2-eval.xml | 18 +++++++++++------- assets/win2012r2.xml | 19 ++++++++++++------- assets/win2016-eval.xml | 18 +++++++++++------- assets/win2016.xml | 19 ++++++++++++------- assets/win2019-eval.xml | 19 ++++++++++++------- assets/win2019.xml | 19 ++++++++++++------- assets/win2022-eval.xml | 19 ++++++++++++------- assets/win2022.xml | 18 +++++++++++------- assets/win7x64-enterprise.xml | 6 +++--- assets/win7x64-ultimate.xml | 6 +++--- assets/win7x64.xml | 6 +++--- assets/win7x86-enterprise.xml | 6 +++--- assets/win7x86-ultimate.xml | 6 +++--- assets/win7x86.xml | 6 +++--- assets/win81x64-enterprise-eval.xml | 18 +++++++++++------- assets/win81x64-enterprise.xml | 18 +++++++++++------- assets/win81x64.xml | 18 +++++++++++------- assets/winvistax64-enterprise.xml | 12 +++++++++++- assets/winvistax64-ultimate.xml | 12 +++++++++++- assets/winvistax64.xml | 12 +++++++++++- assets/winvistax86-enterprise.xml | 12 +++++++++++- assets/winvistax86-ultimate.xml | 12 +++++++++++- assets/winvistax86.xml | 12 +++++++++++- 33 files changed, 311 insertions(+), 170 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 9e3fb01..f257bbc 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -292,6 +292,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -444,21 +453,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 5a3c262..9bb2ec1 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -295,6 +295,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -447,21 +456,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 3b00918..198e29c 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -301,6 +301,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -453,21 +462,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 3485899..a486187 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -298,6 +298,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -450,21 +459,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 62ca61a..a5e0524 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -295,6 +295,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -447,21 +456,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 8dde5c6..ad64df5 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -310,6 +310,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -457,31 +466,26 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index c1a22c3..d3a379e 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -313,6 +313,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -460,31 +469,26 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index f1c0086..d7a32a1 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -313,6 +313,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="auditSystem" /> <settings pass="auditUser" /> @@ -460,31 +469,26 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index 4f69250..f2e7644 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -177,8 +177,8 @@ <FirewallGroups> <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> <Active>true</Active> - <Group>Remote Desktop</Group> <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> </FirewallGroup> </FirewallGroups> </component> @@ -293,12 +293,12 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 18bf9f3..903f8fa 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -180,8 +180,8 @@ <FirewallGroups> <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> <Active>true</Active> - <Group>Remote Desktop</Group> <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> </FirewallGroup> </FirewallGroups> </component> @@ -296,12 +296,12 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 7fcde90..6bf8f49 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -203,6 +203,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -323,21 +332,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index d655136..86e0f18 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -206,6 +206,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -326,21 +335,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -348,3 +352,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 6834243..53073b6 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -203,6 +203,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -353,21 +362,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016.xml b/assets/win2016.xml index 125638b..1bdb2d9 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -206,6 +206,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -356,21 +365,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -378,3 +382,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index b6f6258..d19ef46 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -207,6 +207,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -357,21 +366,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -379,3 +383,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2019.xml b/assets/win2019.xml index 2ae76da..328c021 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -210,6 +210,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -360,21 +369,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -382,3 +386,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 53bb0bc..1d86489 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -207,6 +207,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -357,21 +366,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -379,3 +383,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2022.xml b/assets/win2022.xml index aa585a1..0d73a90 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -210,6 +210,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -360,21 +369,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index 6934dd5..538f917 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -181,8 +181,8 @@ <FirewallGroups> <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> <Active>true</Active> - <Group>Remote Desktop</Group> <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> </FirewallGroup> </FirewallGroups> </component> @@ -297,12 +297,12 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index 6e6e36c..93ecd9b 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -181,8 +181,8 @@ <FirewallGroups> <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> <Active>true</Active> - <Group>Remote Desktop</Group> <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> </FirewallGroup> </FirewallGroups> </component> @@ -297,12 +297,12 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index 29c0ab7..426d3d3 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -181,8 +181,8 @@ <FirewallGroups> <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> <Active>true</Active> - <Group>Remote Desktop</Group> <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> </FirewallGroup> </FirewallGroups> </component> @@ -297,12 +297,12 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index 11c78b6..2e391ff 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -181,8 +181,8 @@ <FirewallGroups> <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> <Active>true</Active> - <Group>Remote Desktop</Group> <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> </FirewallGroup> </FirewallGroups> </component> @@ -297,12 +297,12 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index 221ef90..10368c8 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -181,8 +181,8 @@ <FirewallGroups> <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> <Active>true</Active> - <Group>Remote Desktop</Group> <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> </FirewallGroup> </FirewallGroups> </component> @@ -297,12 +297,12 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index c243898..c99e4a5 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -181,8 +181,8 @@ <FirewallGroups> <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> <Active>true</Active> - <Group>Remote Desktop</Group> <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> </FirewallGroup> </FirewallGroups> </component> @@ -297,12 +297,12 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 15dd729..3ea5a50 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -188,6 +188,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -308,21 +317,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index cbaa582..432f8ff 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -191,6 +191,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -311,21 +320,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 5b54c2a..2503c67 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -198,6 +198,15 @@ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <UserAuthentication>0</UserAuthentication> </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -318,21 +327,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "NetDIS.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "FPS-.*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>powershell -ExecutionPolicy ByPass -Command "Enable-NetFirewallRule -DisplayGroup @(Get-NetFirewallRule | Where-Object Name -Match "RemoteDesktop-[^I].*" | Select-Object DisplayGroup -Unique | % DisplayGroup)"</CommandLine> - <Description>Add RDP in firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index f2efec3..f03da27 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -232,7 +232,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> - <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <CommandLine>netsh.exe advfirewall firewall set rule group="@FirewallAPI.dll,-28752" new enable=Yes</CommandLine> <Description>Add RDP in firewall</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> @@ -262,6 +262,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index 9b80a39..42f2f1e 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -232,7 +232,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> - <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <CommandLine>netsh.exe advfirewall firewall set rule group="@FirewallAPI.dll,-28752" new enable=Yes</CommandLine> <Description>Add RDP in firewall</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> @@ -262,6 +262,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index 009b991..681c6e0 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -232,7 +232,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> - <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <CommandLine>netsh.exe advfirewall firewall set rule group="@FirewallAPI.dll,-28752" new enable=Yes</CommandLine> <Description>Add RDP in firewall</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> @@ -262,6 +262,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index 83e7534..b86742e 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -232,7 +232,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> - <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <CommandLine>netsh.exe advfirewall firewall set rule group="@FirewallAPI.dll,-28752" new enable=Yes</CommandLine> <Description>Add RDP in firewall</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> @@ -262,6 +262,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index db407e3..90b84e8 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -232,7 +232,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> - <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <CommandLine>netsh.exe advfirewall firewall set rule group="@FirewallAPI.dll,-28752" new enable=Yes</CommandLine> <Description>Add RDP in firewall</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> @@ -262,6 +262,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 07d5926..58e703c 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -232,7 +232,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> - <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine> + <CommandLine>netsh.exe advfirewall firewall set rule group="@FirewallAPI.dll,-28752" new enable=Yes</CommandLine> <Description>Add RDP in firewall</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> @@ -262,6 +262,16 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From 60a6417b09b416122f476de086c9e7c948077a32 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 18 May 2024 22:41:43 +0200 Subject: [PATCH 208/505] feat: Enable firewall in Windows Vista (#519) --- assets/winvistax64-enterprise.xml | 18 +++++++----------- assets/winvistax64-ultimate.xml | 17 ++++++----------- assets/winvistax64.xml | 17 ++++++----------- assets/winvistax86-enterprise.xml | 17 ++++++----------- assets/winvistax86-ultimate.xml | 17 ++++++----------- assets/winvistax86.xml | 17 ++++++----------- 6 files changed, 37 insertions(+), 66 deletions(-) diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index f03da27..78c3d50 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -237,41 +237,36 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> - <Description>Disable firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable RDP</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off sidebar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -279,3 +274,4 @@ </component> </settings> </unattend> + diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index 42f2f1e..6d9fe41 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -237,41 +237,36 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> - <Description>Disable firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable RDP</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off sidebar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index 681c6e0..409644e 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -237,41 +237,36 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> - <Description>Disable firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable RDP</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off sidebar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index b86742e..2104d73 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -237,41 +237,36 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> - <Description>Disable firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable RDP</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off sidebar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index 90b84e8..4ca700c 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -237,41 +237,36 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> - <Description>Disable firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable RDP</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off sidebar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 58e703c..9d6e112 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -237,41 +237,36 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> - <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine> - <Description>Disable firewall</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable RDP</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off sidebar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From 553bbab3db70d126fc521c94ab9162ee7d6daa73 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 May 2024 20:12:59 +0200 Subject: [PATCH 209/505] feat: Increase default screen resolution (#521) --- assets/win10x64-enterprise-eval.xml | 7 +- assets/win10x64-enterprise.xml | 7 +- assets/win10x64-iot.xml | 7 +- assets/win10x64-ltsc.xml | 7 +- assets/win10x64.xml | 7 +- assets/win11x64-enterprise-eval.xml | 7 +- assets/win11x64-enterprise.xml | 7 +- assets/win11x64.xml | 7 +- assets/win2008r2-eval.xml | 51 ++++++--- assets/win2008r2.xml | 51 ++++++--- assets/win2012r2-eval.xml | 18 ++- assets/win2012r2.xml | 19 +++- assets/win2016-eval.xml | 7 +- assets/win2016.xml | 7 +- assets/win2019-eval.xml | 7 +- assets/win2019.xml | 7 +- assets/win2022-eval.xml | 7 +- assets/win2022.xml | 7 +- assets/win7x64-enterprise.xml | 9 +- assets/win7x64-ultimate.xml | 7 +- assets/win7x64.xml | 7 +- assets/win7x86-enterprise.xml | 7 +- assets/win7x86-ultimate.xml | 7 +- assets/win7x86.xml | 7 +- assets/win81x64-enterprise-eval.xml | 16 ++- assets/win81x64-enterprise.xml | 16 ++- assets/win81x64.xml | 16 ++- assets/winvistax64-enterprise.xml | 25 +++-- assets/winvistax64-ultimate.xml | 24 ++-- assets/winvistax64.xml | 24 ++-- assets/winvistax86-enterprise.xml | 24 ++-- assets/winvistax86-ultimate.xml | 24 ++-- assets/winvistax86.xml | 24 ++-- readme.md | 4 +- src/define.sh | 167 ++++++++++++++-------------- src/install.sh | 15 ++- 36 files changed, 457 insertions(+), 203 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index f257bbc..d2f4e6f 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -337,13 +337,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 9bb2ec1..1d7aec7 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -340,13 +340,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 198e29c..df335fe 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -346,13 +346,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index a486187..1cd924f 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -343,13 +343,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index a5e0524..fa477a7 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -340,13 +340,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index ad64df5..23a7ee3 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -355,13 +355,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index d3a379e..33fefda 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -358,13 +358,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index d7a32a1..b042b9d 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -358,13 +358,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index f2e7644..e1c7fe8 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -167,6 +167,12 @@ <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <fDenyTSConnections>false</fDenyTSConnections> </component> @@ -210,10 +216,15 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> @@ -233,76 +244,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 903f8fa..b1a0ee9 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -170,6 +170,12 @@ <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <fDenyTSConnections>false</fDenyTSConnections> </component> @@ -213,10 +219,15 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> @@ -236,76 +247,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 6bf8f49..83371ca 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -63,7 +63,7 @@ <ImageInstall> <OSImage> <InstallFrom> - <MetaData wcm:action="add"> + <MetaData wcm:action="add"> <Key>/image/index</Key> <Value>2</Value> </MetaData> @@ -246,13 +246,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> @@ -332,16 +337,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index 86e0f18..49b9ab5 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -63,7 +63,7 @@ <ImageInstall> <OSImage> <InstallFrom> - <MetaData wcm:action="add"> + <MetaData wcm:action="add"> <Key>/image/index</Key> <Value>2</Value> </MetaData> @@ -249,13 +249,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> @@ -335,16 +340,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -352,4 +362,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 53073b6..748a898 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -246,13 +246,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win2016.xml b/assets/win2016.xml index 1bdb2d9..5b89c06 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -249,13 +249,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index d19ef46..8cb0c9c 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -250,13 +250,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win2019.xml b/assets/win2019.xml index 328c021..007ee52 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -253,13 +253,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 1d86489..be1461d 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -250,13 +250,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win2022.xml b/assets/win2022.xml index 0d73a90..27d980a 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -253,13 +253,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index 538f917..6d12bd6 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -214,10 +214,15 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> @@ -264,7 +269,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index 93ecd9b..cd7a524 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -214,10 +214,15 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index 426d3d3..c4fcfe5 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -214,10 +214,15 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index 2e391ff..aaf6df1 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -214,10 +214,15 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index 10368c8..f9ca11f 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -214,10 +214,15 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index c99e4a5..88d437d 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -214,10 +214,15 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 3ea5a50..b2287fe 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -231,13 +231,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> @@ -317,16 +322,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index 432f8ff..e339292 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -234,13 +234,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> @@ -320,16 +325,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 2503c67..7d41775 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -241,13 +241,18 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> @@ -327,16 +332,21 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 78c3d50..21632c2 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -155,9 +155,14 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>false</SkipMachineOOBE> @@ -204,7 +209,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> @@ -247,26 +252,31 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_SZ /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d C:\Windows\System32\scrnsavex.scr /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -274,4 +284,3 @@ </component> </settings> </unattend> - diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index 6d9fe41..1ca5004 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -155,9 +155,14 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>false</SkipMachineOOBE> @@ -204,7 +209,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> @@ -247,26 +252,31 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_SZ /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d C:\Windows\System32\scrnsavex.scr /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index 409644e..2a1357c 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -155,9 +155,14 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>false</SkipMachineOOBE> @@ -204,7 +209,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> @@ -247,26 +252,31 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_SZ /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d C:\Windows\System32\scrnsavex.scr /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index 2104d73..e26ae98 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -155,9 +155,14 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>false</SkipMachineOOBE> @@ -204,7 +209,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> @@ -247,26 +252,31 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_SZ /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d C:\Windows\System32\scrnsavex.scr /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index 4ca700c..7cac834 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -155,9 +155,14 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>false</SkipMachineOOBE> @@ -204,7 +209,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> @@ -247,26 +252,31 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_SZ /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d C:\Windows\System32\scrnsavex.scr /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 9d6e112..0a980be 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -155,9 +155,14 @@ <PlainText>true</PlainText> </Password> </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> - <NetworkLocation>Other</NetworkLocation> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>false</SkipMachineOOBE> @@ -204,7 +209,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> @@ -247,26 +252,31 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_SZ /d 0 /f</CommandLine> <Description>Disable screensaver</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d C:\Windows\System32\scrnsavex.scr /f</CommandLine> + <Description>Disable screensaver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/readme.md b/readme.md index 41b22ab..13c575b 100644 --- a/readme.md +++ b/readme.md @@ -11,7 +11,7 @@ </div></h1> -Windows in a Docker container. +Windows inside a Docker container. ## Features @@ -205,7 +205,7 @@ kubectl apply -f kubernetes.yml * ### How do I perform a manual installation? - It's best to use the automatic installation, as it optimizes various settings to give you maximum performance and prevent common issues. + It's best to use the automatic installation, as it prevents common issues that occur when running Windows inside a virtualized environment and optimizes various settings to give you maximum performance. However, if you insist on performing the installation manually, add the following environment variable to your compose file: diff --git a/src/define.sh b/src/define.sh index d21f41e..149f08b 100644 --- a/src/define.sh +++ b/src/define.sh @@ -406,10 +406,10 @@ printEdition() { ;; *"-iot" | *"-iot-eval" ) edition="IoT" - ;; + ;; *"-ltsc" | *"-ltsc-eval" ) edition="LTSC" - ;; + ;; *"-enterprise-eval" ) edition="Enterprise (Evaluation)" ;; @@ -1901,13 +1901,34 @@ migrateFiles() { return 0 } -configXP() { +prepareLegacy() { - local dir="$1" + local iso="$1" + local dir="$2" + local file="$dir/boot.img" + + ETFS=$(basename "$file") + [ -f "$file" ] && [ -s "$file" ] && return 0 + rm -f "$file" + + local len offset + len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") + offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") + + dd "if=$iso" "of=$file" bs=2048 "count=$len" "skip=$offset" status=none && return 0 + + return 1 +} + +prepareXP() { + + local dir="$2" local arch="x86" local target="$dir/I386" local drivers="$TMP/drivers" + ETFS="[BOOT]/Boot-NoEmul.img" + if [ -d "$dir/AMD64" ]; then arch="amd64" target="$dir/AMD64" @@ -1979,84 +2000,82 @@ configXP() { key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" fi + local username="Docker" + local password="*" + [ -n "$USERNAME" ] && username="$USERNAME" + [ -n "$PASSWORD" ] && password="$PASSWORD" + find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; { echo "[Data]" - echo "AutoPartition=1" - echo "MsDosInitiated=\"0\"" - echo "UnattendedInstall=\"Yes\"" - echo "AutomaticUpdates=\"Yes\"" + echo " AutoPartition=1" + echo " MsDosInitiated=\"0\"" + echo " UnattendedInstall=\"Yes\"" + echo " AutomaticUpdates=\"Yes\"" echo "" echo "[Unattended]" - echo "UnattendSwitch=Yes" - echo "UnattendMode=FullUnattended" - echo "FileSystem=NTFS" - echo "OemSkipEula=Yes" - echo "OemPreinstall=Yes" - echo "Repartition=Yes" - echo "WaitForReboot=\"No\"" - echo "DriverSigningPolicy=\"Ignore\"" - echo "NonDriverSigningPolicy=\"Ignore\"" - echo "OemPnPDriversPath=\"Drivers\viostor;Drivers\NetKVM;Drivers\sata\"" - echo "NoWaitAfterTextMode=1" - echo "NoWaitAfterGUIMode=1" - echo "FileSystem-ConvertNTFS" - echo "ExtendOemPartition=0" - echo "Hibernation=\"No\"" + echo " UnattendSwitch=Yes" + echo " UnattendMode=FullUnattended" + echo " FileSystem=NTFS" + echo " OemSkipEula=Yes" + echo " OemPreinstall=Yes" + echo " Repartition=Yes" + echo " WaitForReboot=\"No\"" + echo " DriverSigningPolicy=\"Ignore\"" + echo " NonDriverSigningPolicy=\"Ignore\"" + echo " OemPnPDriversPath=\"Drivers\viostor;Drivers\NetKVM;Drivers\sata\"" + echo " NoWaitAfterTextMode=1" + echo " NoWaitAfterGUIMode=1" + echo " FileSystem-ConvertNTFS" + echo " ExtendOemPartition=0" + echo " Hibernation=\"No\"" echo "" echo "[GuiUnattended]" - echo "OEMSkipRegional=1" - echo "OemSkipWelcome=1" - echo "AdminPassword=*" - echo "TimeZone=0" - echo "AutoLogon=Yes" - echo "AutoLogonCount=65432" + echo " OEMSkipRegional=1" + echo " OemSkipWelcome=1" + echo " AdminPassword=$password" + echo " TimeZone=0" + echo " AutoLogon=Yes" + echo " AutoLogonCount=65432" echo "" echo "[UserData]" - echo "FullName=\"Docker\"" - echo "ComputerName=\"*\"" - echo "OrgName=\"Windows for Docker\"" - echo "ProductKey=$key" + echo " FullName=\"$username\"" + echo " ComputerName=\"*\"" + echo " OrgName=\"Windows for Docker\"" + echo " ProductKey=$key" echo "" echo "[Identification]" - echo "JoinWorkgroup = WORKGROUP" + echo " JoinWorkgroup = WORKGROUP" echo "" echo "[Networking]" - echo "InstallDefaultComponents=Yes" + echo " InstallDefaultComponents=Yes" echo "" echo "[Branding]" - echo "BrandIEUsingUnattended=Yes" + echo " BrandIEUsingUnattended=Yes" echo "" echo "[URL]" - echo "Home_Page = http://www.google.com" - echo "Search_Page = http://www.google.com" + echo " Home_Page = http://www.google.com" + echo " Search_Page = http://www.google.com" echo "" echo "[RegionalSettings]" - echo "Language=00000409" + echo " Language=00000409" echo "" echo "[TerminalServices]" - echo "AllowConnections=1" + echo " AllowConnections=1" + echo "" } | unix2dos > "$target/WINNT.SIF" { echo "Windows Registry Editor Version 5.00" echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security]" echo "\"FirstRunDisabled\"=dword:00000001" - echo "\"AntiVirusOverride\"=dword:00000001" - echo "\"FirewallOverride\"=dword:00000001" - echo "\"FirewallDisableNotify\"=dword:00000001" echo "\"UpdatesDisableNotify\"=dword:00000001" + echo "\"FirewallDisableNotify\"=dword:00000001" echo "\"AntiVirusDisableNotify\"=dword:00000001" echo "" echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wscsvc]" echo "\"Start\"=dword:00000004" echo "" - echo "[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\WindowsFirewall\StandardProfile]" - echo "\"EnableFirewall\"=dword:00000000" - echo "" - echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess]" - echo "\"Start\"=dword:00000004" - echo echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List]" echo "\"3389:TCP\"=\"3389:TCP:*:Enabled:@xpsp2res.dll,-22009\"" echo "" @@ -2070,59 +2089,39 @@ configXP() { echo "\"HideFileExt\"=dword:00000000" echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" - echo "\"DefaultUserName\"=\"Docker\"" + echo "\"DefaultUserName\"=\"$username\"" echo "\"DefaultDomainName\"=\"Dockur\"" - echo "\"AltDefaultUserName\"=\"Docker\"" + echo "\"AltDefaultUserName\"=\"$username\"" echo "\"AltDefaultDomainName\"=\"Dockur\"" echo "\"AutoAdminLogon\"=\"1\"" + echo "" + echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000]" + echo "\"DefaultSettings.BitsPerPel\"=dword:00000020" + echo "\"DefaultSettings.XResolution\"=dword:00000780" + echo "\"DefaultSettings.YResolution\"=dword:00000438" + echo "" + echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceEx]" + echo "\"ScreenSaver\"=\"reg add \\\"HKCU\\\\Control Panel\\\\Desktop\\\" /f /v \\\"SCRNSAVE.EXE\\\" /t REG_SZ /d \\\"off\\\"\"" + echo "\"ScreenSaverOff\"=\"reg add \\\"HKCU\\\\Control Panel\\\\Desktop\\\" /f /v \\\"ScreenSaveActive\\\" /t REG_SZ /d \\\"0\\\"\"" + echo "" } | unix2dos > "$dir/\$OEM\$/install.reg" { echo "Set WshShell = WScript.CreateObject(\"WScript.Shell\")" echo "Set WshNetwork = WScript.CreateObject(\"WScript.Network\")" echo "Set oMachine = GetObject(\"WinNT://\" & WshNetwork.ComputerName)" echo "Set oInfoUser = GetObject(\"WinNT://\" & WshNetwork.ComputerName & \"/Administrator,user\")" - echo "Set oUser = oMachine.MoveHere(oInfoUser.ADsPath,\"Docker\")" + echo "Set oUser = oMachine.MoveHere(oInfoUser.ADsPath,\"$username\")" + echo "" } | unix2dos > "$dir/\$OEM\$/admin.vbs" { echo "[COMMANDS]" echo "\"REGEDIT /s install.reg\"" echo "\"Wscript admin.vbs\"" + echo "" } | unix2dos > "$dir/\$OEM\$/cmdlines.txt" rm -rf "$drivers" return 0 } -prepareXP() { - - local iso="$1" - local dir="$2" - - ETFS="[BOOT]/Boot-NoEmul.img" - - [[ "$MANUAL" == [Yy1]* ]] && return 0 - configXP "$dir" && return 0 - - return 1 -} - -prepareLegacy() { - - local iso="$1" - local dir="$2" - local file="$dir/boot.img" - - ETFS=$(basename "$file") - [ -f "$file" ] && [ -s "$file" ] && return 0 - rm -f "$file" - - local len offset - len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") - offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") - - dd "if=$iso" "of=$file" bs=2048 "count=$len" "skip=$offset" status=none && return 0 - - return 1 -} - return 0 diff --git a/src/install.sh b/src/install.sh index 93a225c..5aefed4 100644 --- a/src/install.sh +++ b/src/install.sh @@ -624,7 +624,7 @@ updateXML() { local asset="$1" local language="$2" - local culture region keyboard + local culture region admin pass keyboard culture=$(getLanguage "$language" "culture") @@ -649,16 +649,21 @@ updateXML() { fi if [ -n "$USERNAME" ]; then - sed -i "s/where name=\"Docker\"/where name=\"$USERNAME\"/g" "$asset" sed -i "s/<Name>Docker<\/Name>/<Name>$USERNAME<\/Name>/g" "$asset" + sed -i "s/where name=\"Docker\"/where name=\"$USERNAME\"/g" "$asset" sed -i "s/<FullName>Docker<\/FullName>/<FullName>$USERNAME<\/FullName>/g" "$asset" sed -i "s/<Username>Docker<\/Username>/<Username>$USERNAME<\/Username>/g" "$asset" fi if [ -n "$PASSWORD" ]; then - sed -i "s/<Value>password<\/Value>/<Value>$PASSWORD<\/Value>/g" "$asset" - sed -z "s/<Password>...........<Value \/>/<Password>\n <Value>$PASSWORD<\/Value>/g" -i "$asset" - sed -z "s/<Password>...............<Value \/>/<Password>\n <Value>$PASSWORD<\/Value>/g" -i "$asset" + pass=$(printf '%s' "${PASSWORD}Password" | iconv -f utf-8 -t utf-16le | base64) + admin=$(printf '%s' "${PASSWORD}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64) + sed -i "s/<Value>password<\/Value>/<Value>$admin<\/Value>/g" "$asset" + sed -i "s/<PlainText>true<\/PlainText>/<PlainText>false<\/PlainText>/g" "$asset" + sed -z "s/<Password>...........<Value \/>/<Password>\n <Value>$pass<\/Value>/g" -i "$asset" + sed -z "s/<Password>...............<Value \/>/<Password>\n <Value>$pass<\/Value>/g" -i "$asset" + sed -z "s/<AdministratorPassword>...........<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" + sed -z "s/<AdministratorPassword>...............<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" fi return 0 From 4c940bb46902aa76dcf2c8a3c49337faa0ec4aa0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 May 2024 21:28:50 +0200 Subject: [PATCH 210/505] build: Update qemu-docker to v5.05 (#523) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 19685f0..4095a31 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.04 / / +COPY --from=qemux/qemu-docker:5.05 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 98204e54efc5cc117517c973931d026b873979df Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 20 May 2024 08:21:12 +0200 Subject: [PATCH 211/505] feat: Set Network Location to Home (#524) --- assets/win10x64-enterprise-eval.xml | 46 ++++++++++---------------- assets/win10x64-enterprise.xml | 46 ++++++++++---------------- assets/win10x64-iot.xml | 46 ++++++++++---------------- assets/win10x64-ltsc.xml | 46 ++++++++++---------------- assets/win10x64.xml | 46 ++++++++++---------------- assets/win11x64-enterprise-eval.xml | 48 +++++++++++---------------- assets/win11x64-enterprise.xml | 48 +++++++++++---------------- assets/win11x64.xml | 48 +++++++++++---------------- assets/win2008r2-eval.xml | 2 +- assets/win2008r2.xml | 2 +- assets/win2012r2-eval.xml | 37 ++++++++++----------- assets/win2012r2.xml | 37 ++++++++++----------- assets/win2016-eval.xml | 50 +++++++++++++--------------- assets/win2016.xml | 51 +++++++++++++---------------- assets/win2019-eval.xml | 51 +++++++++++++---------------- assets/win2019.xml | 51 +++++++++++++---------------- assets/win2022-eval.xml | 51 +++++++++++++---------------- assets/win2022.xml | 50 +++++++++++++--------------- assets/win7x64-enterprise.xml | 2 +- assets/win7x64-ultimate.xml | 4 +-- assets/win7x64.xml | 4 +-- assets/win7x86-enterprise.xml | 4 +-- assets/win7x86-ultimate.xml | 4 +-- assets/win7x86.xml | 4 +-- assets/win81x64-enterprise-eval.xml | 37 ++++++++++----------- assets/win81x64-enterprise.xml | 37 ++++++++++----------- assets/win81x64.xml | 37 ++++++++++----------- assets/winvistax64-enterprise.xml | 18 ++-------- assets/winvistax64-ultimate.xml | 18 ++-------- assets/winvistax64.xml | 18 ++-------- assets/winvistax86-enterprise.xml | 18 ++-------- assets/winvistax86-ultimate.xml | 18 ++-------- assets/winvistax86.xml | 18 ++-------- 33 files changed, 400 insertions(+), 597 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index d2f4e6f..d489d99 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -284,6 +284,11 @@ <Order>24</Order> <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>25</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -388,86 +393,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 1d7aec7..b4861fb 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -287,6 +287,11 @@ <Order>24</Order> <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>25</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -391,86 +396,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index df335fe..59309aa 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -293,6 +293,11 @@ <Order>24</Order> <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>25</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -397,86 +402,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 1cd924f..8a29ad6 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -290,6 +290,11 @@ <Order>24</Order> <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>25</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -394,86 +399,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index fa477a7..cf092ba 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -287,6 +287,11 @@ <Order>24</Order> <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>25</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -391,86 +396,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 23a7ee3..ff4cdd1 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -302,6 +302,11 @@ <Order>24</Order> <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>25</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -406,91 +411,76 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 33fefda..52e27e0 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -305,6 +305,11 @@ <Order>24</Order> <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>25</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -409,91 +414,76 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index b042b9d..a1c04ab 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -305,6 +305,11 @@ <Order>24</Order> <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>25</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -409,91 +414,76 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index e1c7fe8..25a019e 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -276,7 +276,7 @@ <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>10</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index b1a0ee9..ddb79a4 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -279,7 +279,7 @@ <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>10</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 83371ca..e0147c5 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -191,6 +191,15 @@ <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> @@ -297,61 +306,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>14</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>16</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index 49b9ab5..18f881a 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -194,6 +194,15 @@ <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> @@ -300,61 +309,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>14</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>16</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 748a898..7a1bea3 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -191,6 +191,15 @@ <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> @@ -297,86 +306,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016.xml b/assets/win2016.xml index 5b89c06..58e6c64 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -194,6 +194,15 @@ <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> @@ -300,86 +309,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -387,4 +381,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 8cb0c9c..8b76187 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -195,6 +195,15 @@ <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> @@ -301,86 +310,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -388,4 +382,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2019.xml b/assets/win2019.xml index 007ee52..3f5b630 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -198,6 +198,15 @@ <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> @@ -304,86 +313,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -391,4 +385,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index be1461d..75d7cf1 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -195,6 +195,15 @@ <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> @@ -301,86 +310,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -388,4 +382,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2022.xml b/assets/win2022.xml index 27d980a..15fdae0 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -198,6 +198,15 @@ <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> @@ -304,86 +313,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Cortana" /v "IsAvailable" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Disable Cortana</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index 6d12bd6..879767f 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -218,7 +218,7 @@ <ColorDepth>32</ColorDepth> <HorizontalResolution>1920</HorizontalResolution> <VerticalResolution>1080</VerticalResolution> - </Display> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index cd7a524..ad3d5d0 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -218,7 +218,7 @@ <ColorDepth>32</ColorDepth> <HorizontalResolution>1920</HorizontalResolution> <VerticalResolution>1080</VerticalResolution> - </Display> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> @@ -269,7 +269,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index c4fcfe5..14765d2 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -218,7 +218,7 @@ <ColorDepth>32</ColorDepth> <HorizontalResolution>1920</HorizontalResolution> <VerticalResolution>1080</VerticalResolution> - </Display> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> @@ -269,7 +269,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index aaf6df1..0aa7779 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -218,7 +218,7 @@ <ColorDepth>32</ColorDepth> <HorizontalResolution>1920</HorizontalResolution> <VerticalResolution>1080</VerticalResolution> - </Display> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> @@ -269,7 +269,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index f9ca11f..bb002d8 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -218,7 +218,7 @@ <ColorDepth>32</ColorDepth> <HorizontalResolution>1920</HorizontalResolution> <VerticalResolution>1080</VerticalResolution> - </Display> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> @@ -269,7 +269,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index 88d437d..8f541ec 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -218,7 +218,7 @@ <ColorDepth>32</ColorDepth> <HorizontalResolution>1920</HorizontalResolution> <VerticalResolution>1080</VerticalResolution> - </Display> + </Display> <OOBE> <HideEULAPage>true</HideEULAPage> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> @@ -269,7 +269,7 @@ <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index b2287fe..c2a869d 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -182,6 +182,15 @@ <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <fDenyTSConnections>false</fDenyTSConnections> </component> @@ -282,61 +291,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>14</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>16</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index e339292..547ff95 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -185,6 +185,15 @@ <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <fDenyTSConnections>false</fDenyTSConnections> </component> @@ -285,61 +294,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>14</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>16</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 7d41775..7e76d9b 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -192,6 +192,15 @@ <UILanguage>en-US</UILanguage> <UserLocale>en-US</UserLocale> </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> <fDenyTSConnections>false</fDenyTSConnections> </component> @@ -292,61 +301,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>7</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>8</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Disable Network Discovery popup</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>9</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>11</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>14</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>16</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 21632c2..2cb7593 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -20,29 +20,17 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>100</Size> - </CreatePartition> - <CreatePartition wcm:action="add"> - <Order>2</Order> - <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <ModifyPartition wcm:action="add"> - <Format>NTFS</Format> - <Label>System Reserved</Label> - <Order>1</Order> - <Active>true</Active> - <PartitionID>1</PartitionID> - </ModifyPartition> <ModifyPartition wcm:action="add"> <Active>true</Active> <Format>NTFS</Format> <Label>Windows</Label> <Letter>C</Letter> - <Order>2</Order> - <PartitionID>2</PartitionID> + <Order>1</Order> + <PartitionID>1</PartitionID> </ModifyPartition> </ModifyPartitions> </Disk> @@ -57,7 +45,7 @@ </InstallFrom> <InstallTo> <DiskID>0</DiskID> - <PartitionID>2</PartitionID> + <PartitionID>1</PartitionID> </InstallTo> <WillShowUI>OnError</WillShowUI> <InstallToAvailablePartition>false</InstallToAvailablePartition> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index 1ca5004..4b1d6c5 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -20,29 +20,17 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>100</Size> - </CreatePartition> - <CreatePartition wcm:action="add"> - <Order>2</Order> - <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <ModifyPartition wcm:action="add"> - <Format>NTFS</Format> - <Label>System Reserved</Label> - <Order>1</Order> - <Active>true</Active> - <PartitionID>1</PartitionID> - </ModifyPartition> <ModifyPartition wcm:action="add"> <Active>true</Active> <Format>NTFS</Format> <Label>Windows</Label> <Letter>C</Letter> - <Order>2</Order> - <PartitionID>2</PartitionID> + <Order>1</Order> + <PartitionID>1</PartitionID> </ModifyPartition> </ModifyPartitions> </Disk> @@ -57,7 +45,7 @@ </InstallFrom> <InstallTo> <DiskID>0</DiskID> - <PartitionID>2</PartitionID> + <PartitionID>1</PartitionID> </InstallTo> <WillShowUI>OnError</WillShowUI> <InstallToAvailablePartition>false</InstallToAvailablePartition> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index 2a1357c..0f53ffc 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -20,29 +20,17 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>100</Size> - </CreatePartition> - <CreatePartition wcm:action="add"> - <Order>2</Order> - <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <ModifyPartition wcm:action="add"> - <Format>NTFS</Format> - <Label>System Reserved</Label> - <Order>1</Order> - <Active>true</Active> - <PartitionID>1</PartitionID> - </ModifyPartition> <ModifyPartition wcm:action="add"> <Active>true</Active> <Format>NTFS</Format> <Label>Windows</Label> <Letter>C</Letter> - <Order>2</Order> - <PartitionID>2</PartitionID> + <Order>1</Order> + <PartitionID>1</PartitionID> </ModifyPartition> </ModifyPartitions> </Disk> @@ -57,7 +45,7 @@ </InstallFrom> <InstallTo> <DiskID>0</DiskID> - <PartitionID>2</PartitionID> + <PartitionID>1</PartitionID> </InstallTo> <WillShowUI>OnError</WillShowUI> <InstallToAvailablePartition>false</InstallToAvailablePartition> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index e26ae98..d1e1929 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -20,29 +20,17 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>100</Size> - </CreatePartition> - <CreatePartition wcm:action="add"> - <Order>2</Order> - <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <ModifyPartition wcm:action="add"> - <Format>NTFS</Format> - <Label>System Reserved</Label> - <Order>1</Order> - <Active>true</Active> - <PartitionID>1</PartitionID> - </ModifyPartition> <ModifyPartition wcm:action="add"> <Active>true</Active> <Format>NTFS</Format> <Label>Windows</Label> <Letter>C</Letter> - <Order>2</Order> - <PartitionID>2</PartitionID> + <Order>1</Order> + <PartitionID>1</PartitionID> </ModifyPartition> </ModifyPartitions> </Disk> @@ -57,7 +45,7 @@ </InstallFrom> <InstallTo> <DiskID>0</DiskID> - <PartitionID>2</PartitionID> + <PartitionID>1</PartitionID> </InstallTo> <WillShowUI>OnError</WillShowUI> <InstallToAvailablePartition>false</InstallToAvailablePartition> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index 7cac834..a8425b7 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -20,29 +20,17 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>100</Size> - </CreatePartition> - <CreatePartition wcm:action="add"> - <Order>2</Order> - <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <ModifyPartition wcm:action="add"> - <Format>NTFS</Format> - <Label>System Reserved</Label> - <Order>1</Order> - <Active>true</Active> - <PartitionID>1</PartitionID> - </ModifyPartition> <ModifyPartition wcm:action="add"> <Active>true</Active> <Format>NTFS</Format> <Label>Windows</Label> <Letter>C</Letter> - <Order>2</Order> - <PartitionID>2</PartitionID> + <Order>1</Order> + <PartitionID>1</PartitionID> </ModifyPartition> </ModifyPartitions> </Disk> @@ -57,7 +45,7 @@ </InstallFrom> <InstallTo> <DiskID>0</DiskID> - <PartitionID>2</PartitionID> + <PartitionID>1</PartitionID> </InstallTo> <WillShowUI>OnError</WillShowUI> <InstallToAvailablePartition>false</InstallToAvailablePartition> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 0a980be..7656474 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -20,29 +20,17 @@ <CreatePartition wcm:action="add"> <Order>1</Order> <Type>Primary</Type> - <Size>100</Size> - </CreatePartition> - <CreatePartition wcm:action="add"> - <Order>2</Order> - <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> - <ModifyPartition wcm:action="add"> - <Format>NTFS</Format> - <Label>System Reserved</Label> - <Order>1</Order> - <Active>true</Active> - <PartitionID>1</PartitionID> - </ModifyPartition> <ModifyPartition wcm:action="add"> <Active>true</Active> <Format>NTFS</Format> <Label>Windows</Label> <Letter>C</Letter> - <Order>2</Order> - <PartitionID>2</PartitionID> + <Order>1</Order> + <PartitionID>1</PartitionID> </ModifyPartition> </ModifyPartitions> </Disk> @@ -57,7 +45,7 @@ </InstallFrom> <InstallTo> <DiskID>0</DiskID> - <PartitionID>2</PartitionID> + <PartitionID>1</PartitionID> </InstallTo> <WillShowUI>OnError</WillShowUI> <InstallToAvailablePartition>false</InstallToAvailablePartition> From b1f10aa546af1667855c32b81792adcb886ae440 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 22 May 2024 00:53:19 +0200 Subject: [PATCH 212/505] fix: Custom URL parsing (#528) --- Dockerfile | 2 +- src/define.sh | 14 ++++++-------- src/entry.sh | 1 - src/install.sh | 8 ++++---- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4095a31..760e1f1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.05 / / +COPY --from=qemux/qemu-docker:5.06 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/define.sh b/src/define.sh index 149f08b..06ded9a 100644 --- a/src/define.sh +++ b/src/define.sh @@ -17,8 +17,6 @@ PLATFORM="x64" parseVersion() { - VERSION="${VERSION/\//}" - if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then VERSION="${VERSION:1:-1}" fi @@ -295,9 +293,9 @@ getLanguage() { parseLanguage() { - REGION="${REGION/_/-/}" - KEYBOARD="${KEYBOARD/_/-/}" - LANGUAGE="${LANGUAGE/_/-/}" + REGION="${REGION//_/-/}" + KEYBOARD="${KEYBOARD//_/-/}" + LANGUAGE="${LANGUAGE//_/-/}" [ -z "$LANGUAGE" ] && LANGUAGE="en" @@ -443,7 +441,7 @@ fromFile() { local file="${1,,}" local arch="${PLATFORM,,}" - case "${file/ /_}" in + case "${file// /_}" in *"_x64_"* | *"_x64."*) arch="x64" ;; @@ -455,7 +453,7 @@ fromFile() { ;; esac - case "${file/ /_}" in + case "${file// /_}" in "win7"* | "win_7"* | *"windows7"* | *"windows_7"* ) id="win7${arch}" ;; @@ -2062,7 +2060,7 @@ prepareXP() { echo "" echo "[TerminalServices]" echo " AllowConnections=1" - echo "" + echo "" } | unix2dos > "$target/WINNT.SIF" { echo "Windows Registry Editor Version 5.00" diff --git a/src/entry.sh b/src/entry.sh index 20ec453..24bdf50 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -24,7 +24,6 @@ cd /run trap - ERR info "Booting ${APP}${BOOT_DESC}..." -[[ "$DEBUG" == [Yy1]* ]] && echo "Arguments: $ARGS" && echo { qemu-system-x86_64 ${ARGS:+ $ARGS} >"$QEMU_OUT" 2>"$QEMU_LOG"; rc=$?; } || : (( rc != 0 )) && error "$(<"$QEMU_LOG")" && exit 15 diff --git a/src/install.sh b/src/install.sh index 5aefed4..9f3bba2 100644 --- a/src/install.sh +++ b/src/install.sh @@ -65,7 +65,7 @@ startInstall() { if [ -z "$CUSTOM" ]; then - local file="${VERSION/\//}.iso" + local file="${VERSION//\//}.iso" if [[ "${VERSION,,}" == "http"* ]]; then @@ -80,7 +80,7 @@ startInstall() { language="${language%%-*}" if [ -n "$language" ] && [[ "${language,,}" != "en" ]]; then - file="${VERSION/\//}_${language,,}.iso" + file="${VERSION//\//}_${language,,}.iso" fi fi @@ -675,8 +675,8 @@ updateImage() { local asset="$2" local language="$3" local file="autounattend.xml" - local org="${file/.xml/.org}" - local dat="${file/.xml/.dat}" + local org="${file//.xml/.org}" + local dat="${file//.xml/.dat}" local desc path src loc xml index result [[ "${DETECTED,,}" == "winxp"* ]] && return 0 From f8cff00334a120d90d607c8b21c00ebfb440864b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 22 May 2024 07:54:46 +0200 Subject: [PATCH 213/505] docs: Docker CLI example (#530) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 13c575b..e264a0f 100644 --- a/readme.md +++ b/readme.md @@ -49,7 +49,7 @@ services: Via Docker CLI: ```bash -docker run -it --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows +docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows ``` Via Kubernetes: From b32e66bc1db277a2d4dff316d71964eb8465d227 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 23 May 2024 00:16:02 +0200 Subject: [PATCH 214/505] fix: Password encoding failure (#532) --- Dockerfile | 2 +- src/install.sh | 56 ++++++++++++++++---------------------------------- 2 files changed, 19 insertions(+), 39 deletions(-) diff --git a/Dockerfile b/Dockerfile index 760e1f1..83773ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.06 / / +COPY --from=qemux/qemu-docker:5.07 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/install.sh b/src/install.sh index 9f3bba2..52552b9 100644 --- a/src/install.sh +++ b/src/install.sh @@ -7,17 +7,6 @@ FB="falling back to manual installation!" ETFS="boot/etfsboot.com" EFISYS="efi/microsoft/boot/efisys_noprompt.bin" -hasDisk() { - - [ -b "/disk1" ] && return 0 - [ -b "/dev/disk1" ] && return 0 - [ -b "${DEVICE:-}" ] && return 0 - [ -s "$STORAGE/data.img" ] && return 0 - [ -s "$STORAGE/data.qcow2" ] && return 0 - - return 1 -} - skipInstall() { local iso="$1" @@ -187,28 +176,22 @@ abortInstall() { detectCustom() { - local file="" - local size base - + local file base CUSTOM="" - if [[ "${VERSION,,}" != "http"* ]]; then - base="${VERSION/\/storage\//}" - [[ "$base" == "."* ]] && base="${file:1}" - [[ "$base" == *"/"* ]] && base="" - [ -n "$base" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$base" | head -n 1) + file=$(find / -maxdepth 1 -type f -iname custom.iso | head -n 1) + [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso | head -n 1) + + if [ ! -s "$file" ] && [[ "${VERSION,,}" != "http"* ]]; then + base=$(basename "$VERSION") + file="$STORAGE/$base" fi - [ -z "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso | head -n 1) - [ -z "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img | head -n 1) - - base="/custom.iso" - [ -f "$base" ] && [ -s "$base" ] && file="$base" - if [ ! -f "$file" ] || [ ! -s "$file" ]; then return 0 fi + local size size="$(stat -c%s "$file")" [ -z "$size" ] || [[ "$size" == "0" ]] && return 0 @@ -624,7 +607,7 @@ updateXML() { local asset="$1" local language="$2" - local culture region admin pass keyboard + local culture region user admin pass keyboard culture=$(getLanguage "$language" "culture") @@ -648,16 +631,18 @@ updateXML() { sed -i "s/<InputLocale>0409:00000409<\/InputLocale>/<InputLocale>$keyboard<\/InputLocale>/g" "$asset" fi - if [ -n "$USERNAME" ]; then - sed -i "s/<Name>Docker<\/Name>/<Name>$USERNAME<\/Name>/g" "$asset" - sed -i "s/where name=\"Docker\"/where name=\"$USERNAME\"/g" "$asset" - sed -i "s/<FullName>Docker<\/FullName>/<FullName>$USERNAME<\/FullName>/g" "$asset" - sed -i "s/<Username>Docker<\/Username>/<Username>$USERNAME<\/Username>/g" "$asset" + user=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') + + if [ -n "$user" ]; then + sed -i "s/<Name>Docker<\/Name>/<Name>$user<\/Name>/g" "$asset" + sed -i "s/where name=\"Docker\"/where name=\"$user\"/g" "$asset" + sed -i "s/<FullName>Docker<\/FullName>/<FullName>$user<\/FullName>/g" "$asset" + sed -i "s/<Username>Docker<\/Username>/<Username>$user<\/Username>/g" "$asset" fi if [ -n "$PASSWORD" ]; then - pass=$(printf '%s' "${PASSWORD}Password" | iconv -f utf-8 -t utf-16le | base64) - admin=$(printf '%s' "${PASSWORD}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64) + pass=$(printf '%s' "${PASSWORD}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0) + admin=$(printf '%s' "${PASSWORD}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0) sed -i "s/<Value>password<\/Value>/<Value>$admin<\/Value>/g" "$asset" sed -i "s/<PlainText>true<\/PlainText>/<PlainText>false<\/PlainText>/g" "$asset" sed -z "s/<Password>...........<Value \/>/<Password>\n <Value>$pass<\/Value>/g" -i "$asset" @@ -894,11 +879,6 @@ bootWindows() { rm -rf "$TMP" - if [ ! -f "$BOOT" ] || [ ! -s "$BOOT" ]; then - BOOT="/custom.iso" - [ ! -f "$BOOT" ] && BOOT="${STORAGE}$BOOT" - fi - [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then From 0971fb74928f059e2769dd90961afa36f621cf97 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 23 May 2024 02:38:21 +0200 Subject: [PATCH 215/505] feat: Enable secure boot on multi-socket systems (#535) --- src/install.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/install.sh b/src/install.sh index 52552b9..558b10e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -146,6 +146,11 @@ finishInstall() { echo "$BOOT_MODE" > "$STORAGE/windows.mode" 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" + fi fi fi From 6659342a3725e94ff368dcbdd2871de0888ae9b3 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 25 May 2024 14:01:29 +0200 Subject: [PATCH 216/505] docs: Updated issue templates (#541) --- .github/ISSUE_TEMPLATE/1-issue.yml | 27 ++------------------------- .github/ISSUE_TEMPLATE/2-feature.yml | 7 ------- .github/ISSUE_TEMPLATE/3-bug.yml | 27 ++------------------------- 3 files changed, 4 insertions(+), 57 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/1-issue.yml b/.github/ISSUE_TEMPLATE/1-issue.yml index 92e235c..68f19b7 100644 --- a/.github/ISSUE_TEMPLATE/1-issue.yml +++ b/.github/ISSUE_TEMPLATE/1-issue.yml @@ -1,35 +1,12 @@ name: "\U0001F6A8 Technical issue" description: When you're experiencing problems using the container body: - - type: checkboxes - attributes: - label: Is there no existing issue for this? - description: Please search to see if no solution was already provided before. - options: - - label: I have searched the existing issues - required: true - - type: input - id: cpu - attributes: - label: Machine specifications - description: The processor and RAM amount in your machine. - placeholder: e.g. Intel N5105 / 16 GB - validations: - required: true - type: input id: os attributes: label: Operating system - description: The distribution and kernel version (as shown by `uname -a`). - placeholder: e.g. Ubuntu 24.04 / Kernel 6.8.0-22-generic - validations: - required: true - - type: input - id: docker - attributes: - label: Docker version - description: The version of the Docker engine (as shown by `docker -v`). - placeholder: e.g. 26.0.1 + description: Your Linux distribution (can be shown by `lsb_release -a`). + placeholder: e.g. Ubuntu 24.04 validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/2-feature.yml b/.github/ISSUE_TEMPLATE/2-feature.yml index 5c4a248..eb95b34 100644 --- a/.github/ISSUE_TEMPLATE/2-feature.yml +++ b/.github/ISSUE_TEMPLATE/2-feature.yml @@ -3,13 +3,6 @@ description: Suggest an idea for improving the container title: "[Feature]: " labels: ["enhancement"] body: - - type: checkboxes - attributes: - label: Is there no existing feature request for this? - description: Please search to see if the feature was not already requested before. - options: - - label: I have searched the existing feature requests - required: true - type: textarea id: problem attributes: diff --git a/.github/ISSUE_TEMPLATE/3-bug.yml b/.github/ISSUE_TEMPLATE/3-bug.yml index ca77c2d..131742c 100644 --- a/.github/ISSUE_TEMPLATE/3-bug.yml +++ b/.github/ISSUE_TEMPLATE/3-bug.yml @@ -3,35 +3,12 @@ description: Create a report to help us improve the container title: "[Bug]: " labels: ["bug"] body: - - type: checkboxes - attributes: - label: Is there no existing bug report for this? - description: Please search to see if the bug was not already reported before. - options: - - label: I have searched the existing bug reports - required: true - - type: input - id: cpu - attributes: - label: Machine specifications - description: The processor and RAM amount in your machine. - placeholder: e.g. Intel N5105 / 16 GB - validations: - required: true - type: input id: os attributes: label: Operating system - description: The distribution and kernel version (as shown by `uname -a`). - placeholder: e.g. Ubuntu 24.04 / Kernel 6.8.0-22-generic - validations: - required: true - - type: input - id: docker - attributes: - label: Docker version - description: The version of the Docker engine (as shown by `docker -v`). - placeholder: e.g. 26.0.1 + description: Your Linux distribution (can be shown by `lsb_release -a`). + placeholder: e.g. Ubuntu 24.04 validations: required: true - type: textarea From a96941c63ed2082c452fb9bda9e854cace57e4e4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 27 May 2024 12:32:55 +0200 Subject: [PATCH 217/505] fix: Remove WinPE driver section (#544) --- assets/win10x64-enterprise-eval.xml | 43 ----------------------------- assets/win10x64-enterprise.xml | 43 ----------------------------- assets/win10x64-iot.xml | 43 ----------------------------- assets/win10x64-ltsc.xml | 43 ----------------------------- assets/win10x64.xml | 43 ----------------------------- assets/win11x64-enterprise-eval.xml | 43 ----------------------------- assets/win11x64-enterprise.xml | 43 ----------------------------- assets/win11x64.xml | 43 ----------------------------- assets/win2008r2-eval.xml | 34 ----------------------- assets/win2008r2.xml | 34 ----------------------- assets/win2012r2-eval.xml | 43 ----------------------------- assets/win2012r2.xml | 43 ----------------------------- assets/win2016-eval.xml | 43 ----------------------------- assets/win2016.xml | 43 ----------------------------- assets/win2019-eval.xml | 43 ----------------------------- assets/win2019.xml | 43 ----------------------------- assets/win2022-eval.xml | 43 ----------------------------- assets/win2022.xml | 43 ----------------------------- assets/win7x64-enterprise.xml | 34 ----------------------- assets/win7x64-ultimate.xml | 34 ----------------------- assets/win7x64.xml | 34 ----------------------- assets/win7x86-enterprise.xml | 34 ----------------------- assets/win7x86-ultimate.xml | 34 ----------------------- assets/win7x86.xml | 34 ----------------------- assets/win81x64-enterprise-eval.xml | 43 ----------------------------- assets/win81x64-enterprise.xml | 43 ----------------------------- assets/win81x64.xml | 43 ----------------------------- assets/winvistax64-enterprise.xml | 13 --------- assets/winvistax64-ultimate.xml | 13 --------- assets/winvistax64.xml | 13 --------- assets/winvistax86-enterprise.xml | 13 --------- assets/winvistax86-ultimate.xml | 13 --------- assets/winvistax86.xml | 13 --------- 33 files changed, 1167 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index d489d99..df17cbe 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -86,49 +86,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\w10\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index b4861fb..5b60828 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -89,49 +89,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\w10\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 59309aa..9516684 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -95,49 +95,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\w10\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 8a29ad6..108db1f 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -92,49 +92,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\w10\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index cf092ba..0b19f99 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -89,49 +89,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\w10\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index ff4cdd1..c0045d3 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -104,49 +104,6 @@ </RunSynchronousCommand> </RunSynchronous> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\w11\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 52e27e0..9800436 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -107,49 +107,6 @@ </RunSynchronousCommand> </RunSynchronous> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\w11\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index a1c04ab..4877868 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -107,49 +107,6 @@ </RunSynchronousCommand> </RunSynchronous> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\w11\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\w11\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index 25a019e..ed35737 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -81,40 +81,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k8R2\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index ddb79a4..bd75078 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -84,40 +84,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k8R2\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k8R2\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index e0147c5..fcb7c32 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -94,49 +94,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\2k16\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index 18f881a..dea2c37 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -97,49 +97,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\2k16\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 7a1bea3..66fc244 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -94,49 +94,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\2k16\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win2016.xml b/assets/win2016.xml index 58e6c64..1336e3f 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -97,49 +97,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\2k16\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\2k16\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 8b76187..e9aebfd 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -94,49 +94,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\2k19\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win2019.xml b/assets/win2019.xml index 3f5b630..aa43463 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -97,49 +97,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\2k19\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\2k19\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 75d7cf1..782752e 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -94,49 +94,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\2k22\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win2022.xml b/assets/win2022.xml index 15fdae0..3b61f90 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -97,49 +97,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\2k22\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\2k22\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index 879767f..14c4060 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -85,40 +85,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w8\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w7\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index ad3d5d0..f3c1ae3 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -85,40 +85,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w8\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w7\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index 14765d2..b9f2908 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -85,40 +85,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w8\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w7\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w7\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index 0aa7779..ef606e5 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -85,40 +85,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w8\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w7\x86</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index bb002d8..f0748cd 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -85,40 +85,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w8\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w7\x86</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index 8f541ec..c5cd323 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -85,40 +85,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w8\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w7\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w7\x86</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index c2a869d..2fe8c73 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -86,49 +86,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\w10\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index 547ff95..d6c72dc 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -89,49 +89,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\w10\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 7e76d9b..e5e268e 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -96,49 +96,6 @@ <OptIn>false</OptIn> </Diagnostics> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\Balloon\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="4"> - <Path>D:\pvpanic\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="5"> - <Path>D:\qemupciserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="6"> - <Path>D:\qxldod\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="7"> - <Path>D:\vioinput\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="8"> - <Path>D:\viorng\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="9"> - <Path>D:\vioscsi\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="10"> - <Path>D:\vioserial\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="11"> - <Path>D:\viogpudo\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="12"> - <Path>D:\sriov\w10\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="13"> - <Path>D:\viofs\w10\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 2cb7593..50527a0 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -60,19 +60,6 @@ </ProductKey> </UserData> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k8\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k8\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\vioscsi\2k8\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index 4b1d6c5..14c627d 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -60,19 +60,6 @@ </ProductKey> </UserData> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k8\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k8\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\vioscsi\2k8\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index 0f53ffc..f753ea3 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -60,19 +60,6 @@ </ProductKey> </UserData> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k8\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k8\amd64</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\vioscsi\2k8\amd64</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index d1e1929..d087355 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -60,19 +60,6 @@ </ProductKey> </UserData> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k8\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k8\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\vioscsi\2k8\x86</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index a8425b7..417722e 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -60,19 +60,6 @@ </ProductKey> </UserData> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k8\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k8\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\vioscsi\2k8\x86</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 7656474..172e5dd 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -60,19 +60,6 @@ </ProductKey> </UserData> </component> - <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> - <DriverPaths> - <PathAndCredentials wcm:action="add" wcm:keyValue="1"> - <Path>D:\viostor\2k8\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="2"> - <Path>D:\NetKVM\2k8\x86</Path> - </PathAndCredentials> - <PathAndCredentials wcm:action="add" wcm:keyValue="3"> - <Path>D:\vioscsi\2k8\x86</Path> - </PathAndCredentials> - </DriverPaths> - </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> From fd83861e7dbdb39817bbe172ba03b3365d687064 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 27 May 2024 12:40:19 +0200 Subject: [PATCH 218/505] feat: Improved installation (#545) --- Dockerfile | 5 +- assets/win11x64-iot.xml | 453 +++++++++++++++++++++++++++++++++++++++ assets/win11x64-ltsc.xml | 453 +++++++++++++++++++++++++++++++++++++++ readme.md | 65 ++---- src/define.sh | 128 ++++++++--- src/entry.sh | 2 +- src/install.sh | 391 +++++++++++++++++++++++---------- src/mido.sh | 185 ++++++++++------ src/power.sh | 26 ++- 9 files changed, 1437 insertions(+), 271 deletions(-) create mode 100644 assets/win11x64-iot.xml create mode 100644 assets/win11x64-ltsc.xml diff --git a/Dockerfile b/Dockerfile index 83773ce..7d6cbd3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.07 / / +COPY --from=qemux/qemu-docker:5.08 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" @@ -14,6 +14,7 @@ RUN set -eu && \ 7zip \ wsdd \ samba \ + xz-utils \ wimtools \ dos2unix \ cabextract \ @@ -27,7 +28,7 @@ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd -ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.248/virtio-win-0.1.248.iso /run/drivers.iso +ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.248/virtio-win-0.1.248.tar.xz /drivers.txz EXPOSE 8006 3389 VOLUME /storage diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml new file mode 100644 index 0000000..cf49f4e --- /dev/null +++ b/assets/win11x64-iot.xml @@ -0,0 +1,453 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/image/index</Key> + <Value>2</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\MoSetup" /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>5</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>6</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>7</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>8</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>9</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>10</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>11</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>12</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>13</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>14</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>15</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>16</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>17</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>18</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>19</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>23</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>24</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>25</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="auditSystem" /> + <settings pass="auditUser" /> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml new file mode 100644 index 0000000..16ec029 --- /dev/null +++ b/assets/win11x64-ltsc.xml @@ -0,0 +1,453 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/image/index</Key> + <Value>1</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\MoSetup" /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>5</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>6</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>7</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>8</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>9</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>10</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>11</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>12</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>13</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>14</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>15</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>16</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>17</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>18</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>19</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>23</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>24</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>25</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="auditSystem" /> + <settings pass="auditUser" /> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/readme.md b/readme.md index e264a0f..44d461a 100644 --- a/readme.md +++ b/readme.md @@ -87,12 +87,12 @@ kubectl apply -f kubernetes.yml |---|---|---| | `win11` | Windows 11 Pro | 6.4 GB | | `win11e` | Windows 11 Enterprise | 5.8 GB | - | `win10` | Windows 10 Pro | 5.8 GB | + | `win10` | Windows 10 Pro | 5.7 GB | | `ltsc10` | Windows 10 LTSC | 4.6 GB | | `win10e` | Windows 10 Enterprise | 5.2 GB | |||| - | `win8` | Windows 8.1 Pro | 4.2 GB | - | `win8e` | Windows 8.1 Enterprise | 3.8 GB | + | `win8` | Windows 8.1 Pro | 4.0 GB | + | `win8e` | Windows 8.1 Enterprise | 3.7 GB | | `win7` | Windows 7 Enterprise | 3.0 GB | | `vista` | Windows Vista Enterprise | 3.0 GB | | `winxp` | Windows XP Professional | 0.6 GB | @@ -179,22 +179,9 @@ kubectl apply -f kubernetes.yml Replace the example path `/home/user/example.iso` with the filename of your desired ISO file, the value of `VERSION` will be ignored in this case. -* ### How do I customize the installation? - - If you want to modify the settings used during the automatic installation, you can do this by editing the answer file corresponding to your Windows edition, for example [win11x64.xml](https://raw.githubusercontent.com/dockur/windows/master/assets/win11x64.xml) in the case of Windows 11 Pro. - - Apply your modifications to it, and add this line to your compose file: - - ```yaml - volumes: - - /home/user/example.xml:/custom.xml - ``` - - Replace the example path `/home/user/example.xml` with the filename of the modified XML file. - * ### How do I run a script after installation? - To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with other files it needs (programs to install for example). Then bind it in your compose file like this: + To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). Then bind that folder in your compose file like this: ```yaml volumes: @@ -205,7 +192,7 @@ kubectl apply -f kubernetes.yml * ### How do I perform a manual installation? - It's best to use the automatic installation, as it prevents common issues that occur when running Windows inside a virtualized environment and optimizes various settings to give you maximum performance. + It's best to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment. However, if you insist on performing the installation manually, add the following environment variable to your compose file: @@ -214,32 +201,6 @@ kubectl apply -f kubernetes.yml MANUAL: "Y" ``` - Then follow these steps: - - - Start the container and connect to [port 8006](http://localhost:8006) of the container in your web browser. After the download is finished, you will see the Windows installation screen. - - - Start the installation by clicking `Install now`. On the next screen, press 'OK' when prompted to `Load driver`. - - - Select the `VirtIO SCSI` driver from the list that matches your Windows version. So for Windows 11, select `D:\amd64\w11\vioscsi.inf` and click 'Next'. - - - Accept the license agreement and select your preferred Windows edition, like Home or Pro. - - - Choose `Custom: Install Windows only (advanced)`, and click `Load driver` on the next screen. - - - Select 'Browse' and navigate to the `D:\NetKVM\w11\amd64` folder, and click 'OK'. - - - Select the `VirtIO Ethernet Adapter` from the list and click 'Next'. - - - Select `Drive 0` and click 'Next'. - - - Wait until Windows finishes copying files and completes the installation. - - - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (`E:\`). - - - Double-click on `virtio-win-gt-x64.msi` and proceed to install the VirtIO drivers. - - Enjoy your brand new machine, and don't forget to star this repo! - * ### How do I verify if my system supports KVM? To verify if your system supports KVM, run the following commands: @@ -251,11 +212,11 @@ kubectl apply -f kubernetes.yml If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. -* ### How do I increase the amount of CPU or RAM? +* ### How do I change the amount of CPU or RAM? - By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. + By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM. - If there arises a need to increase this, add the following environment variables: + If you want to adjust this, you can specify the desired amount using the following environment variables: ```yaml environment: @@ -265,12 +226,14 @@ kubectl apply -f kubernetes.yml * ### How do I configure the username and password? - By default, a user called `Docker` is created during installation with an empty password. You can change these credentials in your compose file: + By default, a user called `Docker` is created during the installation, with an empty password. + + If you want to use different credentials, you can change them in your compose file: ```yaml environment: - USERNAME: "john" - PASSWORD: "secret" + USERNAME: "bill" + PASSWORD: "gates" ``` * ### How do I connect using RDP? @@ -279,7 +242,7 @@ kubectl apply -f kubernetes.yml So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `Docker` and by leaving the password empty. - There is a good RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. + There is a RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. * ### How do I assign an individual IP address to the container? diff --git a/src/define.sh b/src/define.sh index 06ded9a..dad5cee 100644 --- a/src/define.sh +++ b/src/define.sh @@ -105,6 +105,10 @@ parseVersion() { VERSION="win10x64-enterprise-iot-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-iot" ;; + "ltsc11" | "11ltsc" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + VERSION="win11x64-enterprise-ltsc-eval" + [ -z "$DETECTED" ] && DETECTED="win11x64-iot" + ;; "ltsc10" | "10ltsc" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) VERSION="win10x64-enterprise-ltsc-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" @@ -358,6 +362,10 @@ printVersion() { "win10"* ) desc="Windows 10" ;; "win11"* ) desc="Windows 11" ;; "winxp"* ) desc="Windows XP" ;; + "win9x"* ) desc="Windows ME" ;; + "win98"* ) desc="Windows 98" ;; + "win95"* ) desc="Windows 95" ;; + "win2k"* ) desc="Windows 2000" ;; "winvista"* ) desc="Windows Vista" ;; "win2025"* ) desc="Windows Server 2025" ;; "win2022"* ) desc="Windows Server 2022" ;; @@ -556,19 +564,10 @@ getVersion() { *" enterprise"* ) id="$id-enterprise" ;; esac ;; - "win10"* ) - case "${name,,}" in - *" iot"* ) id="$id-iot" ;; - *" ltsc"* ) id="$id-ltsc" ;; - *" home"* ) id="$id-home" ;; - *" education"* ) id="$id-education" ;; - *" enterprise evaluation"* ) id="$id-enterprise-eval" ;; - *" enterprise"* ) id="$id-enterprise" ;; - esac - ;; - "win11"* ) + "win10"* | "win11"* ) case "${name,,}" in *" iot"* ) id="$id-iot" ;; + *" ltsc"* ) id="$id-ltsc" ;; *" home"* ) id="$id-home" ;; *" education"* ) id="$id-education" ;; *" enterprise evaluation"* ) id="$id-enterprise-eval" ;; @@ -629,6 +628,14 @@ getMido() { size=6209064960 sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c" ;; + "win11x64-enterprise-ltsc-eval" ) + size=4428627968 + sum="8abf91c9cd408368dc73aab3425d5e3c02dae74900742072eb5c750fc637c195" + ;; + "win11x64-enterprise-iot-eval" ) + size=4428627968 + sum="8abf91c9cd408368dc73aab3425d5e3c02dae74900742072eb5c750fc637c195" + ;; "win10x64" ) size=6140975104 sum="a6f470ca6d331eb353b815c043e327a347f594f37ff525f17764738fe812852e" @@ -1034,6 +1041,18 @@ getLink4() { "zh" | "zh-"* ) url="zh-cn_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_3db5a62b.iso" ;; esac ;; + "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + size=4821989376 + sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + url="26100.1.240331-1435.ge_release_CLIENTENTERPRISE_OEM_x64FRE_en-us.iso" + ;; + "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + size=4821989376 + sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + url="26100.1.240331-1435.ge_release_CLIENTENTERPRISE_OEM_x64FRE_en-us.iso" + ;; "win10x64" ) case "${culture,,}" in "ar" | "ar-"* ) url="ar-sa_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; @@ -1169,12 +1188,6 @@ getLink4() { "zh" | "zh-"* ) url="zh-cn_windows_10_enterprise_ltsc_2021_x64_dvd_033b7312.iso" ;; esac ;; - "win11x64-iot" | "win11x64-enterprise-iot-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=6248140800 - sum="5d9b86ad467bc89f488d1651a6c5ad3656a7ea923f9f914510657a24c501bb86" - url="en-us_windows_11_iot_enterprise_version_23h2_x64_dvd_fb37549c.iso" - ;; "win10x64-iot" | "win10x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=4851668992 @@ -1918,6 +1931,32 @@ prepareLegacy() { return 1 } +prepare9x() { + + local iso="$1" + local dir="$2" + local file="$dir/boot.img" + + ETFS=$(basename "$file") + [ -f "$file" ] && [ -s "$file" ] && return 0 + rm -f "$file" + + local src="[BOOT]/Boot-1.44M.img" + [ ! -f "$dir/$src" ] && error "Boot floppy not found!" && return 1 + + cp "$dir/$src" "$file" && return 0 + + return 1 +} + +prepare2k() { + + local dir="$2" + ETFS="[BOOT]/Boot-NoEmul.img" + + return 0 +} + prepareXP() { local dir="$2" @@ -1932,10 +1971,13 @@ prepareXP() { target="$dir/AMD64" fi - rm -rf "$drivers" + local msg="Adding drivers to image..." + info "$msg" && html "$msg" - if ! 7z x /run/drivers.iso -o"$drivers" > /dev/null; then - error "Failed to extract driver ISO file!" && return 1 + mkdir -p "$drivers" + + if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then + error "Failed to extract driver!" && return 1 fi cp "$drivers/viostor/xp/$arch/viostor.sys" "$target" @@ -1978,14 +2020,16 @@ prepareXP() { sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" - local key pid setup + rm -rf "$drivers" + + local key pid file setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1) pid=$(<"$setup") pid="${pid:(-4)}" pid="${pid:0:3}" if [[ "$pid" == "270" ]]; then - info "Warning: this XP version requires a volume license, it will reject the generic key during installation." + warn "this version of Windows XP requires a volume license key (VLK), it will ask for one during installation." fi if [[ "${arch,,}" == "x86" ]]; then @@ -1998,10 +2042,28 @@ prepareXP() { key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" fi + local oem="" + local folder="/oem" + + [ ! -d "$folder" ] && folder="/OEM" + [ ! -d "$folder" ] && folder="$STORAGE/oem" + [ ! -d "$folder" ] && folder="$STORAGE/OEM" + + if [ -d "$folder" ]; then + + file=$(find "$folder" -maxdepth 1 -type f -iname install.bat | head -n 1) + + if [ -f "$file" ]; then + unix2dos -q "$file" + oem="\"Script\"=\"cmd /C start \\\"Install\\\" \\\"cmd /C C:\\\\OEM\\\\install.bat\\\"\"" + fi + fi + local username="Docker" local password="*" - [ -n "$USERNAME" ] && username="$USERNAME" + [ -n "$PASSWORD" ] && password="$PASSWORD" + [ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; @@ -2055,9 +2117,6 @@ prepareXP() { echo " Home_Page = http://www.google.com" echo " Search_Page = http://www.google.com" echo "" - echo "[RegionalSettings]" - echo " Language=00000409" - echo "" echo "[TerminalServices]" echo " AllowConnections=1" echo "" @@ -2098,10 +2157,10 @@ prepareXP() { echo "\"DefaultSettings.XResolution\"=dword:00000780" echo "\"DefaultSettings.YResolution\"=dword:00000438" echo "" - echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceEx]" + echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]" echo "\"ScreenSaver\"=\"reg add \\\"HKCU\\\\Control Panel\\\\Desktop\\\" /f /v \\\"SCRNSAVE.EXE\\\" /t REG_SZ /d \\\"off\\\"\"" echo "\"ScreenSaverOff\"=\"reg add \\\"HKCU\\\\Control Panel\\\\Desktop\\\" /f /v \\\"ScreenSaveActive\\\" /t REG_SZ /d \\\"0\\\"\"" - echo "" + echo "$oem" } | unix2dos > "$dir/\$OEM\$/install.reg" { echo "Set WshShell = WScript.CreateObject(\"WScript.Shell\")" @@ -2118,7 +2177,18 @@ prepareXP() { echo "" } | unix2dos > "$dir/\$OEM\$/cmdlines.txt" - rm -rf "$drivers" + [ ! -d "$folder" ] && return 0 + + msg="Adding OEM folder to image..." + info "$msg" && html "$msg" + + local dest="$dir/\$OEM\$/\$1/" + mkdir -p "$dest" + + if ! cp -r "$folder" "$dest"; then + error "Failed to copy OEM folder!" && return 1 + fi + return 0 } diff --git a/src/entry.sh b/src/entry.sh index 24bdf50..c2c3912 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -35,4 +35,4 @@ cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & wait $! || : sleep 1 & wait $! -finish 0 +[ ! -f "$QEMU_END" ] && finish 0 diff --git a/src/install.sh b/src/install.sh index 558b10e..8fd09c4 100644 --- a/src/install.sh +++ b/src/install.sh @@ -119,6 +119,7 @@ finishInstall() { fi rm -f "$STORAGE/windows.old" + rm -f "$STORAGE/windows.type" rm -f "$STORAGE/windows.base" rm -f "$STORAGE/windows.boot" rm -f "$STORAGE/windows.mode" @@ -149,21 +150,30 @@ finishInstall() { # Enable secure boot on multi-socket systems to workaround freeze if [ -n "$SOCKETS" ] && [[ "$SOCKETS" != "1" ]]; then BOOT_MODE="windows_secure" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + echo "$BOOT_MODE" > "$STORAGE/windows.mode" fi fi fi + if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then + echo "$DISK_TYPE" > "$STORAGE/windows.type" + fi + rm -rf "$TMP" return 0 } abortInstall() { - local iso="$1" + local dir="$1" + local iso="$2" [[ "${iso,,}" == *".esd" ]] && exit 60 + if [ ! -d "$dir/EFI" ]; then + [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" + fi + if [ -n "$CUSTOM" ]; then BOOT="$iso" REMOVE="N" @@ -468,6 +478,7 @@ detectLanguage() { setXML() { local file="/custom.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" @@ -478,11 +489,81 @@ setXML() { return 0 } +detectLegacy() { + + local dir="$1" + local find find2 desc + + find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win95" + desc=$(printEdition "$DETECTED" "Windows 95") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win98" + desc=$(printEdition "$DETECTED" "Windows 98") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win9x" + desc=$(printEdition "$DETECTED" "Windows ME") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) + find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) + + if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then + [ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86" + desc=$(printEdition "$DETECTED" "Windows XP") + info "Detected: $desc" && return 0 + fi + + if [ -f "$dir/CDROM_NT.5" ]; then + DETECTED="win2kx86" + desc=$(printEdition "$DETECTED" "Windows 2000") + info "Detected: $desc" && return 0 + fi + + if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then + desc="Windows Server 2003" + info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + fi + + if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then + desc="Windows Server 2003" + info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + fi + + return 1 +} + +skipVersion() { + + local version="$1" + + case "${version,,}" in + "win2k"* | "winxp"* | "win9"* ) + return 0 + ;; + esac + + return 1 +} + detectImage() { local dir="$1" local version="$2" - local desc msg language + local desc msg find language XML="" @@ -492,7 +573,7 @@ detectImage() { if [ -n "$DETECTED" ]; then - [[ "${DETECTED,,}" == "winxp"* ]] && return 0 + skipVersion "${DETECTED,,}" && return 0 if ! setXML "" && [[ "$MANUAL" != [Yy1]* ]]; then MANUAL="Y" @@ -504,31 +585,23 @@ detectImage() { fi info "Detecting version from ISO image..." + detectLegacy "$dir" && return 0 - if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then - [ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86" - desc=$(printEdition "$DETECTED" "Windows XP") - info "Detected: $desc" - return 0 - fi - - local src loc info + local src wim info src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) - [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) + wim=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) + [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) - if [ ! -f "$loc" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" + if [ ! -f "$wim" ]; then warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1 fi - info=$(wimlib-imagex info -xml "$loc" | tr -d '\000') + info=$(wimlib-imagex info -xml "$wim" | tr -d '\000') ! checkPlatform "$info" && exit 67 DETECTED=$(detectVersion "$info") @@ -575,19 +648,33 @@ prepareImage() { local missing case "${DETECTED,,}" in + "win9"* | "win2k"* ) + MACHINE="pc-i440fx-2.4" ;; "winxp"* | "winvistax86"* | "win7x86"* ) - MACHINE="pc-q35-2.10" - ;; + MACHINE="pc-q35-2.10" ;; + esac + + case "${DETECTED,,}" in + "win9"* | "winxp"* | "win2k"* ) + HV="N" + BOOT_MODE="windows_legacy" ;; + "winvista"* | "win7"* | "win2008"* ) + BOOT_MODE="windows_legacy" ;; esac case "${DETECTED,,}" in "winxp"* ) - BOOT_MODE="windows_legacy" + DISK_TYPE="blk" prepareXP "$iso" "$dir" && return 0 - error "Failed to prepare Windows XP ISO!" && return 1 - ;; - "winvista"* | "win7"* | "win2008"* ) - BOOT_MODE="windows_legacy" ;; + error "Failed to prepare Windows XP ISO!" && return 1 ;; + "win9"* ) + DISK_TYPE="auto" + prepare9x "$iso" "$dir" && return 0 + error "Failed to prepare Windows 9x ISO!" && return 1 ;; + "win2k"* ) + DISK_TYPE="auto" + prepare2k "$iso" "$dir" && return 0 + error "Failed to prepare Windows 2000 ISO!" && return 1 ;; esac if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then @@ -596,10 +683,9 @@ prepareImage() { missing=$(basename "$dir/$EFISYS") [ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS") - warn "failed to locate file '${missing,,}' in ISO image!" - [[ "${PLATFORM,,}" == "arm64" ]] && return 1 - BOOT_MODE="windows_legacy" + error "failed to locate file '${missing,,}' in ISO image!" + return 1 fi prepareLegacy "$iso" "$dir" && return 0 @@ -659,6 +745,118 @@ updateXML() { return 0 } +addDriver() { + + local id="$1" + local path="$2" + local target="$3" + local driver="$4" + local folder="" + + case "${id,,}" in + "win7x86"* ) folder="w7/x86" ;; + "win7x64"* ) folder="w7/amd64" ;; + "win81x64"* ) folder="w10/amd64" ;; + "win10x64"* ) folder="w10/amd64" ;; + "win11x64"* ) folder="w11/amd64" ;; + "win2022"* ) folder="2k22/amd64" ;; + "win2019"* ) folder="2k19/amd64" ;; + "win2016"* ) folder="2k16/amd64" ;; + "win2012"* ) folder="2k16/amd64" ;; + "win2008"* ) folder="2k8R2/amd64" ;; + "win10arm64"* ) folder="w10/ARM64" ;; + "win11arm64"* ) folder="w11/ARM64" ;; + "winvistax86"* ) folder="2k8/x86" ;; + "winvistax64"* ) folder="2k8/amd64" ;; + esac + + if [ -z "$folder" ]; then + warn "no \"$driver\" driver found for \"$DETECTED\" !" && return 0 + fi + + [ ! -d "$path/$driver/$folder" ] && return 0 + + if [[ "${id,,}" == "winvista"* ]]; then + [[ "${driver,,}" == "viorng" ]] && return 0 + fi + + local dest="$path/$target/$driver" + mv "$path/$driver/$folder" "$dest" + + return 0 +} + +addDrivers() { + + local file="$1" + local index="$2" + local version="$3" + + local msg="Adding drivers to image..." + info "$msg" && html "$msg" + + local drivers="$TMP/drivers" + mkdir -p "$drivers" + + if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then + error "Failed to extract driver!" && return 1 + fi + + local target="\$WinPEDriver\$" + local dest="$drivers/$target" + mkdir -p "$dest" + + wimlib-imagex update "$file" "$index" --command "delete --force --recursive /$target" >/dev/null || true + + addDriver "$version" "$drivers" "$target" "qxl" + addDriver "$version" "$drivers" "$target" "viofs" + addDriver "$version" "$drivers" "$target" "sriov" + addDriver "$version" "$drivers" "$target" "smbus" + addDriver "$version" "$drivers" "$target" "qxldod" + addDriver "$version" "$drivers" "$target" "viorng" + addDriver "$version" "$drivers" "$target" "viostor" + addDriver "$version" "$drivers" "$target" "NetKVM" + addDriver "$version" "$drivers" "$target" "Balloon" + addDriver "$version" "$drivers" "$target" "vioscsi" + addDriver "$version" "$drivers" "$target" "pvpanic" + addDriver "$version" "$drivers" "$target" "vioinput" + addDriver "$version" "$drivers" "$target" "viogpudo" + addDriver "$version" "$drivers" "$target" "vioserial" + addDriver "$version" "$drivers" "$target" "qemupciserial" + + if ! wimlib-imagex update "$file" "$index" --command "add $dest /$target" >/dev/null; then + return 1 + fi + + rm -rf "$drivers" + return 0 +} + +addFolder() { + + local src="$1" + local folder="/oem" + + [ ! -d "$folder" ] && folder="/OEM" + [ ! -d "$folder" ] && folder="$STORAGE/oem" + [ ! -d "$folder" ] && folder="$STORAGE/OEM" + [ ! -d "$folder" ] && return 0 + + local msg="Adding OEM folder to image..." + info "$msg" && html "$msg" + + local dest="$src/\$OEM\$/\$1/" + mkdir -p "$dest" + + ! cp -r "$folder" "$dest" && return 1 + + local file + file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) + [ -f "$file" ] && unix2dos -q "$file" + + return 0 +} + updateImage() { local dir="$1" @@ -667,9 +865,9 @@ updateImage() { local file="autounattend.xml" local org="${file//.xml/.org}" local dat="${file//.xml/.dat}" - local desc path src loc xml index result + local desc path src wim xml index result - [[ "${DETECTED,,}" == "winxp"* ]] && return 0 + skipVersion "${DETECTED,,}" && return 0 if [ ! -s "$asset" ] || [ ! -f "$asset" ]; then asset="" @@ -682,29 +880,35 @@ updateImage() { src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" - warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 + error "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) - [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) + wim=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) + [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) - if [ ! -f "$loc" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" - warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 + if [ ! -f "$wim" ]; then + error "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 fi index="1" - result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') + result=$(wimlib-imagex info -xml "$wim" | tr -d '\000') if [[ "${result^^}" == *"<IMAGE INDEX=\"2\">"* ]]; then index="2" fi - if wimlib-imagex extract "$loc" "$index" "/$file" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex extract "$loc" "$index" "/$dat" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex extract "$loc" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex update "$loc" "$index" --command "rename /$file /$org" > /dev/null; then + if ! addDrivers "$wim" "$index" "$DETECTED"; then + error "Failed to add drivers to image!" && return 1 + fi + + if ! addFolder "$src"; then + error "Failed to add OEM folder to image!" && return 1 + fi + + if wimlib-imagex extract "$wim" "$index" "/$file" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex extract "$wim" "$index" "/$dat" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex update "$wim" "$index" --command "rename /$file /$org" > /dev/null; then warn "failed to backup original answer file ($file)." fi fi @@ -723,11 +927,11 @@ updateImage() { cp "$asset" "$answer" updateXML "$answer" "$language" - if ! wimlib-imagex update "$loc" "$index" --command "add $answer /$file" > /dev/null; then + if ! wimlib-imagex update "$wim" "$index" --command "add $answer /$file" > /dev/null; then MANUAL="Y" warn "failed to add answer file ($xml) to ISO image, $FB" else - wimlib-imagex update "$loc" "$index" --command "add $answer /$dat" > /dev/null || true + wimlib-imagex update "$wim" "$index" --command "add $answer /$dat" > /dev/null || true fi rm -f "$answer" @@ -736,10 +940,10 @@ updateImage() { if [[ "$MANUAL" == [Yy1]* ]]; then - wimlib-imagex update "$loc" "$index" --command "delete --force /$file" > /dev/null || true + wimlib-imagex update "$wim" "$index" --command "delete --force /$file" > /dev/null || true - if wimlib-imagex extract "$loc" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex update "$loc" "$index" --command "add $TMP/$org /$file" > /dev/null; then + if wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex update "$wim" "$index" --command "add $TMP/$org /$file" > /dev/null; then warn "failed to restore original answer file ($org)." fi fi @@ -763,7 +967,7 @@ updateImage() { return 0 } -removeDownload() { +removeImage() { local iso="$1" @@ -774,43 +978,10 @@ removeDownload() { return 0 } -copyOEM() { - - local dir="$1" - local folder="/oem" - local src dest file - - [ ! -d "$folder" ] && folder="/OEM" - [ ! -d "$folder" ] && folder="$STORAGE/oem" - [ ! -d "$folder" ] && folder="$STORAGE/OEM" - [ ! -d "$folder" ] && return 0 - - local msg="Copying OEM folder to image..." - info "$msg" && html "$msg" - - src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) - - if [ ! -d "$src" ]; then - error "failed to locate 'sources' folder in ISO image!" && return 1 - fi - - dest="$src/\$OEM\$/\$1/" - mkdir -p "$dest" - - if ! cp -r "$folder" "$dest"; then - error "Failed to copy OEM folder!" && return 1 - fi - - file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) - [ -f "$file" ] && unix2dos -q "$file" - - return 0 -} - buildImage() { local dir="$1" - local failed="N" + local failed="" local cat="BOOT.CAT" local log="/run/shm/iso.log" local base size size_gb space space_gb desc @@ -841,31 +1012,25 @@ buildImage() { if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then - if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ - -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log"; then - failed="Y" - fi + ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ + -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log" && failed="y" else - if [[ "${DETECTED,,}" != "winxp"* ]]; then + case "${DETECTED,,}" in + "win2k"* | "winxp"* ) + ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ + -relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log" && failed="y" ;; + "win9"* ) + ! genisoimage -o "$out" -b "$ETFS" -J -r -V "${LABEL::30}" -quiet "$dir" 2> "$log" && failed="y" ;; + * ) + ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ + -udf -allow-limited-size -quiet "$dir" 2> "$log" && failed="y" ;; + esac - if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ - -udf -allow-limited-size -quiet "$dir" 2> "$log"; then - failed="Y" - fi - - else - - if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ - -relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log"; then - failed="Y" - fi - - fi fi - if [[ "$failed" != "N" ]]; then + if [ -n "$failed" ]; then [ -s "$log" ] && echo "$(<"$log")" error "Failed to build image!" && return 1 fi @@ -886,6 +1051,10 @@ bootWindows() { [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" + if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then + DISK_TYPE=$(<"$STORAGE/windows.type") + fi + if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then @@ -955,28 +1124,24 @@ if ! extractImage "$ISO" "$DIR" "$VERSION"; then fi if ! detectImage "$DIR" "$VERSION"; then - abortInstall "$ISO" && return 0 + abortInstall "$DIR" "$ISO" && return 0 exit 60 fi if ! prepareImage "$ISO" "$DIR"; then - abortInstall "$ISO" && return 0 - exit 60 + abortInstall "$DIR" "$ISO" && return 0 + exit 66 fi if ! updateImage "$DIR" "$XML" "$LANGUAGE"; then - abortInstall "$ISO" && return 0 - exit 60 -fi - -if ! removeDownload "$ISO"; then - exit 64 -fi - -if ! copyOEM "$DIR"; then + abortInstall "$DIR" "$ISO" && return 0 exit 63 fi +if ! removeImage "$ISO"; then + exit 64 +fi + if ! buildImage "$DIR"; then exit 65 fi diff --git a/src/mido.sh b/src/mido.sh index 59ceae7..ff285cb 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -6,12 +6,18 @@ handle_curl_error() { local error_code="$1" case "$error_code" in + 1) error "Unsupported protocol!" ;; + 2) error "Failed to initialize curl!" ;; + 3) error "The URL format is malformed!" ;; + 5) error "Failed to resolve address of proxy host!" ;; 6) error "Failed to resolve Microsoft servers! Is there an Internet connection?" ;; 7) error "Failed to contact Microsoft servers! Is there an Internet connection or is the server down?" ;; 8) error "Microsoft servers returned a malformed HTTP response!" ;; + 16) error "A problem was detected in the HTTP2 framing layer!" ;; 22) error "Microsoft servers returned a failing HTTP status code!" ;; 23) error "Failed at writing Windows media to disk! Out of disk space or permission error?" ;; - 26) error "Ran out of memory during download!" ;; + 26) error "Failed to read Windows media from disk!" ;; + 27) error "Ran out of memory during download!" ;; 28) error "Connection timed out to Microsoft server!" ;; 35) error "SSL connection error from Microsoft server!" ;; 36) error "Failed to continue earlier download!" ;; @@ -32,22 +38,34 @@ handle_curl_error() { # https://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html INT) error "Curl was interrupted!" ;; # There could be other signals but these are most common - SEGV | ABRT ) error "Curl crashed! Failed exploitation attempt? Please report any core dumps to curl developers." ;; - *) error "Curl terminated due to a fatal signal!" ;; + SEGV | ABRT ) error "Curl crashed! Please report any core dumps to curl developers." ;; + *) error "Curl terminated due to fatal signal $error_code !" ;; esac esac return 1 } +get_agent() { + + local user_agent + + # Determine approximate latest Firefox release + browser_version="$((124 + ($(date +%s) - 1710892800) / 2419200))" + echo "Mozilla/5.0 (X11; Linux x86_64; rv:${browser_version}.0) Gecko/20100101 Firefox/${browser_version}.0" + + return 0 +} + download_windows() { local id="$1" local lang="$2" + local desc="$3" local sku_id="" local language="" local session_id="" - local browser_version="" + local user_agent="" local windows_version="" local iso_download_link="" local product_edition_id="" @@ -56,12 +74,13 @@ download_windows() { local language_skuid_table_html="" case "${id,,}" in - "win11${PLATFORM,,}" ) windows_version="11" ;; - "win10${PLATFORM,,}" ) windows_version="10" ;; - "win81${PLATFORM,,}" ) windows_version="8" ;; + "win11x64" ) windows_version="11" ;; + "win10x64" ) windows_version="10" ;; + "win81x64" ) windows_version="8" ;; * ) error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;; esac + user_agent=$(get_agent) language=$(getLanguage "$lang" "name") local url="https://www.microsoft.com/en-us/software-download/windows$windows_version" @@ -69,12 +88,8 @@ download_windows() { 8 | 10) url="${url}ISO";; esac - # Determine approximate latest Firefox release - browser_version="$((124 + ($(date +%s) - 1710892800) / 2419200))" - local user_agent="Mozilla/5.0 (X11; Linux x86_64; rv:${browser_version}.0) Gecko/20100101 Firefox/${browser_version}.0" - # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs - session_id="$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random)" + session_id=$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random) # Get product edition ID for latest release of given Windows version # Product edition ID: This specifies both the Windows release (e.g. 22H2) and edition ("multi-edition" is default, either Home/Pro/Edu/etc., we select "Pro" in the answer files) in one number @@ -82,7 +97,7 @@ download_windows() { # Also, keeping a "$WindowsVersions" array like Fido does would be way too much of a maintenance burden # Remove "Accept" header that curl sends by default [[ "$DEBUG" == [Yy1]* ]] && echo " - Parsing download page: ${url}" - iso_download_page_html="$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || { + iso_download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { handle_curl_error $? return $? } @@ -90,7 +105,7 @@ download_windows() { [[ "$DEBUG" == [Yy1]* ]] && echo -n "Getting Product edition ID: " # tr: Filter for only numerics to prevent HTTP parameter injection # head -c was recently added to POSIX: https://austingroupbugs.net/view.php?id=407 - product_edition_id="$(echo "$iso_download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16)" + product_edition_id=$(echo "$iso_download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16) [[ "$DEBUG" == [Yy1]* ]] && echo "$product_edition_id" [[ "$DEBUG" == [Yy1]* ]] && echo "Permit Session ID: $session_id" @@ -110,17 +125,17 @@ download_windows() { # SKU ID: This specifies the language of the ISO. We always use "English (United States)", however, the SKU for this changes with each Windows release # We must make this request so our next one will be allowed # --data "" is required otherwise no "Content-Length" header will be sent causing HTTP response "411 Length Required" - language_skuid_table_html="$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --header "Accept:" --max-filesize 10K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=a8f8f489-4c7f-463a-9ca6-5cff94d8d041&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=getskuinformationbyproductedition&sessionId=$session_id&productEditionId=$product_edition_id&sdVersion=2")" || { + language_skuid_table_html=$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --header "Accept:" --max-filesize 10K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=a8f8f489-4c7f-463a-9ca6-5cff94d8d041&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=getskuinformationbyproductedition&sessionId=$session_id&productEditionId=$product_edition_id&sdVersion=2") || { handle_curl_error $? return $? } # tr: Filter for only alphanumerics or "-" to prevent HTTP parameter injection - sku_id="$(echo "$language_skuid_table_html" | grep -m 1 ">${language}<" | sed 's/&quot;//g' | cut -d ',' -f 1 | cut -d ':' -f 2 | tr -cd '[:alnum:]-' | head -c 16)" + sku_id=$(echo "$language_skuid_table_html" | grep -m 1 ">${language}<" | sed 's/&quot;//g' | cut -d ',' -f 1 | cut -d ':' -f 2 | tr -cd '[:alnum:]-' | head -c 16) if [ -z "$sku_id" ]; then language=$(getLanguage "$lang" "desc") - error "No download for the $language language available!" + error "No download in the $language language available for $desc!" return 1 fi @@ -130,7 +145,7 @@ download_windows() { # Get ISO download link # If any request is going to be blocked by Microsoft it's always this last one (the previous requests always seem to succeed) # --referer: Required by Microsoft servers to allow request - iso_download_link_html="$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=6e2a1789-ef16-4f27-a296-74ef7ef5d96b&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=GetProductDownloadLinksBySku&sessionId=$session_id&skuId=$sku_id&language=English&sdVersion=2")" + iso_download_link_html=$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=6e2a1789-ef16-4f27-a296-74ef7ef5d96b&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=GetProductDownloadLinksBySku&sessionId=$session_id&skuId=$sku_id&language=English&sdVersion=2") if ! [ "$iso_download_link_html" ]; then # This should only happen if there's been some change to how this API works @@ -146,7 +161,7 @@ download_windows() { # Filter for 64-bit ISO download URL # sed: HTML decode "&" character # tr: Filter for only alphanumerics or punctuation - iso_download_link="$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]')" + iso_download_link=$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]') if ! [ "$iso_download_link" ]; then # This should only happen if there's been some change to the download endpoint web address @@ -162,37 +177,47 @@ download_windows_eval() { local id="$1" local lang="$2" + local desc="$3" + local filter="" local culture="" local language="" - local windows_version="" + local user_agent="" local enterprise_type="" + local windows_version="" case "${id,,}" in "win11${PLATFORM,,}-enterprise-eval" ) - windows_version="windows-11-enterprise" - enterprise_type="enterprise" ;; + enterprise_type="enterprise" + windows_version="windows-11-enterprise" ;; + "win11${PLATFORM,,}-enterprise-iot-eval" ) + enterprise_type="iot" + windows_version="windows-11-iot-enterprise-ltsc" ;; + "win11${PLATFORM,,}-enterprise-ltsc-eval" ) + enterprise_type="iot" + windows_version="windows-11-iot-enterprise-ltsc" ;; "win10${PLATFORM,,}-enterprise-eval" ) - windows_version="windows-10-enterprise" - enterprise_type="enterprise" ;; + enterprise_type="enterprise" + windows_version="windows-10-enterprise" ;; "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - windows_version="windows-10-enterprise" - enterprise_type="ltsc" ;; + enterprise_type="ltsc" + windows_version="windows-10-enterprise" ;; "win2022-eval" ) - windows_version="windows-server-2022" - enterprise_type="server" ;; + enterprise_type="server" + windows_version="windows-server-2022" ;; "win2019-eval" ) - windows_version="windows-server-2019" - enterprise_type="server" ;; + enterprise_type="server" + windows_version="windows-server-2019" ;; "win2016-eval" ) - windows_version="windows-server-2016" - enterprise_type="server" ;; + enterprise_type="server" + windows_version="windows-server-2016" ;; "win2012r2-eval" ) - windows_version="windows-server-2012-r2" - enterprise_type="server" ;; + enterprise_type="server" + windows_version="windows-server-2012-r2" ;; * ) error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;; esac + user_agent=$(get_agent) culture=$(getLanguage "$lang" "culture") local country="${culture#*-}" @@ -200,7 +225,7 @@ download_windows_eval() { local url="https://www.microsoft.com/en-us/evalcenter/download-$windows_version" [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" - iso_download_page_html="$(curl --silent --max-time 30 --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || { + iso_download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { handle_curl_error $? return $? } @@ -212,32 +237,52 @@ download_windows_eval() { fi [[ "$DEBUG" == [Yy1]* ]] && echo "Getting download link.." - iso_download_links="$(echo "$iso_download_page_html" | grep -o "https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}")" || { + + if [[ "$enterprise_type" == "iot" ]]; then + filter="https://go.microsoft.com/fwlink/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" + else + filter="https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" + fi + + iso_download_links=$(echo "$iso_download_page_html" | grep -io "$filter") || { # This should only happen if there's been some change to the download endpoint web address if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then error "Windows server download page gave us no download link!" else language=$(getLanguage "$lang" "desc") - error "No download for the $language language available!" + error "No download in the $language language available for $desc!" fi return 1 } - # Limit untrusted size for input validation - iso_download_links="$(echo "$iso_download_links" | head -c 1024)" - case "$enterprise_type" in - # Select x64 download link - "enterprise") iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; - # Select x64 LTSC download link - "ltsc") iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) ;; - *) iso_download_link="$iso_download_links" ;; + "enterprise" ) + iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) + ;; + "iot" ) + if [[ "${PLATFORM,,}" == "x64" ]]; then + iso_download_link=$(echo "$iso_download_links" | head -n 1) + fi + if [[ "${PLATFORM,,}" == "arm64" ]]; then + iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) + fi + ;; + "ltsc" ) + iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) + ;; + "server" ) + iso_download_link=$(echo "$iso_download_links" | head -n 1) + ;; + * ) + error "Invalid type specified, value \"$enterprise_type\" is not recognized!" && return 1 ;; esac + [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" + # Follow redirect so proceeding log message is useful # This is a request we make this Fido doesn't # We don't need to set "--max-filesize" here because this is a HEAD request and the output is to /dev/null anyway - iso_download_link="$(curl --silent --max-time 30 --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link")" || { + iso_download_link=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link") || { # This should only happen if the Microsoft servers are down handle_curl_error $? return $? @@ -252,37 +297,46 @@ getWindows() { local version="$1" local lang="$2" local desc="$3" - local language + + local language edition + language=$(getLanguage "$lang" "desc") + edition=$(printEdition "$version" "$desc") local msg="Requesting $desc from Microsoft server..." info "$msg" && html "$msg" + case "${version,,}" in + "win2008r2" | "win81${PLATFORM,,}-enterprise-eval" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + error "No download in the $language language available for $edition!" + MIDO_URL="" && return 1 + fi ;; + esac + + case "${version,,}" in + "win11${PLATFORM,,}-enterprise-iot-eval" ) ;; + * ) + if [[ "${PLATFORM,,}" != "x64" ]]; then + error "No download for the ${PLATFORM^^} platform available for $edition!" + MIDO_URL="" && return 1 + fi ;; + esac + case "${version,,}" in "win81${PLATFORM,,}" | "win10${PLATFORM,,}" | "win11${PLATFORM,,}" ) - download_windows "$version" "$lang" && return 0 + download_windows "$version" "$lang" "$edition" && return 0 ;; - "win11${PLATFORM,,}-enterprise-eval" ) - download_windows_eval "$version" "$lang" && return 0 - ;; - "win10${PLATFORM,,}-enterprise-eval" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - download_windows_eval "$version" "$lang" && return 0 + "win11${PLATFORM,,}-enterprise"* | "win10${PLATFORM,,}-enterprise"* ) + download_windows_eval "$version" "$lang" "$edition" && return 0 ;; "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) - download_windows_eval "$version" "$lang" && return 0 + download_windows_eval "$version" "$lang" "$edition" && return 0 ;; "win81${PLATFORM,,}-enterprise-eval" ) - if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then - MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" && return 0 - fi - language=$(getLanguage "$lang" "desc") - error "No download for the $language language available!" + MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" && return 0 ;; "win2008r2" ) - if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then - MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" && return 0 - fi - language=$(getLanguage "$lang" "desc") - error "No download for the $language language available!" + MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" && return 0 ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac @@ -385,8 +439,9 @@ getESD() { size=$(stat -c%s "$dir/$eFile") if ((size<20)); then + desc=$(printEdition "$version" "$desc") language=$(getLanguage "$lang" "desc") - error "the $language language is not supported by this download method!" && return 1 + error "No download in the $language language available for $desc!" && return 1 fi local tag="FilePath" diff --git a/src/power.sh b/src/power.sh index 3b61825..6540a56 100644 --- a/src/power.sh +++ b/src/power.sh @@ -29,7 +29,12 @@ boot() { if [ -s "$QEMU_PTY" ]; then if [ "$(stat -c%s "$QEMU_PTY")" -gt 7 ]; then - if ! grep -Fq "BOOTMGR is missing" "$QEMU_PTY"; then + local fail="" + if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then + grep -Fq "No bootable device." "$QEMU_PTY" && fail="y" + grep -Fq "BOOTMGR is missing" "$QEMU_PTY" && fail="y" + fi + if [ -z "$fail" ]; then info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." return 0 fi @@ -37,6 +42,11 @@ boot() { fi error "Timeout while waiting for QEMU to boot the machine!" + + local pid + pid=$(<"$QEMU_PID") + { kill -15 "$pid" || true; } 2>/dev/null + return 0 } @@ -49,18 +59,14 @@ ready() { local last local bios="Booting from Hard" last=$(grep "^Booting.*" "$QEMU_PTY" | tail -1) - if [[ "${last,,}" == "${bios,,}"* ]]; then - if ! grep -Fq "BOOTMGR is missing" "$QEMU_PTY"; then - return 0 - fi - fi - return 1 + [[ "${last,,}" != "${bios,,}"* ]] && return 1 + grep -Fq "No bootable device." "$QEMU_PTY" && return 1 + grep -Fq "BOOTMGR is missing" "$QEMU_PTY" && return 1 + return 0 fi local line="\"Windows Boot Manager\"" - if grep -Fq "$line" "$QEMU_PTY"; then - return 0 - fi + grep -Fq "$line" "$QEMU_PTY" && return 0 return 1 } From 4e2651e06a0eac1cddf5020e06bb0fc67276fc00 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 27 May 2024 16:53:00 +0200 Subject: [PATCH 219/505] feat: Initial support for Windows Server 2025 (#546) --- assets/win2025-eval.xml | 341 +++++++++++++++++++++++++++++++++++++++ assets/win2025.xml | 344 ++++++++++++++++++++++++++++++++++++++++ src/define.sh | 115 +++++++++++++- src/install.sh | 58 +------ src/mido.sh | 5 +- 5 files changed, 801 insertions(+), 62 deletions(-) create mode 100644 assets/win2025-eval.xml create mode 100644 assets/win2025.xml diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml new file mode 100644 index 0000000..1ee2b54 --- /dev/null +++ b/assets/win2025-eval.xml @@ -0,0 +1,341 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Windows Server 2025 SERVERSTANDARD</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win2025.xml b/assets/win2025.xml new file mode 100644 index 0000000..c0801b0 --- /dev/null +++ b/assets/win2025.xml @@ -0,0 +1,344 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Windows Server 2025 SERVERSTANDARD</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>TVRH6-WHNXV-R9WG3-9XRFY-MY832</Key> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/src/define.sh b/src/define.sh index dad5cee..b0e8563 100644 --- a/src/define.sh +++ b/src/define.sh @@ -70,6 +70,9 @@ parseVersion() { "xp64" | "xpx64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" ) VERSION="winxpx64" ;; + "25" | "2025" | "win25" | "win2025" | "windows2025" | "windows 2025" ) + VERSION="win2025-eval" + ;; "22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022" ) VERSION="win2022-eval" ;; @@ -599,6 +602,7 @@ switchEdition() { "win81${PLATFORM,,}-enterprise-eval" ) DETECTED="win81${PLATFORM,,}-enterprise" ;; + "win2025-eval" ) DETECTED="win2025" ;; "win2022-eval" ) DETECTED="win2022" ;; "win2019-eval" ) DETECTED="win2019" ;; "win2016-eval" ) DETECTED="win2016" ;; @@ -656,6 +660,10 @@ getMido() { size=3961473024 sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" ;; + "win2025-eval" ) + size=5307996160 + sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" + ;; "win2022-eval" ) size=5044094976 sum="3e4fa6d8507b554856fc9ca6079cc402df11a8b79344871669f0251535255325" @@ -702,14 +710,26 @@ getLink1() { [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in - "win11x64" ) + "win11x64" | "win11x64-enterprise" | "win11x64-enterprise-eval" ) size=5946128384 sum="5bb1459034f50766ee480d895d751af73a4af30814240ae32ebc5633546a5af7" url="11/en-us_windows_11_23h2_x64.iso" ;; - "win10x64" ) - size=4957009920 - sum="6673e2ab6c6939a74eceff2c2bb4d36feb94ff8a6f71700adef0f0b998fdcaca" + "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + size=4821989376 + sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + url="26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + ;; + "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + size=4821989376 + sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + url="26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + ;; + "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) + size=5675616256 + sum="99c13b3afb1375661fc79496025cabe3f9ef5a555fc8ea767a48937b0f4bcace" url="10/en-us_windows_10_22h2_x64.iso" ;; "win10x64-iot" | "win10x64-enterprise-iot-eval" ) @@ -727,6 +747,11 @@ getLink1() { sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" url="8.x/8.1/en_windows_8.1_with_update_x64_dvd_6051480.iso" ;; + "win2025" | "win2025-eval" ) + size=5307176960 + sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3" + url="server/2025/en-us_windows_server_2025_preview_x64_dvd_ce9eb1a5.iso" + ;; "win2022" | "win2022-eval" ) size=5365624832 sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db" @@ -1238,6 +1263,31 @@ getLink4() { "zh" | "zh-"* ) url="cn_windows_8.1_enterprise_with_update_x64_dvd_6050374.iso" ;; esac ;; + "win2025" | "win2025-eval" ) + case "${culture,,}" in + "cs" | "cs-"* ) url="cs-cz_windows_server_2025_preview_x64_dvd_8b1f5b49.iso" ;; + "de" | "de-"* ) url="de-de_windows_server_2025_preview_x64_dvd_1c3dfe1c.iso" ;; + "en" | "en-"* ) + size=5307176960 + sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3" + url="en-us_windows_server_2025_preview_x64_dvd_ce9eb1a5.iso" ;; + "es" | "es-"* ) url="es-es_windows_server_2025_preview_x64_dvd_b07cc858.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_server_2025_preview_x64_dvd_036e8a78.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_server_2025_preview_x64_dvd_2d5d77e5.iso" ;; + "it" | "it-"* ) url="it-it_windows_server_2025_preview_x64_dvd_eaccac73.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_server_2025_preview_x64_dvd_62f802be.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_server_2025_preview_x64_dvd_e2c3e8f0.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_server_2025_preview_x64_dvd_314b4ed1.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_server_2025_preview_x64_dvd_be4b099e.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_server_2025_preview_x64_dvd_993c803a.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_server_2025_preview_x64_dvd_869aa534.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_server_2025_preview_x64_dvd_5ada1817.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_server_2025_preview_x64_dvd_5fafd4f7.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_server_2025_preview_x64_dvd_3aab7fda.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2025_preview_x64_dvd_9b147dcd.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_server_2025_preview_x64_dvd_a12bb0bf.iso" ;; + esac + ;; "win2022" | "win2022-eval" ) case "${culture,,}" in "cs" | "cs-"* ) url="cs-cz_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; @@ -1912,6 +1962,63 @@ migrateFiles() { return 0 } +detectLegacy() { + + local dir="$1" + local find find2 desc + + find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win95" + desc=$(printEdition "$DETECTED" "Windows 95") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win98" + desc=$(printEdition "$DETECTED" "Windows 98") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win9x" + desc=$(printEdition "$DETECTED" "Windows ME") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) + find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) + + if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then + [ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86" + desc=$(printEdition "$DETECTED" "Windows XP") + info "Detected: $desc" && return 0 + fi + + if [ -f "$dir/CDROM_NT.5" ]; then + DETECTED="win2kx86" + desc=$(printEdition "$DETECTED" "Windows 2000") + info "Detected: $desc" && return 0 + fi + + if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then + desc="Windows Server 2003" + info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + fi + + if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then + desc="Windows Server 2003" + info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + fi + + return 1 +} + prepareLegacy() { local iso="$1" diff --git a/src/install.sh b/src/install.sh index 8fd09c4..991446f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -489,63 +489,6 @@ setXML() { return 0 } -detectLegacy() { - - local dir="$1" - local find find2 desc - - find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win95" - desc=$(printEdition "$DETECTED" "Windows 95") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win98" - desc=$(printEdition "$DETECTED" "Windows 98") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win9x" - desc=$(printEdition "$DETECTED" "Windows ME") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) - find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) - - if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then - [ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86" - desc=$(printEdition "$DETECTED" "Windows XP") - info "Detected: $desc" && return 0 - fi - - if [ -f "$dir/CDROM_NT.5" ]; then - DETECTED="win2kx86" - desc=$(printEdition "$DETECTED" "Windows 2000") - info "Detected: $desc" && return 0 - fi - - if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then - desc="Windows Server 2003" - info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 - fi - - if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then - desc="Windows Server 2003" - info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 - fi - - return 1 -} - skipVersion() { local version="$1" @@ -759,6 +702,7 @@ addDriver() { "win81x64"* ) folder="w10/amd64" ;; "win10x64"* ) folder="w10/amd64" ;; "win11x64"* ) folder="w11/amd64" ;; + "win2025"* ) folder="2k22/amd64" ;; "win2022"* ) folder="2k22/amd64" ;; "win2019"* ) folder="2k19/amd64" ;; "win2016"* ) folder="2k16/amd64" ;; diff --git a/src/mido.sh b/src/mido.sh index ff285cb..06dc92e 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -201,6 +201,9 @@ download_windows_eval() { "win10${PLATFORM,,}-enterprise-ltsc-eval" ) enterprise_type="ltsc" windows_version="windows-10-enterprise" ;; + "win2025-eval" ) + enterprise_type="server" + windows_version="windows-server-2025" ;; "win2022-eval" ) enterprise_type="server" windows_version="windows-server-2022" ;; @@ -329,7 +332,7 @@ getWindows() { "win11${PLATFORM,,}-enterprise"* | "win10${PLATFORM,,}-enterprise"* ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) + "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; "win81${PLATFORM,,}-enterprise-eval" ) From beaeddac0b5d7c9decbf82251bcd34cb7d0a435d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 28 May 2024 01:00:16 +0200 Subject: [PATCH 220/505] feat: Added support for Windows Server 2003 (#547) --- src/define.sh | 258 +++++++++++++++++++++++++++++++++---------------- src/install.sh | 55 +++++------ 2 files changed, 199 insertions(+), 114 deletions(-) diff --git a/src/define.sh b/src/define.sh index b0e8563..677187b 100644 --- a/src/define.sh +++ b/src/define.sh @@ -72,7 +72,7 @@ parseVersion() { ;; "25" | "2025" | "win25" | "win2025" | "windows2025" | "windows 2025" ) VERSION="win2025-eval" - ;; + ;; "22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022" ) VERSION="win2022-eval" ;; @@ -88,6 +88,9 @@ parseVersion() { "2008" | "2008r2" | "win2008" | "win2008r2" | "windows2008" | "windows 2008" ) VERSION="win2008r2" ;; + "2003" | "2003r2" | "win2003" | "win2003r2" | "windows2003" | "windows 2003" ) + VERSION="win2003r2" + ;; "core11" | "core 11" ) VERSION="core11" [ -z "$DETECTED" ] && DETECTED="win11x64" @@ -370,12 +373,13 @@ printVersion() { "win95"* ) desc="Windows 95" ;; "win2k"* ) desc="Windows 2000" ;; "winvista"* ) desc="Windows Vista" ;; - "win2025"* ) desc="Windows Server 2025" ;; - "win2022"* ) desc="Windows Server 2022" ;; - "win2019"* ) desc="Windows Server 2019" ;; - "win2016"* ) desc="Windows Server 2016" ;; - "win2012"* ) desc="Windows Server 2012" ;; + "win2003"* ) desc="Windows Server 2003" ;; "win2008"* ) desc="Windows Server 2008" ;; + "win2012"* ) desc="Windows Server 2012" ;; + "win2016"* ) desc="Windows Server 2016" ;; + "win2019"* ) desc="Windows Server 2019" ;; + "win2022"* ) desc="Windows Server 2022" ;; + "win2025"* ) desc="Windows Server 2025" ;; esac if [ -z "$desc" ]; then @@ -434,7 +438,10 @@ printEdition() { "winvista"* ) edition="Business" ;; - "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* ) + "win2025"* | "win2022"* | "win2019"* | "win2016"* ) + edition="Standard" + ;; + "win2012"* | "win2008"* | "win2003"* ) edition="Standard" ;; esac @@ -510,6 +517,9 @@ fromFile() { *"server2008"* | *"server_2008"* ) id="win2008r2" ;; + *"server2003"* | *"server_2003"* ) + id="win2003r2" + ;; esac if [ -n "$id" ]; then @@ -663,7 +673,7 @@ getMido() { "win2025-eval" ) size=5307996160 sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" - ;; + ;; "win2022-eval" ) size=5044094976 sum="3e4fa6d8507b554856fc9ca6079cc402df11a8b79344871669f0251535255325" @@ -901,6 +911,11 @@ getLink2() { sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="Windows%20Vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" ;; + "win2003r2" ) + size=652367872 + sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32" + url="Windows%20Server%202003%20R2/en_win_srv_2003_r2_standard_x64_with_sp2_cd1_x13-05757.iso" + ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" @@ -1287,7 +1302,7 @@ getLink4() { "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2025_preview_x64_dvd_9b147dcd.iso" ;; "zh" | "zh-"* ) url="zh-cn_windows_server_2025_preview_x64_dvd_a12bb0bf.iso" ;; esac - ;; + ;; "win2022" | "win2022-eval" ) case "${culture,,}" in "cs" | "cs-"* ) url="cs-cz_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; @@ -1962,6 +1977,19 @@ migrateFiles() { return 0 } +skipVersion() { + + local version="$1" + + case "${version,,}" in + "win2003"* | "win2k"* | "winxp"* | "win9"* ) + return 0 + ;; + esac + + return 1 +} + detectLegacy() { local dir="$1" @@ -2001,81 +2029,39 @@ detectLegacy() { fi if [ -f "$dir/CDROM_NT.5" ]; then - DETECTED="win2kx86" + DETECTED="win2k" desc=$(printEdition "$DETECTED" "Windows 2000") info "Detected: $desc" && return 0 fi if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then - desc="Windows Server 2003" - info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + DETECTED="win2003r2" + desc=$(printEdition "$DETECTED" "Windows Server 2003") + info "Detected: $desc" && return 0 fi if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then - desc="Windows Server 2003" - info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + DETECTED="win2003r2" + desc=$(printEdition "$DETECTED" "Windows Server 2003") + info "Detected: $desc" && return 0 fi return 1 } -prepareLegacy() { - - local iso="$1" - local dir="$2" - local file="$dir/boot.img" - - ETFS=$(basename "$file") - [ -f "$file" ] && [ -s "$file" ] && return 0 - rm -f "$file" - - local len offset - len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") - offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") - - dd "if=$iso" "of=$file" bs=2048 "count=$len" "skip=$offset" status=none && return 0 - - return 1 -} - -prepare9x() { - - local iso="$1" - local dir="$2" - local file="$dir/boot.img" - - ETFS=$(basename "$file") - [ -f "$file" ] && [ -s "$file" ] && return 0 - rm -f "$file" - - local src="[BOOT]/Boot-1.44M.img" - [ ! -f "$dir/$src" ] && error "Boot floppy not found!" && return 1 - - cp "$dir/$src" "$file" && return 0 - - return 1 -} - -prepare2k() { +prepareInstall() { local dir="$2" - ETFS="[BOOT]/Boot-NoEmul.img" - - return 0 -} - -prepareXP() { - - local dir="$2" - local arch="x86" - local target="$dir/I386" + local desc="$3" + local arch="$4" + local key="$5" + local driver="$6" local drivers="$TMP/drivers" ETFS="[BOOT]/Boot-NoEmul.img" - if [ -d "$dir/AMD64" ]; then - arch="amd64" - target="$dir/AMD64" + if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then + error "Failed to locate file \"$ETFS\" in $desc ISO image!" && return 1 fi local msg="Adding drivers to image..." @@ -2084,20 +2070,23 @@ prepareXP() { mkdir -p "$drivers" if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then - error "Failed to extract driver!" && return 1 + error "Failed to extract drivers!" && return 1 fi - cp "$drivers/viostor/xp/$arch/viostor.sys" "$target" + local target + [[ "${arch,,}" == "x86" ]] && target="$dir/I386" || target="$dir/AMD64" + + cp "$drivers/viostor/$driver/$arch/viostor.sys" "$target" mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/xp/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/xp/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/xp/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/xp/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/xp/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/xp/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" if [ ! -f "$target/TXTSETUP.SIF" ]; then error "The file TXTSETUP.SIF could not be found!" && return 1 @@ -2129,24 +2118,14 @@ prepareXP() { rm -rf "$drivers" - local key pid file setup + local pid file setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1) pid=$(<"$setup") pid="${pid:(-4)}" pid="${pid:0:3}" if [[ "$pid" == "270" ]]; then - warn "this version of Windows XP requires a volume license key (VLK), it will ask for one during installation." - fi - - if [[ "${arch,,}" == "x86" ]]; then - # Windows XP Professional x86 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - else - # Windows XP Professional x64 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." fi local oem="" @@ -2211,6 +2190,10 @@ prepareXP() { echo " OrgName=\"Windows for Docker\"" echo " ProductKey=$key" echo "" + echo "[LicenseFilePrintData]" + echo " AutoMode=PerServer" + echo " AutoUsers=5" + echo "" echo "[Identification]" echo " JoinWorkgroup = WORKGROUP" echo "" @@ -2246,12 +2229,18 @@ prepareXP() { echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]" echo "\"LimitBlankPasswordUse\"=dword:00000000" echo "" + echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]" + echo "@=dword:00000000" + echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]" echo "\"RunCount\"=dword:00000000" echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]" echo "\"HideFileExt\"=dword:00000000" echo "" + echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]" + echo "\"DontLaunchSecurityOOBE\"=dword:00000000" + echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" echo "\"DefaultUserName\"=\"$username\"" echo "\"DefaultDomainName\"=\"Dockur\"" @@ -2299,4 +2288,103 @@ prepareXP() { return 0 } +prepare2k3() { + + local iso="$1" + local dir="$2" + local desc="$3" + local driver="2k3" + local arch key + + [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" + + if [[ "${arch,,}" == "x86" ]]; then + # Windows Server 2003 Standard x86 generic key (no activation, trial-only) + # This is not a pirated key, it comes from the official MS documentation. + key="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" + else + # Windows Server 2003 Standard x64 generic key (no activation, trial-only) + # This is not a pirated key, it comes from the official MS documentation. + key="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" + fi + + ! prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" && return 1 + + return 0 +} + +prepareXP() { + + local iso="$1" + local dir="$2" + local desc="$3" + local driver="xp" + local arch key + + [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" + + if [[ "${arch,,}" == "x86" ]]; then + # Windows XP Professional x86 generic key (no activation, trial-only) + # This is not a pirated key, it comes from the official MS documentation. + key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + else + # Windows XP Professional x64 generic key (no activation, trial-only) + # This is not a pirated key, it comes from the official MS documentation. + key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + fi + + ! prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" && return 1 + + return 0 +} + +prepareLegacy() { + + local iso="$1" + local dir="$2" + local desc="$3" + + ETFS="boot.img" + + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + rm -f "$dir/$ETFS" + + local len offset + len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") + offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") + + if ! dd "if=$iso" "of=$dir/$ETFS" bs=2048 "count=$len" "skip=$offset" status=none; then + error "Failed to extract boot image from $desc ISO!" && return 1 + fi + + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + + error "Failed to locate file \"$ETFS\" in $desc ISO image!" + return 1 +} + +prepare9x() { + + local dir="$2" + local desc="$3" + + ETFS="[BOOT]/Boot-1.44M.img" + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + + error "Failed to locate file \"$ETFS\" in $desc ISO image!" + return 1 +} + +prepare2k() { + + local dir="$2" + local desc="$3" + + ETFS="[BOOT]/Boot-NoEmul.img" + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + + error "Failed to locate file \"$ETFS\" in $desc ISO image!" + return 1 +} + return 0 diff --git a/src/install.sh b/src/install.sh index 991446f..e4af65f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -489,19 +489,6 @@ setXML() { return 0 } -skipVersion() { - - local version="$1" - - case "${version,,}" in - "win2k"* | "winxp"* | "win9"* ) - return 0 - ;; - esac - - return 1 -} - detectImage() { local dir="$1" @@ -588,17 +575,19 @@ prepareImage() { local iso="$1" local dir="$2" - local missing + local desc missing + + desc=$(printVersion "$DETECTED" "$DETECTED") case "${DETECTED,,}" in "win9"* | "win2k"* ) MACHINE="pc-i440fx-2.4" ;; - "winxp"* | "winvistax86"* | "win7x86"* ) + "winvistax86"* | "win7x86"* | "winxp"* | "win2003"* ) MACHINE="pc-q35-2.10" ;; esac case "${DETECTED,,}" in - "win9"* | "winxp"* | "win2k"* ) + "win9"* | "win2k"* | "winxp"* | "win2003"* ) HV="N" BOOT_MODE="windows_legacy" ;; "winvista"* | "win7"* | "win2008"* ) @@ -606,18 +595,22 @@ prepareImage() { esac case "${DETECTED,,}" in - "winxp"* ) - DISK_TYPE="blk" - prepareXP "$iso" "$dir" && return 0 - error "Failed to prepare Windows XP ISO!" && return 1 ;; "win9"* ) DISK_TYPE="auto" - prepare9x "$iso" "$dir" && return 0 - error "Failed to prepare Windows 9x ISO!" && return 1 ;; + prepare9x "$iso" "$dir" "$desc" && return 0 + error "Failed to prepare $desc ISO!" && return 1 ;; "win2k"* ) DISK_TYPE="auto" - prepare2k "$iso" "$dir" && return 0 - error "Failed to prepare Windows 2000 ISO!" && return 1 ;; + prepare2k "$iso" "$dir" "$desc" && return 0 + error "Failed to prepare $desc ISO!" && return 1 ;; + "winxp"* ) + DISK_TYPE="blk" + prepareXP "$iso" "$dir" "$desc" && return 0 + error "Failed to prepare $desc ISO!" && return 1 ;; + "win2003"* ) + DISK_TYPE="blk" + prepare2k3 "$iso" "$dir" "$desc" && return 0 + error "Failed to prepare $desc ISO!" && return 1 ;; esac if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then @@ -627,13 +620,13 @@ prepareImage() { missing=$(basename "$dir/$EFISYS") [ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS") - error "failed to locate file '${missing,,}' in ISO image!" + error "Failed to locate file \"${missing,,}\" in $desc ISO image!" return 1 fi - prepareLegacy "$iso" "$dir" && return 0 + prepareLegacy "$iso" "$dir" "$desc" && return 0 - error "Failed to extract boot image from ISO!" + error "Failed to extract boot image from $desc ISO image!" return 1 } @@ -702,7 +695,7 @@ addDriver() { "win81x64"* ) folder="w10/amd64" ;; "win10x64"* ) folder="w10/amd64" ;; "win11x64"* ) folder="w11/amd64" ;; - "win2025"* ) folder="2k22/amd64" ;; + "win2025"* ) folder="2k22/amd64" ;; "win2022"* ) folder="2k22/amd64" ;; "win2019"* ) folder="2k19/amd64" ;; "win2016"* ) folder="2k16/amd64" ;; @@ -934,6 +927,10 @@ buildImage() { error "File $BOOT does already exist?!" && return 1 fi + if [ ! -f "$dir/$ETFS" ]; then + error "Failed to locate file \"$ETFS\" in ISO image!" && return 1 + fi + base=$(basename "$BOOT") local out="$TMP/${base%.*}.tmp" rm -f "$out" @@ -962,7 +959,7 @@ buildImage() { else case "${DETECTED,,}" in - "win2k"* | "winxp"* ) + "win2k"* | "winxp"* | "win2003"* ) ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ -relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log" && failed="y" ;; "win9"* ) From 4ed34379836efa1a1db391639a2bf6f4b955607c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 28 May 2024 16:39:57 +0200 Subject: [PATCH 221/505] fix: Refactor code for legacy machines (#548) --- src/define.sh | 164 ++++++++++++++++++++++++------------------------- src/install.sh | 58 +++++------------ 2 files changed, 96 insertions(+), 126 deletions(-) diff --git a/src/define.sh b/src/define.sh index 677187b..c9e776a 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1977,78 +1977,6 @@ migrateFiles() { return 0 } -skipVersion() { - - local version="$1" - - case "${version,,}" in - "win2003"* | "win2k"* | "winxp"* | "win9"* ) - return 0 - ;; - esac - - return 1 -} - -detectLegacy() { - - local dir="$1" - local find find2 desc - - find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win95" - desc=$(printEdition "$DETECTED" "Windows 95") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win98" - desc=$(printEdition "$DETECTED" "Windows 98") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win9x" - desc=$(printEdition "$DETECTED" "Windows ME") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) - find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) - - if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then - [ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86" - desc=$(printEdition "$DETECTED" "Windows XP") - info "Detected: $desc" && return 0 - fi - - if [ -f "$dir/CDROM_NT.5" ]; then - DETECTED="win2k" - desc=$(printEdition "$DETECTED" "Windows 2000") - info "Detected: $desc" && return 0 - fi - - if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then - DETECTED="win2003r2" - desc=$(printEdition "$DETECTED" "Windows Server 2003") - info "Detected: $desc" && return 0 - fi - - if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then - DETECTED="win2003r2" - desc=$(printEdition "$DETECTED" "Windows Server 2003") - info "Detected: $desc" && return 0 - fi - - return 1 -} - prepareInstall() { local dir="$2" @@ -2363,28 +2291,96 @@ prepareLegacy() { return 1 } -prepare9x() { +detectLegacy() { - local dir="$2" - local desc="$3" + local dir="$1" + local find find2 - ETFS="[BOOT]/Boot-1.44M.img" - [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) + [ -n "$find" ] && DETECTED="win95" && return 0 + + find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) + [ -n "$find" ] && DETECTED="win98" && return 0 + + find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) + [ -n "$find" ] && DETECTED="win9x" && return 0 + + find=$(find "$dir" -maxdepth 1 -type f -iname cdrom_nt.5 | head -n 1) + [ -n "$find" ] && DETECTED="win2k" && return 0 + + find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) + find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) + + if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then + [ -d "$dir/AMD64" ] && DETECTED="winxpx64" && return 0 + DETECTED="winxpx86" && return 0 + fi + + if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then + DETECTED="win2003r2" && return 0 + fi + + if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then + DETECTED="win2003r2" && return 0 + fi - error "Failed to locate file \"$ETFS\" in $desc ISO image!" return 1 } -prepare2k() { +skipVersion() { - local dir="$2" - local desc="$3" + local id="$1" - ETFS="[BOOT]/Boot-NoEmul.img" - [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + case "${id,,}" in + "win9"* | "winxp"* | "win2k"* | "win2003"* ) + return 0 ;; + esac - error "Failed to locate file \"$ETFS\" in $desc ISO image!" return 1 } +setMachine() { + + local id="$1" + local iso="$2" + local dir="$3" + local desc="$4" + + case "${id,,}" in + "win9"* | "win2k"* ) + MACHINE="pc-i440fx-2.4" ;; + "winxp"* | "win2003"* | "winvistax86"* | "win7x86"* ) + MACHINE="pc-q35-2.10" ;; + esac + + case "${id,,}" in + "win9"* | "win2k"* | "winxp"* | "win2003"* ) + HV="N" + BOOT_MODE="windows_legacy" ;; + "winvista"* | "win7"* | "win2008"* ) + BOOT_MODE="windows_legacy" ;; + esac + + case "${id,,}" in + "win9"* ) + DISK_TYPE="auto" + ETFS="[BOOT]/Boot-1.44M.img" ;; + "win2k"* ) + DISK_TYPE="auto" + ETFS="[BOOT]/Boot-NoEmul.img" ;; + "winxp"* ) + DISK_TYPE="blk" + if ! prepareXP "$iso" "$dir" "$desc"; then + error "Failed to prepare $desc ISO!" && return 1 + fi ;; + "win2003"* ) + DISK_TYPE="blk" + if ! prepare2k3 "$iso" "$dir" "$desc"; then + error "Failed to prepare $desc ISO!" && return 1 + fi ;; + esac + + return 0 +} + return 0 diff --git a/src/install.sh b/src/install.sh index e4af65f..e4abb25 100644 --- a/src/install.sh +++ b/src/install.sh @@ -515,7 +515,12 @@ detectImage() { fi info "Detecting version from ISO image..." - detectLegacy "$dir" && return 0 + + if detectLegacy "$dir"; then + desc=$(printEdition "$DETECTED" "$DETECTED") + info "Detected: $desc" + return 0 + fi local src wim info src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) @@ -579,39 +584,8 @@ prepareImage() { desc=$(printVersion "$DETECTED" "$DETECTED") - case "${DETECTED,,}" in - "win9"* | "win2k"* ) - MACHINE="pc-i440fx-2.4" ;; - "winvistax86"* | "win7x86"* | "winxp"* | "win2003"* ) - MACHINE="pc-q35-2.10" ;; - esac - - case "${DETECTED,,}" in - "win9"* | "win2k"* | "winxp"* | "win2003"* ) - HV="N" - BOOT_MODE="windows_legacy" ;; - "winvista"* | "win7"* | "win2008"* ) - BOOT_MODE="windows_legacy" ;; - esac - - case "${DETECTED,,}" in - "win9"* ) - DISK_TYPE="auto" - prepare9x "$iso" "$dir" "$desc" && return 0 - error "Failed to prepare $desc ISO!" && return 1 ;; - "win2k"* ) - DISK_TYPE="auto" - prepare2k "$iso" "$dir" "$desc" && return 0 - error "Failed to prepare $desc ISO!" && return 1 ;; - "winxp"* ) - DISK_TYPE="blk" - prepareXP "$iso" "$dir" "$desc" && return 0 - error "Failed to prepare $desc ISO!" && return 1 ;; - "win2003"* ) - DISK_TYPE="blk" - prepare2k3 "$iso" "$dir" "$desc" && return 0 - error "Failed to prepare $desc ISO!" && return 1 ;; - esac + ! setMachine "$DETECTED" "$iso" "$dir" "$desc" && return 1 + skipVersion "$DETECTED" && return 0 if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then @@ -620,13 +594,13 @@ prepareImage() { missing=$(basename "$dir/$EFISYS") [ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS") - error "Failed to locate file \"${missing,,}\" in $desc ISO image!" + error "Failed to locate file \"${missing,,}\" in ISO image!" return 1 fi prepareLegacy "$iso" "$dir" "$desc" && return 0 - error "Failed to extract boot image from $desc ISO image!" + error "Failed to extract boot image from ISO image!" return 1 } @@ -927,10 +901,6 @@ buildImage() { error "File $BOOT does already exist?!" && return 1 fi - if [ ! -f "$dir/$ETFS" ]; then - error "Failed to locate file \"$ETFS\" in ISO image!" && return 1 - fi - base=$(basename "$BOOT") local out="$TMP/${base%.*}.tmp" rm -f "$out" @@ -940,6 +910,12 @@ buildImage() { local msg="Building $desc image..." info "$msg" && html "$msg" + [ -z "$LABEL" ] && LABEL="Windows" + + if [ ! -f "$dir/$ETFS" ]; then + error "Failed to locate file \"$ETFS\" in ISO image!" && return 1 + fi + size=$(du -h -b --max-depth=0 "$dir" | cut -f1) size_gb=$(( (size + 1073741823)/1073741824 )) space=$(df --output=avail -B 1 "$TMP" | tail -n 1) @@ -949,8 +925,6 @@ buildImage() { error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 fi - [ -z "$LABEL" ] && LABEL="Windows" - if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ From fa3b17e87164f159daa5a75fb6ee667cc88ce947 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 28 May 2024 18:20:27 +0200 Subject: [PATCH 222/505] fix: Use NetBIOS on i440fx machines --- src/samba.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index dc49bb0..b6f4654 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -72,19 +72,20 @@ mkdir -p "$share" ! smbd && smbd --debug-stdout -legacy="N" +legacy="" if [ -f "$STORAGE/windows.old" ]; then MT=$(<"$STORAGE/windows.old") - [[ "${MT,,}" == "pc-q35-2"* ]] && legacy="Y" + [[ "${MT,,}" == "pc-q35-2"* ]] && legacy="y" + [[ "${MT,,}" == "pc-i440fx-2"* ]] && legacy="y" fi -if [[ "$legacy" == [Yy1]* ]]; then +if [ -n "$legacy" ]; then [[ "$DHCP" == [Yy1]* ]] && return 0 - # Enable NetBIOS on Windows XP + # Enable NetBIOS on Windows XP and lower ! nmbd && nmbd --debug-stdout else - # Enable Web Service Discovery + # Enable Web Service Discovery on Vista and up wsdd -i "$interface" -p -n "$hostname" & echo "$!" > /var/run/wsdd.pid fi From 651bbe74ebedefc006bf23d37f49c5d83313403a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 29 May 2024 21:54:08 +0200 Subject: [PATCH 223/505] fix: Display driver for Windows 8 / Server 2012 --- src/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index e4abb25..bd56f6f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -666,14 +666,14 @@ addDriver() { case "${id,,}" in "win7x86"* ) folder="w7/x86" ;; "win7x64"* ) folder="w7/amd64" ;; - "win81x64"* ) folder="w10/amd64" ;; + "win81x64"* ) folder="w8.1/amd64" ;; "win10x64"* ) folder="w10/amd64" ;; "win11x64"* ) folder="w11/amd64" ;; "win2025"* ) folder="2k22/amd64" ;; "win2022"* ) folder="2k22/amd64" ;; "win2019"* ) folder="2k19/amd64" ;; "win2016"* ) folder="2k16/amd64" ;; - "win2012"* ) folder="2k16/amd64" ;; + "win2012"* ) folder="2k12R2/amd64" ;; "win2008"* ) folder="2k8R2/amd64" ;; "win10arm64"* ) folder="w10/ARM64" ;; "win11arm64"* ) folder="w11/ARM64" ;; From 09c07d0634f70d458993602357a3bb9df806cd2a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 May 2024 22:58:22 +0200 Subject: [PATCH 224/505] chore(deps): update qemux/qemu-docker docker tag to v5.09 (#555) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 7d6cbd3..f1e6649 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.08 / / +COPY --from=qemux/qemu-docker:5.09 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 900b520f233b65cea30d508c550db45b02167ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Mu=C3=B1iz?= <2011450+luisgmuniz@users.noreply.github.com> Date: Fri, 31 May 2024 07:24:46 +0200 Subject: [PATCH 225/505] feat: Only create readme.txt when folder is empty (#552) --- src/samba.sh | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index b6f4654..134e395 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -21,7 +21,32 @@ if [ ! -d "$share" ] && [ -d "$STORAGE/shared" ]; then fi mkdir -p "$share" -[ -z "$(ls -A "$share")" ] && chmod 777 "$share" + +if [ -z "$(ls -A "$share")" ]; then + + chmod 777 "$share" + + { echo "--------------------------------------------------------" + echo " $APP for Docker v$(</run/version)..." + echo " For support visit $SUPPORT" + echo "--------------------------------------------------------" + echo "" + echo "Using this folder you can share files with the host machine." + echo "" + echo "To change its location, include the following bind mount in your compose file:" + echo "" + echo " volumes:" + echo " - \"/home/user/example:/shared\"" + echo "" + echo "Or in your run command:" + echo "" + echo " -v \"/home/user/example:/shared\"" + echo "" + echo "Replace the example path /home/user/example with the desired shared folder." + echo "" + } | unix2dos > "$share/readme.txt" + +fi { echo "[global]" echo " server string = Dockur" @@ -50,26 +75,6 @@ mkdir -p "$share" echo " force group = root" } > "/etc/samba/smb.conf" -{ echo "--------------------------------------------------------" - echo " $APP for Docker v$(</run/version)..." - echo " For support visit $SUPPORT" - echo "--------------------------------------------------------" - echo "" - echo "Using this folder you can share files with the host machine." - echo "" - echo "To change its location, include the following bind mount in your compose file:" - echo "" - echo " volumes:" - echo " - \"/home/user/example:/shared\"" - echo "" - echo "Or in your run command:" - echo "" - echo " -v \"/home/user/example:/shared\"" - echo "" - echo "Replace the example path /home/user/example with the desired shared folder." - echo "" -} | unix2dos > "$share/readme.txt" - ! smbd && smbd --debug-stdout legacy="" From 71b2c5c110bd101640b70321f67afc13a3d8914b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 02:00:40 +0200 Subject: [PATCH 226/505] chore(deps): update qemux/qemu-docker docker tag to v5.10 (#558) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f1e6649..d98b08c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.09 / / +COPY --from=qemux/qemu-docker:5.10 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From d0848b36cf1f864c0f1e65145307cffa85c0e13f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 4 Jun 2024 15:55:28 +0200 Subject: [PATCH 227/505] fix: Error logging for Samba daemon (#562) --- src/samba.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 134e395..10dd37c 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -75,7 +75,10 @@ fi echo " force group = root" } > "/etc/samba/smb.conf" -! smbd && smbd --debug-stdout +if ! smbd; then + error "Samba daemon failed to start!" + smbd -i --debug-stdout || true +fi legacy="" @@ -86,9 +89,11 @@ if [ -f "$STORAGE/windows.old" ]; then fi if [ -n "$legacy" ]; then - [[ "$DHCP" == [Yy1]* ]] && return 0 # Enable NetBIOS on Windows XP and lower - ! nmbd && nmbd --debug-stdout + if ! nmbd; then + error "NetBIOS daemon failed to start!" + nmbd -i --debug-stdout || true + fi else # Enable Web Service Discovery on Vista and up wsdd -i "$interface" -p -n "$hostname" & From b67f58bf6a37c2789b28b07ea07bfe0d9e974375 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 4 Jun 2024 22:55:01 +0200 Subject: [PATCH 228/505] docs: Add warning about USB drives (#564) --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index 44d461a..a19c4d2 100644 --- a/readme.md +++ b/readme.md @@ -333,6 +333,8 @@ kubectl apply -f kubernetes.yml - /dev/bus/usb ``` + Please note that in case of USB disk drives it is needed to wait until after the installation is completed, before adding them. Otherwise Windows will try to install itself to wrong disk, as the order of the disks will be rearranged. + * ### Is this project legal? Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project would be considered legal. From 6b0ef457bd5cd14ad0082ddd3b14387a3bf97c8a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 4 Jun 2024 23:06:23 +0200 Subject: [PATCH 229/505] docs: Warn about USB disk drives (#565) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index a19c4d2..f31ea0f 100644 --- a/readme.md +++ b/readme.md @@ -333,7 +333,7 @@ kubectl apply -f kubernetes.yml - /dev/bus/usb ``` - Please note that in case of USB disk drives it is needed to wait until after the installation is completed, before adding them. Otherwise Windows will try to install itself to wrong disk, as the order of the disks will be rearranged. + Please note that in case of USB disk drives, it is needed to wait until after the installation is completed before adding them. Otherwise Windows tries to install itself to wrong disk, as the order of the disks will get rearranged. * ### Is this project legal? From 2e638b679a2e3690eb158842a942e1d3c678437f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 18:19:33 +0200 Subject: [PATCH 230/505] chore(deps): update qemux/qemu-docker docker tag to v5.11 (#566) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index d98b08c..d45a0ca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.10 / / +COPY --from=qemux/qemu-docker:5.11 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 074dcde8f7f29c2f796c73fef33d832ac74b7fb8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 8 Jun 2024 18:27:00 +0200 Subject: [PATCH 231/505] docs: USB disk drives (#570) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index f31ea0f..53339aa 100644 --- a/readme.md +++ b/readme.md @@ -333,7 +333,7 @@ kubectl apply -f kubernetes.yml - /dev/bus/usb ``` - Please note that in case of USB disk drives, it is needed to wait until after the installation is completed before adding them. Otherwise Windows tries to install itself to wrong disk, as the order of the disks will get rearranged. + In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. * ### Is this project legal? From 95ae5a853fed1bbf29819286ca9f6999bc062ac2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 8 Jun 2024 18:37:31 +0200 Subject: [PATCH 232/505] docs: Mention macOS container (#571) --- readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/readme.md b/readme.md index 53339aa..a292281 100644 --- a/readme.md +++ b/readme.md @@ -335,6 +335,10 @@ kubectl apply -f kubernetes.yml In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. +* ### How do I run macOS in a container? + + You can use [dockur/macos](https://github.com/dockur/macos) for that. It shares many of the same features, except for the automatic installation. + * ### Is this project legal? Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project would be considered legal. From c4546bf687c1110c0f2d192009436acc7ea3be21 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 9 Jun 2024 12:17:46 +0200 Subject: [PATCH 233/505] docs: Reordered readme (#573) --- readme.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/readme.md b/readme.md index a292281..bc2608b 100644 --- a/readme.md +++ b/readme.md @@ -201,17 +201,6 @@ kubectl apply -f kubernetes.yml MANUAL: "Y" ``` -* ### How do I verify if my system supports KVM? - - To verify if your system supports KVM, run the following commands: - - ```bash - sudo apt install cpu-checker - sudo kvm-ok - ``` - - If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. - * ### How do I change the amount of CPU or RAM? By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM. @@ -335,6 +324,17 @@ kubectl apply -f kubernetes.yml In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. +* ### How do I verify if my system supports KVM? + + To verify if your system supports KVM, run the following commands: + + ```bash + sudo apt install cpu-checker + sudo kvm-ok + ``` + + If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. + * ### How do I run macOS in a container? You can use [dockur/macos](https://github.com/dockur/macos) for that. It shares many of the same features, except for the automatic installation. From bc03034bb05e9cf0587c6b22838bd5b92c94663b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 9 Jun 2024 17:53:09 +0200 Subject: [PATCH 234/505] chore(deps): update qemux/qemu-docker docker tag to v5.12 (#574) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index d45a0ca..ff94b1f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.11 / / +COPY --from=qemux/qemu-docker:5.12 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 0bb55b7bc15bd0489f7eb1acdf1e8ba813075d47 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 9 Jun 2024 22:55:49 +0200 Subject: [PATCH 235/505] docs: KVM troubleshooting (#576) --- readme.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index bc2608b..360f59d 100644 --- a/readme.md +++ b/readme.md @@ -120,14 +120,16 @@ kubectl apply -f kubernetes.yml You can choose between `Arabic`, `Bulgarian`, `Chinese`, `Croatian`, `Czech`, `Danish`, `Dutch`, `Estonian`, `Finnish`, `French`, `German`, `Greek`, `Hebrew`, `Hungarian`, `Italian`, `Japanese`, `Korean`, `Latvian`, `Lithuanian`, `Norwegian`, `Polish`, `Portuguese`, `Romanian`, `Russian`, `Serbian`, `Slovak`, `Slovenian`, `Spanish`, `Swedish`, `Turkish`, `Thai` and `Ukrainian`. - If you want to use a keyboard layout or locale that is not the default for the selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: + If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: ```yaml environment: REGION: "en-US" KEYBOARD: "en-US" ``` - + + Please note that changing these values will have no effect after the installation already has been performed. In that case you can use the Control Panel inside Windows for these settings. + * ### How do I change the storage location? To change the storage location, include the following bind mount in your compose file: @@ -326,14 +328,16 @@ kubectl apply -f kubernetes.yml * ### How do I verify if my system supports KVM? - To verify if your system supports KVM, run the following commands: + To verify that your system supports KVM, run the following commands: ```bash sudo apt install cpu-checker sudo kvm-ok ``` - If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. + If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check whether the virtualization extensions (`Intel VT-x` or `AMD SVM`) are enabled in your BIOS. If you are running the container inside a VM instead of directly on the host, you will also need to enable nested virtualization in its settings. If you are using a cloud provider, you may be out of luck as most of them do not allow nested virtualization for their VPS's. If you are using Windows 10 or MacOS, you are also out of luck, as only Linux and Windows 11 support KVM. + + If you don't receive any error from `kvm-ok` at all, but the container still complains that `/dev/kvm` is missing, it might help to add `privileged: true` to your compose file (or `--privileged` to your `run` command), to rule out any permission issue. * ### How do I run macOS in a container? @@ -341,7 +345,7 @@ kubectl apply -f kubernetes.yml * ### Is this project legal? - Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project would be considered legal. + Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal. ## Stars [![Stars](https://starchart.cc/dockur/windows.svg?variant=adaptive)](https://starchart.cc/dockur/windows) From 2f5f01dbb202ccea6ef694c98af48a49369c9624 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 9 Jun 2024 23:17:42 +0200 Subject: [PATCH 236/505] fix: Detection of EFI images (#577) --- src/define.sh | 8 ++++---- src/entry.sh | 3 ++- src/install.sh | 9 ++++++--- src/mido.sh | 44 ++++++++++++++++++++++++-------------------- src/power.sh | 2 +- 5 files changed, 37 insertions(+), 29 deletions(-) diff --git a/src/define.sh b/src/define.sh index c9e776a..051d79f 100644 --- a/src/define.sh +++ b/src/define.sh @@ -446,7 +446,7 @@ printEdition() { ;; esac - [ -n "$edition" ] && result="$result $edition" + [ -n "$edition" ] && result+=" $edition" echo "$result" return 0 @@ -729,13 +729,13 @@ getLink1() { [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=4821989376 sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" - url="26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=4821989376 sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" - url="26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) size=5675616256 @@ -2158,7 +2158,7 @@ prepareInstall() { echo "\"LimitBlankPasswordUse\"=dword:00000000" echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]" - echo "@=dword:00000000" + echo "@=dword:00000000" echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]" echo "\"RunCount\"=dword:00000000" diff --git a/src/entry.sh b/src/entry.sh index c2c3912..c964635 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -23,7 +23,8 @@ cd /run trap - ERR -info "Booting ${APP}${BOOT_DESC}..." +version=$(qemu-system-x86_64 --version | head -n 1 | cut -d '(' -f 1 | awk '{ print $NF }') +info "Booting ${APP}${BOOT_DESC} using QEMU v$version..." { qemu-system-x86_64 ${ARGS:+ $ARGS} >"$QEMU_OUT" 2>"$QEMU_LOG"; rc=$?; } || : (( rc != 0 )) && error "$(<"$QEMU_LOG")" && exit 15 diff --git a/src/install.sh b/src/install.sh index bd56f6f..0aada6e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -167,10 +167,13 @@ abortInstall() { local dir="$1" local iso="$2" + local efi [[ "${iso,,}" == *".esd" ]] && exit 60 - if [ ! -d "$dir/EFI" ]; then + efi=$(find "$dir" -maxdepth 1 -type d -iname efi | head -n 1) + + if [ -z "$efi" ]; then [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" fi @@ -557,7 +560,7 @@ detectImage() { if [[ "${LANGUAGE,,}" != "en" ]] && [[ "${LANGUAGE,,}" != "en-"* ]]; then language=$(getLanguage "$LANGUAGE" "desc") - desc="$desc ($language)" + desc=+" ($language)" fi info "Detected: $desc" @@ -669,7 +672,7 @@ addDriver() { "win81x64"* ) folder="w8.1/amd64" ;; "win10x64"* ) folder="w10/amd64" ;; "win11x64"* ) folder="w11/amd64" ;; - "win2025"* ) folder="2k22/amd64" ;; + "win2025"* ) folder="w11/amd64" ;; "win2022"* ) folder="2k22/amd64" ;; "win2019"* ) folder="2k19/amd64" ;; "win2016"* ) folder="2k16/amd64" ;; diff --git a/src/mido.sh b/src/mido.sh index 06dc92e..98d0505 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -85,7 +85,7 @@ download_windows() { local url="https://www.microsoft.com/en-us/software-download/windows$windows_version" case "$windows_version" in - 8 | 10) url="${url}ISO";; + 8 | 10) url+="ISO";; esac # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs @@ -416,8 +416,11 @@ getESD() { local fFile="products_filter.xml" { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30; rc=$?; } || : - (( rc == 4 )) && error "Failed to download $winCatalog , network failure!" && return 1 - (( rc != 0 )) && error "Failed to download $winCatalog , reason: $rc" && return 1 + + msg="Failed to download $winCatalog" + (( rc == 4 )) && error "$msg , network failure!" && return 1 + (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 + (( rc != 0 )) && error "$msg , reason: $rc" && return 1 cd "$dir" @@ -495,8 +498,6 @@ verifyFile() { fi error "The downloaded file has an invalid $algo checksum: $hash , while expected value was: $check. Please report this at $SUPPORT/issues" - - rm -f "$iso" return 1 } @@ -519,19 +520,19 @@ downloadFile() { progress="--progress=dot:giga" fi - local msg="Downloading $desc..." - html "$msg" + local msg="Downloading $desc" + html "$msg..." domain=$(echo "$url" | awk -F/ '{print $3}') dots=$(echo "$domain" | tr -cd '.' | wc -c) (( dots > 1 )) && domain=$(expr "$domain" : '.*\.\(.*\..*\)') if [ -n "$domain" ] && [[ "${domain,,}" != *"microsoft.com" ]]; then - msg="Downloading $desc from $domain..." + msg="Downloading $desc from $domain" fi - info "$msg" - /run/progress.sh "$iso" "$size" "Downloading $desc ([P])..." & + info "$msg..." + /run/progress.sh "$iso" "$size" "$msg ([P])..." & { wget "$url" -O "$iso" -q --timeout=30 --show-progress "$progress"; rc=$?; } || : @@ -539,19 +540,18 @@ downloadFile() { if (( rc == 0 )) && [ -f "$iso" ]; then total=$(stat -c%s "$iso") - if [ "$total" -gt 100000000 ]; then - ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 - html "Download finished successfully..." && return 0 + if [ "$total" -lt 100000000 ]; then + error "Downloaded ISO is only $total bytes?" && return 1 fi + ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 + html "Download finished successfully..." && return 0 fi - if (( rc != 4 )); then - error "Failed to download $url , reason: $rc" - else - error "Failed to download $url , network failure!" - fi + msg="Failed to download $url" + (( rc == 4 )) && error "$msg , network failure!" && return 1 + (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 - rm -f "$iso" + error "$msg , reason: $rc" return 1 } @@ -567,6 +567,7 @@ downloadImage() { base=$(basename "$iso") desc=$(fromFile "$base") downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 + rm -f "$iso" return 1 fi @@ -582,7 +583,7 @@ downloadImage() { desc=$(printEdition "$version" "$desc") error "The $language language version of $desc is not available, please switch to English." && return 1 fi - desc="$desc in $language" + desc+=" in $language" fi if isMido "$version" "$lang"; then @@ -591,6 +592,7 @@ downloadImage() { size=$(getMido "$version" "$lang" "size" ) sum=$(getMido "$version" "$lang" "sum") downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 + rm -f "$iso" fi fi @@ -607,6 +609,7 @@ downloadImage() { if getESD "$TMP/esd" "$version" "$lang" "$desc"; then ISO="${ISO%.*}.esd" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 + rm -f "$ISO" ISO="$iso" fi @@ -624,6 +627,7 @@ downloadImage() { size=$(getSize "$i" "$version" "$lang") sum=$(getHash "$i" "$version" "$lang") downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 + rm -f "$iso" fi done diff --git a/src/power.sh b/src/power.sh index 6540a56..e7ceaff 100644 --- a/src/power.sh +++ b/src/power.sh @@ -216,7 +216,7 @@ _graceful_shutdown() { SERIAL="pty" MONITOR="telnet:localhost:$QEMU_PORT,server,nowait,nodelay" -MONITOR="$MONITOR -daemonize -D $QEMU_LOG -pidfile $QEMU_PID" +MONITOR+=" -daemonize -D $QEMU_LOG -pidfile $QEMU_PID" _trap _graceful_shutdown SIGTERM SIGHUP SIGINT SIGABRT SIGQUIT From 5bf54a4158233561a074e5a4f61203a1e7c7defe Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 10 Jun 2024 19:38:32 +0200 Subject: [PATCH 237/505] feat: Make resolution configurable (#582) --- src/define.sh | 54 +++++++++++++++++++++++++++++++++++++++----------- src/install.sh | 21 +++++++++++++++++--- src/samba.sh | 4 ++-- 3 files changed, 62 insertions(+), 17 deletions(-) diff --git a/src/define.sh b/src/define.sh index 051d79f..3c3121d 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${XRES:=""}" +: "${YRES:=""}" : "${VERIFY:=""}" : "${REGION:=""}" : "${MANUAL:=""}" @@ -2073,6 +2075,12 @@ prepareInstall() { fi fi + [ -z "$YRES" ] && YRES="720" + [ -z "$XRES" ] && XRES="1280" + + XHEX=$(printf '%x\n' "$XRES") + YHEX=$(printf '%x\n' "$YRES") + local username="Docker" local password="*" @@ -2118,13 +2126,14 @@ prepareInstall() { echo " OrgName=\"Windows for Docker\"" echo " ProductKey=$key" echo "" - echo "[LicenseFilePrintData]" - echo " AutoMode=PerServer" - echo " AutoUsers=5" - echo "" echo "[Identification]" echo " JoinWorkgroup = WORKGROUP" echo "" + echo "[Display]" + echo " BitsPerPel=32" + echo " XResolution=$XRES" + echo " YResolution=$YRES" + echo "" echo "[Networking]" echo " InstallDefaultComponents=Yes" echo "" @@ -2140,6 +2149,17 @@ prepareInstall() { echo "" } | unix2dos > "$target/WINNT.SIF" + if [[ "$driver" == "2k3" ]]; then + { echo "[Components]" + echo " TerminalServer=On" + echo "" + echo "[LicenseFilePrintData]" + echo " AutoMode=PerServer" + echo " AutoUsers=5" + echo "" + } | unix2dos >> "$target/WINNT.SIF" + fi + { echo "Windows Registry Editor Version 5.00" echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security]" @@ -2157,18 +2177,12 @@ prepareInstall() { echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]" echo "\"LimitBlankPasswordUse\"=dword:00000000" echo "" - echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]" - echo "@=dword:00000000" - echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]" echo "\"RunCount\"=dword:00000000" echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]" echo "\"HideFileExt\"=dword:00000000" echo "" - echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]" - echo "\"DontLaunchSecurityOOBE\"=dword:00000000" - echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" echo "\"DefaultUserName\"=\"$username\"" echo "\"DefaultDomainName\"=\"Dockur\"" @@ -2178,15 +2192,31 @@ prepareInstall() { echo "" echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000]" echo "\"DefaultSettings.BitsPerPel\"=dword:00000020" - echo "\"DefaultSettings.XResolution\"=dword:00000780" - echo "\"DefaultSettings.YResolution\"=dword:00000438" + echo "\"DefaultSettings.XResolution\"=dword:00000$XHEX" + echo "\"DefaultSettings.YResolution\"=dword:00000$YHEX" + echo "" + echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Control\VIDEO\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000]" + echo "\"DefaultSettings.BitsPerPel\"=dword:00000020" + echo "\"DefaultSettings.XResolution\"=dword:00000$XHEX" + echo "\"DefaultSettings.YResolution\"=dword:00000$YHEX" echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]" echo "\"ScreenSaver\"=\"reg add \\\"HKCU\\\\Control Panel\\\\Desktop\\\" /f /v \\\"SCRNSAVE.EXE\\\" /t REG_SZ /d \\\"off\\\"\"" echo "\"ScreenSaverOff\"=\"reg add \\\"HKCU\\\\Control Panel\\\\Desktop\\\" /f /v \\\"ScreenSaveActive\\\" /t REG_SZ /d \\\"0\\\"\"" echo "$oem" + echo "" } | unix2dos > "$dir/\$OEM\$/install.reg" + if [[ "$driver" == "2k3" ]]; then + { echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]" + echo "@=dword:00000000" + echo "" + echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]" + echo "\"DontLaunchSecurityOOBE\"=dword:00000000" + echo "" + } | unix2dos >> "$dir/\$OEM\$/install.reg" + fi + { echo "Set WshShell = WScript.CreateObject(\"WScript.Shell\")" echo "Set WshNetwork = WScript.CreateObject(\"WScript.Network\")" echo "Set oMachine = GetObject(\"WinNT://\" & WshNetwork.ComputerName)" diff --git a/src/install.sh b/src/install.sh index 0aada6e..b8cd8cf 100644 --- a/src/install.sh +++ b/src/install.sh @@ -119,10 +119,11 @@ finishInstall() { fi rm -f "$STORAGE/windows.old" - rm -f "$STORAGE/windows.type" + rm -f "$STORAGE/windows.vga" rm -f "$STORAGE/windows.base" rm -f "$STORAGE/windows.boot" rm -f "$STORAGE/windows.mode" + rm -f "$STORAGE/windows.type" cp -f /run/version "$STORAGE/windows.ver" @@ -155,6 +156,10 @@ finishInstall() { fi fi + if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio" ]] && [[ "${VGA:-}" != "ramfb" ]]; then + echo "$VGA" > "$STORAGE/windows.vga" + fi + if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then echo "$DISK_TYPE" > "$STORAGE/windows.type" fi @@ -613,6 +618,12 @@ updateXML() { local language="$2" local culture region user admin pass keyboard + [ -z "$YRES" ] && YRES="720" + [ -z "$XRES" ] && XRES="1280" + + sed -i "s/<VerticalResolution>1080<\/VerticalResolution>/<VerticalResolution>$YRES<\/VerticalResolution>/g" "$asset" + sed -i "s/<HorizontalResolution>1920<\/HorizontalResolution>/<HorizontalResolution>$XRES<\/HorizontalResolution>/g" "$asset" + culture=$(getLanguage "$language" "culture") if [ -n "$culture" ] && [[ "${culture,,}" != "en-us" ]]; then @@ -967,10 +978,14 @@ bootWindows() { rm -rf "$TMP" - [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" + if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then + [ -z "${VGA:-}" ] && VGA=$(<"$STORAGE/windows.vga") + else + [ -z "${VGA:-}" ] && [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" + fi if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then - DISK_TYPE=$(<"$STORAGE/windows.type") + [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type") fi if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then diff --git a/src/samba.sh b/src/samba.sh index 10dd37c..71f9bcf 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -3,8 +3,8 @@ set -Eeuo pipefail : "${SAMBA:="Y"}" -[[ "$SAMBA" != [Yy1]* ]] && return 0 -[[ "$NETWORK" != [Yy1]* ]] && return 0 +[[ "$SAMBA" == [Nn]* ]] && return 0 +[[ "$NETWORK" == [Nn]* ]] && return 0 hostname="host.lan" interface="dockerbridge" From 577369a54fd73c18cdc132b2b4cf5a09e3d0f171 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 11 Jun 2024 02:10:36 +0200 Subject: [PATCH 238/505] feat: Check diskspace before download (#583) --- Dockerfile | 2 +- src/mido.sh | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index ff94b1f..4f671e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.12 / / +COPY --from=qemux/qemu-docker:5.13 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/mido.sh b/src/mido.sh index 98d0505..897542d 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -418,6 +418,7 @@ getESD() { { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30; rc=$?; } || : msg="Failed to download $winCatalog" + (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 (( rc == 4 )) && error "$msg , network failure!" && return 1 (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 (( rc != 0 )) && error "$msg , reason: $rc" && return 1 @@ -509,10 +510,16 @@ downloadFile() { local size="$4" local lang="$5" local desc="$6" - local rc total progress domain dots + local rc total progress domain dots space folder rm -f "$iso" + if [ -n "$size" ] && [[ "$size" != "0" ]]; then + folder=$(dirname -- "$iso") + space=$(df --output=avail -B 1 "$folder" | tail -n 1) + (( size > space )) && error "Not enough free space left to download file!" && return 1 + fi + # Check if running with interactive TTY or redirected to docker log if [ -t 1 ]; then progress="--progress=bar:noscroll" @@ -548,6 +555,7 @@ downloadFile() { fi msg="Failed to download $url" + (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 (( rc == 4 )) && error "$msg , network failure!" && return 1 (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 From 2ec0e71daf21182b4ee5a2baf559aa340bbb5014 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 11 Jun 2024 20:00:19 +0200 Subject: [PATCH 239/505] docs: KVM information (#585) --- readme.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 360f59d..c454664 100644 --- a/readme.md +++ b/readme.md @@ -335,9 +335,17 @@ kubectl apply -f kubernetes.yml sudo kvm-ok ``` - If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check whether the virtualization extensions (`Intel VT-x` or `AMD SVM`) are enabled in your BIOS. If you are running the container inside a VM instead of directly on the host, you will also need to enable nested virtualization in its settings. If you are using a cloud provider, you may be out of luck as most of them do not allow nested virtualization for their VPS's. If you are using Windows 10 or MacOS, you are also out of luck, as only Linux and Windows 11 support KVM. + If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, please check whether: - If you don't receive any error from `kvm-ok` at all, but the container still complains that `/dev/kvm` is missing, it might help to add `privileged: true` to your compose file (or `--privileged` to your `run` command), to rule out any permission issue. + - the virtualization extensions (`Intel VT-x` or `AMD SVM`) are enabled in your BIOS. + + - you are running an operating system that supports them, like Linux or Windows 11 (macOS and Windows 10 do not unfortunately). + + - you enabled "nested virtualization" if you are running the container inside a virtual machine. + + - you are not using a cloud provider, as most of them do not allow nested virtualization for their VPS's. + + If you didn't receive any error from `kvm-ok` at all, but the container still complains that `/dev/kvm` is missing, it might help to add `privileged: true` to your compose file (or `--privileged` to your `run` command), to rule out any permission issue. * ### How do I run macOS in a container? From 77c12a011371eaac1364681062b6833400a794b7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 11 Jun 2024 20:56:49 +0200 Subject: [PATCH 240/505] docs: Add icons (#586) --- readme.md | 53 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/readme.md b/readme.md index c454664..002e0f4 100644 --- a/readme.md +++ b/readme.md @@ -13,18 +13,18 @@ Windows inside a Docker container. -## Features +## Features ✨ - Multi-language - ISO downloader - KVM acceleration - Web-based viewer -## Video +## Video 📺 [![Youtube](https://img.youtube.com/vi/xhGYobuG508/0.jpg)](https://www.youtube.com/watch?v=xhGYobuG508) -## Usage +## Usage 🐳 Via Docker Compose: @@ -58,7 +58,7 @@ Via Kubernetes: kubectl apply -f kubernetes.yml ``` -## FAQ +## FAQ 💬 * ### How do I use it? @@ -115,10 +115,45 @@ kubectl apply -f kubernetes.yml ```yaml environment: - LANGUAGE: "Chinese" + LANGUAGE: "cn" ``` - - You can choose between `Arabic`, `Bulgarian`, `Chinese`, `Croatian`, `Czech`, `Danish`, `Dutch`, `Estonian`, `Finnish`, `French`, `German`, `Greek`, `Hebrew`, `Hungarian`, `Italian`, `Japanese`, `Korean`, `Latvian`, `Lithuanian`, `Norwegian`, `Polish`, `Portuguese`, `Romanian`, `Russian`, `Serbian`, `Slovak`, `Slovenian`, `Spanish`, `Swedish`, `Turkish`, `Thai` and `Ukrainian`. + + You can choose between: + + - 🇦🇪 **Arabic**: `ar` + - 🇧🇬 **Bulgarian**: `bg` + - 🇨🇳 **Chinese (simplified)**: `cn` + - 🇹🇼 **Chinese (traditional)**: `tw` + - 🇭🇷 **Croation**: `hr` + - 🇨🇿 **Czech**: `cs` + - 🇩🇰 **Danish**: `da` + - 🇳🇱 **Dutch**: `nl` + - 🇬🇧 **English**: `en` + - 🇪🇪 **Estionian**: `et` + - 🇫🇮 **Finnish**: `fi` + - 🇫🇷 **French**: `fr` + - 🇩🇪 **German**: `de` + - 🇬🇷 **Greek**: `el` + - 🇮🇱 **Hebrew**: `he` + - 🇭🇺 **Hungarian**: `hu` + - 🇮🇹 **Italian**: `it` + - 🇯🇵 **Japanese**: `ja` + - 🇰🇷 **Korean**: `ko` + - 🇱🇻 **Latvian**: `lv` + - 🇱🇹 **Lithuanian**: `lt` + - 🇳🇴 **Norwegian**: `nb` + - 🇵🇱 **Polish**: `pl` + - 🇵🇹 **Portuguese**: `pt` + - 🇷🇴 **Romanian**: `ro` + - 🇷🇺 **Russian**: `ru` + - 🇷🇸 **Serbian**: `sr` + - 🇸🇰 **Slovak**: `sk` + - 🇸🇮 **Slovenian**: `sl` + - 🇪🇸 **Spanish**: `es` + - 🇸🇪 **Swedish**: `sv` + - 🇹🇭 **Thai**: `th` + - 🇹🇷 **Turkish**: `tr` + - 🇺🇦 **Ukrainian**: `ua` If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: @@ -355,10 +390,10 @@ kubectl apply -f kubernetes.yml Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal. -## Stars +## Stars 🌟 [![Stars](https://starchart.cc/dockur/windows.svg?variant=adaptive)](https://starchart.cc/dockur/windows) -## Disclaimer +## Disclaimer ⚖️ The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation. From 923839abfc9279a76b64db4dc3b63eb2ea275609 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 11 Jun 2024 21:47:13 +0200 Subject: [PATCH 241/505] docs: Readme (#587) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 002e0f4..a1e60b5 100644 --- a/readme.md +++ b/readme.md @@ -395,7 +395,7 @@ kubectl apply -f kubernetes.yml ## Disclaimer ⚖️ -The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation. +*The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation.* [build_url]: https://github.com/dockur/windows/ [hub_url]: https://hub.docker.com/r/dockurr/windows/ From 01935566eecd3f705623758eebd997ec42f57120 Mon Sep 17 00:00:00 2001 From: ipitio <21136719+ipitio@users.noreply.github.com> Date: Tue, 11 Jun 2024 17:21:55 -0400 Subject: [PATCH 242/505] docs: Add GHCR badge (#580) --- readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/readme.md b/readme.md index a1e60b5..f86d57d 100644 --- a/readme.md +++ b/readme.md @@ -7,6 +7,7 @@ [![Build]][build_url] [![Version]][tag_url] [![Size]][tag_url] +[![Package]][pkg_url] [![Pulls]][hub_url] </div></h1> @@ -400,8 +401,10 @@ kubectl apply -f kubernetes.yml [build_url]: https://github.com/dockur/windows/ [hub_url]: https://hub.docker.com/r/dockurr/windows/ [tag_url]: https://hub.docker.com/r/dockurr/windows/tags +[pkg_url]: https://github.com/dockur/windows/pkgs/container/windows [Build]: https://github.com/dockur/windows/actions/workflows/build.yml/badge.svg [Size]: https://img.shields.io/docker/image-size/dockurr/windows/latest?color=066da5&label=size [Pulls]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker [Version]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5 +[Package]: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fipitio%2Fghcr-pulls%2Fmaster%2Findex.json&query=%24%5B%3F(%40.owner%3D%3D%22dockur%22%20%26%26%20%40.repo%3D%3D%22windows%22%20%26%26%20%40.image%3D%3D%22windows%22)%5D.pulls&logo=github&style=flat&color=066da5&label=pulls From 8b4fe1b2785b41942e6851bca56c90166d2c076a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Jun 2024 23:43:12 +0200 Subject: [PATCH 243/505] chore(deps): update qemux/qemu-docker docker tag to v5.15 (#590) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4f671e0..cd96907 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.13 / / +COPY --from=qemux/qemu-docker:5.15 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 135f8a01efa8b061d0ec2b6eecef1227d33a3ea0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 13 Jun 2024 01:54:44 +0200 Subject: [PATCH 244/505] docs: Languages (#594) --- readme.md | 39 ++------------------------------------- 1 file changed, 2 insertions(+), 37 deletions(-) diff --git a/readme.md b/readme.md index f86d57d..473b92a 100644 --- a/readme.md +++ b/readme.md @@ -116,45 +116,10 @@ kubectl apply -f kubernetes.yml ```yaml environment: - LANGUAGE: "cn" + LANGUAGE: "French" ``` - You can choose between: - - - 🇦🇪 **Arabic**: `ar` - - 🇧🇬 **Bulgarian**: `bg` - - 🇨🇳 **Chinese (simplified)**: `cn` - - 🇹🇼 **Chinese (traditional)**: `tw` - - 🇭🇷 **Croation**: `hr` - - 🇨🇿 **Czech**: `cs` - - 🇩🇰 **Danish**: `da` - - 🇳🇱 **Dutch**: `nl` - - 🇬🇧 **English**: `en` - - 🇪🇪 **Estionian**: `et` - - 🇫🇮 **Finnish**: `fi` - - 🇫🇷 **French**: `fr` - - 🇩🇪 **German**: `de` - - 🇬🇷 **Greek**: `el` - - 🇮🇱 **Hebrew**: `he` - - 🇭🇺 **Hungarian**: `hu` - - 🇮🇹 **Italian**: `it` - - 🇯🇵 **Japanese**: `ja` - - 🇰🇷 **Korean**: `ko` - - 🇱🇻 **Latvian**: `lv` - - 🇱🇹 **Lithuanian**: `lt` - - 🇳🇴 **Norwegian**: `nb` - - 🇵🇱 **Polish**: `pl` - - 🇵🇹 **Portuguese**: `pt` - - 🇷🇴 **Romanian**: `ro` - - 🇷🇺 **Russian**: `ru` - - 🇷🇸 **Serbian**: `sr` - - 🇸🇰 **Slovak**: `sk` - - 🇸🇮 **Slovenian**: `sl` - - 🇪🇸 **Spanish**: `es` - - 🇸🇪 **Swedish**: `sv` - - 🇹🇭 **Thai**: `th` - - 🇹🇷 **Turkish**: `tr` - - 🇺🇦 **Ukrainian**: `ua` + You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estionian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: From d22372f47e76e63761dfc7a0a2afa7b1a52e93cc Mon Sep 17 00:00:00 2001 From: arisudesu <arisudesu@yandex.ru> Date: Thu, 13 Jun 2024 17:30:33 +0300 Subject: [PATCH 245/505] fix: Username customization in localized Windows XP versions (#596) --- src/define.sh | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/src/define.sh b/src/define.sh index 3c3121d..7721537 100644 --- a/src/define.sh +++ b/src/define.sh @@ -2219,9 +2219,45 @@ prepareInstall() { { echo "Set WshShell = WScript.CreateObject(\"WScript.Shell\")" echo "Set WshNetwork = WScript.CreateObject(\"WScript.Network\")" - echo "Set oMachine = GetObject(\"WinNT://\" & WshNetwork.ComputerName)" - echo "Set oInfoUser = GetObject(\"WinNT://\" & WshNetwork.ComputerName & \"/Administrator,user\")" - echo "Set oUser = oMachine.MoveHere(oInfoUser.ADsPath,\"$username\")" + echo "Set Domain = GetObject(\"WinNT://\" & WshNetwork.ComputerName)" + echo "" + echo "Function DecodeSID(binSID)" + echo " ReDim o(LenB(binSID))" + echo "" + echo " For i = 1 To LenB(binSID)" + echo " o(i-1) = AscB(MidB(binSID, i, 1))" + echo " Next" + echo "" + echo " sid = \"S-\" & CStr(o(0)) & \"-\" & OctetArrayToString _" + echo " (Array(o(2), o(3), o(4), o(5), o(6), o(7)))" + echo " For i = 8 To (4 * o(1) + 4) Step 4" + echo " sid = sid & \"-\" & OctetArrayToString _" + echo " (Array(o(i+3), o(i+2), o(i+1), o(i)))" + echo " Next" + echo "" + echo " DecodeSID = sid" + echo "End Function" + echo "" + echo "Function OctetArrayToString(arr)" + echo " v = 0" + echo " For i = 0 To UBound(arr)" + echo " v = v * 256 + arr(i)" + echo " Next" + echo "" + echo " OctetArrayToString = CStr(v)" + echo "End Function" + echo "" + echo "For Each DomainItem in Domain" + echo " If DomainItem.Class = \"User\" Then" + echo " sid = DecodeSID(DomainItem.Get(\"objectSID\"))" + echo " If Left(sid, 9) = \"S-1-5-21-\" And Right(sid, 4) = \"-500\" Then" + echo " LocalAdminADsPath = DomainItem.ADsPath" + echo " Exit For" + echo " End If" + echo " End If" + echo "Next" + echo "" + echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")" echo "" } | unix2dos > "$dir/\$OEM\$/admin.vbs" From e23f042c5f0b0a859d8477962eb2036517b62fe8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 13 Jun 2024 18:15:03 +0200 Subject: [PATCH 246/505] docs: Add markdown alerts (#598) --- readme.md | 65 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/readme.md b/readme.md index 473b92a..c2ea5a3 100644 --- a/readme.md +++ b/readme.md @@ -61,7 +61,7 @@ kubectl apply -f kubernetes.yml ## FAQ 💬 -* ### How do I use it? +### How do I use it? Very simple! These are the steps: @@ -73,7 +73,7 @@ kubectl apply -f kubernetes.yml Enjoy your brand new machine, and don't forget to star this repo! -* ### How do I select the Windows version? +### How do I select the Windows version? By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to be downloaded: @@ -108,9 +108,10 @@ kubectl apply -f kubernetes.yml | `tiny11` | Tiny 11 | 3.8 GB | | `tiny10` | Tiny 10 | 3.6 GB | - To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). +> [!TIP] +> To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). -* ### How do I select the Windows language? +### How do I select the Windows language? By default, the English version of Windows will be downloaded. But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: @@ -121,6 +122,8 @@ kubectl apply -f kubernetes.yml You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estionian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. +### How do I select the keyboard layout? + If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: ```yaml @@ -129,9 +132,10 @@ kubectl apply -f kubernetes.yml KEYBOARD: "en-US" ``` - Please note that changing these values will have no effect after the installation already has been performed. In that case you can use the Control Panel inside Windows for these settings. +> [!NOTE] +> Changing these values will have no effect after the installation already has been performed. Use the control panel inside Windows in that case. -* ### How do I change the storage location? +### How do I change the storage location? To change the storage location, include the following bind mount in your compose file: @@ -142,7 +146,7 @@ kubectl apply -f kubernetes.yml Replace the example path `/var/win` with the desired storage folder. -* ### How do I change the size of the disk? +### How do I change the size of the disk? To expand the default size of 64 GB, add the `DISK_SIZE` setting to your compose file and set it to your preferred capacity: @@ -151,9 +155,10 @@ kubectl apply -f kubernetes.yml DISK_SIZE: "256G" ``` - This can also be used to resize the existing disk to a larger capacity without any data loss. +> [!TIP] +> This can also be used to resize the existing disk to a larger capacity without any data loss. -* ### How do I share files with the host? +### How do I share files with the host? Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. Double-click it and it will show a folder called `Data`, which can be binded to any folder on your host via the compose file: @@ -162,9 +167,12 @@ kubectl apply -f kubernetes.yml - /home/user/example:/shared ``` - The example folder `/home/user/example` will be available as ` \\host.lan\Data`. You can optionally map this path to a drive letter in Windows, for easier access. + The example folder `/home/user/example` will be available as ` \\host.lan\Data`. + +> [!TIP] +> You can map this path to a drive letter in Windows, for easier access. -* ### How do I install a custom image? +### How do I install a custom image? In order to download an unsupported ISO image that is not selectable from the list above, specify the URL of that ISO in the `VERSION` environment variable, for example: @@ -182,7 +190,7 @@ kubectl apply -f kubernetes.yml Replace the example path `/home/user/example.iso` with the filename of your desired ISO file, the value of `VERSION` will be ignored in this case. -* ### How do I run a script after installation? +### How do I run a script after installation? To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). Then bind that folder in your compose file like this: @@ -193,7 +201,7 @@ kubectl apply -f kubernetes.yml The example folder `/home/user/example` will be copied to `C:\OEM` during installation and the containing `install.bat` will be executed during the last step. -* ### How do I perform a manual installation? +### How do I perform a manual installation? It's best to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment. @@ -204,7 +212,7 @@ kubectl apply -f kubernetes.yml MANUAL: "Y" ``` -* ### How do I change the amount of CPU or RAM? +### How do I change the amount of CPU or RAM? By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM. @@ -216,7 +224,7 @@ kubectl apply -f kubernetes.yml CPU_CORES: "4" ``` -* ### How do I configure the username and password? +### How do I configure the username and password? By default, a user called `Docker` is created during the installation, with an empty password. @@ -228,7 +236,7 @@ kubectl apply -f kubernetes.yml PASSWORD: "gates" ``` -* ### How do I connect using RDP? +### How do I connect using RDP? The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. @@ -236,7 +244,7 @@ kubectl apply -f kubernetes.yml There is a RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. -* ### How do I assign an individual IP address to the container? +### How do I assign an individual IP address to the container? By default, the container uses bridge networking, which shares the IP address with the host. @@ -270,9 +278,10 @@ kubectl apply -f kubernetes.yml An added benefit of this approach is that you won't have to perform any port mapping anymore, since all ports will be exposed by default. - Please note that this IP address won't be accessible from the Docker host due to the design of macvlan, which doesn't permit communication between the two. If this is a concern, you need to create a [second macvlan](https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access) as a workaround. +> [!IMPORTANT] +> This IP address won't be accessible from the Docker host due to the design of macvlan, which doesn't permit communication between the two. If this is a concern, you need to create a [second macvlan](https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access) as a workaround. -* ### How can Windows acquire an IP address from my router? +### How can Windows acquire an IP address from my router? After configuring the container for macvlan (see above), it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC. @@ -287,9 +296,10 @@ kubectl apply -f kubernetes.yml - 'c *:* rwm' ``` - Please note that in this mode, the container and Windows will each have their own separate IPs. The container will keep the macvlan IP, and Windows will use the DHCP IP. +> [!NOTE] +> In this mode, the container and Windows will each have their own separate IPs. -* ### How do I add multiple disks? +### How do I add multiple disks? To create additional disks, modify your compose file like this: @@ -302,7 +312,7 @@ kubectl apply -f kubernetes.yml - /mnt/data/example:/storage3 ``` -* ### How do I pass-through a disk? +### How do I pass-through a disk? It is possible to pass-through disk devices directly by adding them to your compose file in this way: @@ -314,7 +324,7 @@ kubectl apply -f kubernetes.yml Use `/disk1` if you want it to become your main drive, and use `/disk2` and higher to add them as secondary drives. -* ### How do I pass-through a USB device? +### How do I pass-through a USB device? To pass-through a USB device, first lookup its vendor and product id via the `lsusb` command, then add them to your compose file like this: @@ -325,9 +335,10 @@ kubectl apply -f kubernetes.yml - /dev/bus/usb ``` - In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. +> [!IMPORTANT] +> In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. -* ### How do I verify if my system supports KVM? +### How do I verify if my system supports KVM? To verify that your system supports KVM, run the following commands: @@ -348,11 +359,11 @@ kubectl apply -f kubernetes.yml If you didn't receive any error from `kvm-ok` at all, but the container still complains that `/dev/kvm` is missing, it might help to add `privileged: true` to your compose file (or `--privileged` to your `run` command), to rule out any permission issue. -* ### How do I run macOS in a container? +### How do I run macOS in a container? You can use [dockur/macos](https://github.com/dockur/macos) for that. It shares many of the same features, except for the automatic installation. -* ### Is this project legal? +### Is this project legal? Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal. From d18b4bff79d38de70675be981dfdc0b236ce55ef Mon Sep 17 00:00:00 2001 From: alexeadem <alex@eadem.com> Date: Thu, 13 Jun 2024 10:25:12 -0700 Subject: [PATCH 247/505] docs: Removed Kubevirt dependancy (#597) --- kubernetes.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/kubernetes.yml b/kubernetes.yml index c46d3df..2fb5888 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -27,9 +27,6 @@ spec: protocol: TCP - containerPort: 3389 protocol: UDP - resources: - limits: - devices.kubevirt.io/kvm: 1 securityContext: privileged: true env: @@ -42,10 +39,15 @@ spec: volumeMounts: - mountPath: /storage name: storage + - mountPath: /dev/kvm + name: dev-kvm volumes: - name: storage persistentVolumeClaim: claimName: windows-pvc + - name: dev-kvm + hostPath: + path: /dev/kvm --- apiVersion: v1 kind: Service @@ -60,14 +62,11 @@ spec: protocol: TCP port: 8006 targetPort: 8006 - nodePort: 48006 - name: tcp-3389 protocol: TCP port: 3389 targetPort: 3389 - nodePort: 43389 - name: udp-3389 protocol: UDP port: 3389 targetPort: 3389 - nodePort: 43388 From e7b831232abd72b9bc2d5441e761a291a4e1944a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 03:11:31 +0200 Subject: [PATCH 248/505] chore(deps): update qemux/qemu-docker docker tag to v5.16 (#600) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index cd96907..32bc617 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.15 / / +COPY --from=qemux/qemu-docker:5.16 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From d2e0b6a90d3f3d4d160f7b5a9f87930b1dcad55c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 16 Jun 2024 06:11:33 +0200 Subject: [PATCH 249/505] docs: Networking (#610) --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index c2ea5a3..27db199 100644 --- a/readme.md +++ b/readme.md @@ -133,7 +133,7 @@ kubectl apply -f kubernetes.yml ``` > [!NOTE] -> Changing these values will have no effect after the installation already has been performed. Use the control panel inside Windows in that case. +> Changing these values will have no effect after the installation has been performed already. Use the control panel inside Windows in that case. ### How do I change the storage location? @@ -283,7 +283,7 @@ kubectl apply -f kubernetes.yml ### How can Windows acquire an IP address from my router? - After configuring the container for macvlan (see above), it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC. + After configuring the container for [macvlan](#how-do-i-assign-an-individual-ip-address-to-the-container), it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC. To enable this mode, add the following lines to your compose file: @@ -336,7 +336,7 @@ kubectl apply -f kubernetes.yml ``` > [!IMPORTANT] -> In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. +> If the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. ### How do I verify if my system supports KVM? From 4cc90d4e1e2aaa27b5ccb42173213a1ea69e8d59 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 11:57:55 +0200 Subject: [PATCH 250/505] chore(deps): update docker/build-push-action action to v6 (#611) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d437ad8..eb6174a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -69,7 +69,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Build Docker image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: context: . push: true From da1e631c9241b53e540ba0c67b219ae2fa9a08a5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 13 Aug 2024 21:18:47 +0200 Subject: [PATCH 251/505] docs: Fix badge (#693) --- readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 27db199..ed4f6df 100644 --- a/readme.md +++ b/readme.md @@ -383,4 +383,5 @@ kubectl apply -f kubernetes.yml [Size]: https://img.shields.io/docker/image-size/dockurr/windows/latest?color=066da5&label=size [Pulls]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker [Version]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5 -[Package]: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fipitio%2Fghcr-pulls%2Fmaster%2Findex.json&query=%24%5B%3F(%40.owner%3D%3D%22dockur%22%20%26%26%20%40.repo%3D%3D%22windows%22%20%26%26%20%40.image%3D%3D%22windows%22)%5D.pulls&logo=github&style=flat&color=066da5&label=pulls +[Package]: +https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fipitio%2Fbackage%2Fmaster%2Findex%2Fdockur%2Fwindows%2Fwindows.json&query=%24.downloads&logo=github&style=flat&color=066da5&label=pulls From fd1fe6f5c8adb3a6400685de4e70baec3a61dfa5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 18 Aug 2024 18:02:59 +0200 Subject: [PATCH 252/505] build: Update VirtIO drivers to v0.1.262 (#697) --- Dockerfile | 12 +- readme.md | 2 +- src/define.sh | 572 +++++++++++++++++++++++-------------------------- src/entry.sh | 2 +- src/install.sh | 17 +- src/mido.sh | 6 +- 6 files changed, 292 insertions(+), 319 deletions(-) diff --git a/Dockerfile b/Dockerfile index 32bc617..4734e92 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.16 / / +COPY --from=qemux/qemu-docker:5.18 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" @@ -28,14 +28,14 @@ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd -ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.248/virtio-win-0.1.248.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.262/virtio-win-0.1.262.tar.xz /drivers.txz EXPOSE 8006 3389 VOLUME /storage -ENV RAM_SIZE "4G" -ENV CPU_CORES "2" -ENV DISK_SIZE "64G" -ENV VERSION "win11" +ENV RAM_SIZE="4G" +ENV CPU_CORES="2" +ENV DISK_SIZE="64G" +ENV VERSION="win11" ENTRYPOINT ["/usr/bin/tini", "-s", "/run/entry.sh"] diff --git a/readme.md b/readme.md index ed4f6df..5af0cb3 100644 --- a/readme.md +++ b/readme.md @@ -91,7 +91,7 @@ kubectl apply -f kubernetes.yml | `win10` | Windows 10 Pro | 5.7 GB | | `ltsc10` | Windows 10 LTSC | 4.6 GB | | `win10e` | Windows 10 Enterprise | 5.2 GB | - |||| + |||| | `win8` | Windows 8.1 Pro | 4.0 GB | | `win8e` | Windows 8.1 Enterprise | 3.7 GB | | `win7` | Windows 7 Enterprise | 3.0 GB | diff --git a/src/define.sh b/src/define.sh index 7721537..b95717b 100644 --- a/src/define.sh +++ b/src/define.sh @@ -14,7 +14,7 @@ set -Eeuo pipefail : "${USERNAME:=""}" : "${PASSWORD:=""}" -MIRRORS=5 +MIRRORS=4 PLATFORM="x64" parseVersion() { @@ -941,45 +941,6 @@ getLink2() { getLink3() { - local id="$1" - local lang="$2" - local ret="$3" - local url="" - local sum="" - local size="" - local host="https://file.cnxiaobai.com/Windows" - - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - - case "${id,,}" in - "core11" ) - size=2159738880 - sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" - url="%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%20core%20x64%20beta%201.iso" - ;; - "tiny11" ) - size=3788177408 - sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280" - url="%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%202311%20x64.iso" - ;; - "tiny10" ) - size=3839819776 - sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" - url="%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny10%2023H2%20x64.iso" - ;; - esac - - case "${ret,,}" in - "sum" ) echo "$sum" ;; - "size" ) echo "$size" ;; - *) [ -n "$url" ] && echo "$host/$url";; - esac - - return 0 -} - -getLink4() { - # Fallbacks for users who cannot connect to the Microsoft servers local id="$1" @@ -989,98 +950,103 @@ getLink4() { local sum="" local size="" local host="https://drive.massgrave.dev" + local s22="windows_server_2022_updated_july_2024_x64_dvd_fee121d6" + local c11="windows_11_consumer_editions_version_23h2_updated_july_2024_x64_dvd_13e3dd80" + local b11="windows_11_business_editions_version_23h2_updated_july_2024_x64_dvd" + local c10="windows_10_consumer_editions_version_22h2_updated_july_2024_x64_dvd_3245b006" + local b10="windows_10_business_editions_version_22h2_updated_july_2024_x64_dvd" culture=$(getLanguage "$lang" "culture") case "${id,,}" in "win11x64" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "da" | "da-"* ) url="da-dk_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "de" | "de-"* ) url="de-de_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "el" | "el-"* ) url="el-gr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${c11}.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${c11}.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${c11}.iso" ;; + "da" | "da-"* ) url="da-dk_${c11}.iso" ;; + "de" | "de-"* ) url="de-de_${c11}.iso" ;; + "el" | "el-"* ) url="el-gr_${c11}.iso" ;; + "gb" | "en-gb" ) url="en-gb_${c11}.iso" ;; "en" | "en-"* ) - size=7004780544 - sum="a6c21313210182e0315054789a2b658b77394d5544b69b5341075492f89f51e5" - url="en-us_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "es" | "es-"* ) url="es-es_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "et" | "et-"* ) url="et-ee_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "he" | "he-"* ) url="he-il_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "it" | "it-"* ) url="it-it_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "th" | "th-"* ) url="th-th_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + size=7165775872 + sum="b84e497c019e95ba9aee9da3d86e679454cba1a426593711f0f4d426f48fc845" + url="en-us_${c11}.iso" ;; + "mx" | "es-mx" ) url="es-mx_${c11}.iso" ;; + "es" | "es-"* ) url="es-es_${c11}.iso" ;; + "et" | "et-"* ) url="et-ee_${c11}.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${c11}.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${c11}.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${c11}.iso" ;; + "he" | "he-"* ) url="he-il_${c11}.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${c11}.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${c11}.iso" ;; + "it" | "it-"* ) url="it-it_${c11}.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${c11}.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${c11}.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${c11}.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${c11}.iso" ;; + "nb" | "nb-"* ) url="nb-no_${c11}.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${c11}.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${c11}.iso" ;; + "br" | "pt-br" ) url="pt-br_${c11}.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${c11}.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${c11}.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${c11}.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${c11}.iso" ;; + "sl" | "sl-"* ) url="sl-si_${c11}.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${c11}.iso" ;; + "sv" | "sv-"* ) url="sv-se_${c11}.iso" ;; + "th" | "th-"* ) url="th-th_${c11}.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${c11}.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${c11}.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${c11}.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${c11}.iso" ;; esac ;; "win11x64-enterprise" | "win11x64-enterprise-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_7c2ed97c.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b04d691c.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_a03b763a.iso" ;; - "da" | "da-"* ) url="da-dk_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b7b16bf7.iso" ;; - "de" | "de-"* ) url="de-de_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b8a95188.iso" ;; - "el" | "el-"* ) url="el-gr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_c80dd818.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_0716ab50.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${b11}_39c553d6.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b11}_eb13b76c.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b11}_397728ab.iso" ;; + "da" | "da-"* ) url="da-dk_${b11}_4df23c83.iso" ;; + "de" | "de-"* ) url="de-de_${b11}_9a27972d.iso" ;; + "el" | "el-"* ) url="el-gr_${b11}_c8957889.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b11}_deb8a337.iso" ;; "en" | "en-"* ) - size=6879023104 - sum="3d4d388d6ffa371956304fa7401347b4535fd10e3137978a8f7750b790a43521" - url="en-us_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_349cd577.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_79352ef9.iso" ;; - "es" | "es-"* ) url="es-es_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_252a527a.iso" ;; - "et" | "et-"* ) url="et-ee_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_3952b855.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_a90c9768.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_f4e143d8.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_9f143fd4.iso" ;; - "he" | "he-"* ) url="he-il_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_767966f8.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_dcc7bb81.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_305a2313.iso" ;; - "it" | "it-"* ) url="it-it_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_f0af2584.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_1b3949b3.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b34a9c97.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_dbab7eb4.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_55d75975.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_7baab32f.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_d223773d.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_55984e5b.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_151a4636.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_37cc9525.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_9a2982f1.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_a81ee700.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_e71e6779.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_d48dc41a.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_86a8483f.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_96fc11d1.iso" ;; - "th" | "th-"* ) url="th-th_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_282dc814.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_26e6c580.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b2d33085.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_6aa057e6.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_3db5a62b.iso" ;; + size=7035154432 + sum="651e02efa8efe5c3ed6f99f91a934604add93d0fa28a5e7e29898d47bc92eba5" + url="en-us_${b11}_5a07b6a4.iso" ;; + "mx" | "es-mx" ) url="es-mx_${b11}_2c5e4da9.iso" ;; + "es" | "es-"* ) url="es-es_${b11}_4fde1bd2.iso" ;; + "et" | "et-"* ) url="et-ee_${b11}_dbdba8e6.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b11}_84ef21ee.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b11}_2cfbb3d3.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b11}_f922413d.iso" ;; + "he" | "he-"* ) url="he-il_${b11}_277cd23a.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b11}_65579a9d.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b11}_3e8637f5.iso" ;; + "it" | "it-"* ) url="it-it_${b11}_da0f0ca1.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b11}_86b39781.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b11}_0a970f66.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b11}_8429ce4c.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b11}_8eb4a9a7.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b11}_2ebae5cb.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b11}_6dba664c.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b11}_829bf56a.iso" ;; + "br" | "pt-br" ) url="pt-br_${b11}_cd555922.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b11}_ad4cf2e0.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b11}_2340f750.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b11}_4207eb9f.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b11}_a1ba40e5.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b11}_282cc939.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b11}_b4915859.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b11}_879e706a.iso" ;; + "th" | "th-"* ) url="th-th_${b11}_f51e12b1.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b11}_b52351ad.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b11}_4a9948b3.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_75853f9b.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b11}_8c3fbaa8.iso" ;; esac ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) @@ -1097,92 +1063,92 @@ getLink4() { ;; "win10x64" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "da" | "da-"* ) url="da-dk_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "de" | "de-"* ) url="de-de_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "el" | "el-"* ) url="el-gr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${c10}.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${c10}.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${c10}.iso" ;; + "da" | "da-"* ) url="da-dk_${c10}.iso" ;; + "de" | "de-"* ) url="de-de_${c10}.iso" ;; + "el" | "el-"* ) url="el-gr_${c10}.iso" ;; + "gb" | "en-gb" ) url="en-gb_${c10}.iso" ;; "en" | "en-"* ) - size=6605459456 - sum="b072627c9b8d9f62af280faf2a8b634376f91dc73ea1881c81943c151983aa4a" - url="en-us_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "es" | "es-"* ) url="es-es_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "et" | "et-"* ) url="et-ee_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "he" | "he-"* ) url="he-il_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "it" | "it-"* ) url="it-it_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "th" | "th-"* ) url="th-th_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + size=7151144960 + sum="2eda4701d3e4061eccfdf0ad264b69392e67e2a29fef9eb7d7a57150b08e87e0" + url="en-us_${c10}.iso" ;; + "mx" | "es-mx" ) url="es-mx_${c10}.iso" ;; + "es" | "es-"* ) url="es-es_${c10}.iso" ;; + "et" | "et-"* ) url="et-ee_${c10}.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${c10}.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${c10}.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${c10}.iso" ;; + "he" | "he-"* ) url="he-il_${c10}.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${c10}.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${c10}.iso" ;; + "it" | "it-"* ) url="it-it_${c10}.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${c10}.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${c10}.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${c10}.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${c10}.iso" ;; + "nb" | "nb-"* ) url="nb-no_${c10}.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${c10}.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${c10}.iso" ;; + "br" | "pt-br" ) url="pt-br_${c10}.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${c10}.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${c10}.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${c10}.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${c10}.iso" ;; + "sl" | "sl-"* ) url="sl-si_${c10}.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${c10}.iso" ;; + "sv" | "sv-"* ) url="sv-se_${c10}.iso" ;; + "th" | "th-"* ) url="th-th_${c10}.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${c10}.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${c10}.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${c10}.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${c10}.iso" ;; esac ;; "win10x64-enterprise" | "win10x64-enterprise-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4453f818.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_1777c1d1.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_c57cc386.iso" ;; - "da" | "da-"* ) url="da-dk_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_45f3ae0c.iso" ;; - "de" | "de-"* ) url="de-de_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_8042d5ca.iso" ;; - "el" | "el-"* ) url="el-gr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_60cc062b.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_da84fbf3.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${b10}_c297cc0d.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b10}_30c9ad0e.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b10}_0a65fb0a.iso" ;; + "da" | "da-"* ) url="da-dk_${b10}_57521eab.iso" ;; + "de" | "de-"* ) url="de-de_${b10}_9beb944c.iso" ;; + "el" | "el-"* ) url="el-gr_${b10}_4f7921a5.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b10}_77325f32.iso" ;; "en" | "en-"* ) - size=6428377088 - sum="05fe9de04c2626bd00fbe69ad19129b2dbb75a93a2fe030ebfb2256d937ceab8" - url="en-us_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_c00090a7.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_87806b10.iso" ;; - "es" | "es-"* ) url="es-es_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_a464088d.iso" ;; - "et" | "et-"* ) url="et-ee_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_bd09a0ce.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4d76cfbd.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_40643c76.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_8ca89ac8.iso" ;; - "he" | "he-"* ) url="he-il_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_804bcaf0.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4c4f5b26.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_43302dfb.iso" ;; - "it" | "it-"* ) url="it-it_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_73996e82.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_0aaece93.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_37654eaa.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_83c6a9b7.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_2b80cd3c.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_2a274012.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_5eae56c5.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_6497a429.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_de63f2f7.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_a95933fb.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_d008e588.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_12b02d35.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_7caf6b4f.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_e1e76668.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_b72c40ce.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4800fcd8.iso" ;; - "th" | "th-"* ) url="th-th_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_5077fb45.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_7703a6c4.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_37caf402.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_35f0e5a7.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_a2873093.iso" ;; + size=6978310144 + sum="7847abd6f39abd02dc8089c4177d354f9eb66fa0ee2fe8ae20e596e675d1ab67" + url="en-us_${b10}_c004521a.iso" ;; + "mx" | "es-mx" ) url="es-mx_${b10}_56d48916.iso" ;; + "es" | "es-"* ) url="es-es_${b10}_4e057a75.iso" ;; + "et" | "et-"* ) url="et-ee_${b10}_8e8c70da.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b10}_023ba9da.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b10}_e4b0fd01.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b10}_8a45f12e.iso" ;; + "he" | "he-"* ) url="he-il_${b10}_8ce094aa.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b10}_668d9ec4.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b10}_7f70b22c.iso" ;; + "it" | "it-"* ) url="it-it_${b10}_3c49c82b.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b10}_383799d9.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b10}_f0249763.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b10}_a13593c6.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b10}_4a00695c.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b10}_c949d1f1.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b10}_bb1f8a40.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b10}_26b503cc.iso" ;; + "br" | "pt-br" ) url="pt-br_${b10}_10757645.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b10}_07f873cd.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b10}_e2c973f8.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b10}_e86552ca.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b10}_03d84a11.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b10}_ad745ec0.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b10}_36a086b8.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b10}_756d5d5b.iso" ;; + "th" | "th-"* ) url="th-th_${b10}_cf4bb364.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b10}_3ceed34b.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b10}_e6a5235d.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_fac0f45b.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b10}_53d015e8.iso" ;; esac ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) @@ -1307,129 +1273,129 @@ getLink4() { ;; "win2022" | "win2022-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "de" | "de-"* ) url="de-de_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${s22}.iso" ;; + "de" | "de-"* ) url="de-de_${s22}.iso" ;; "en" | "en-"* ) - size=5515755520 - sum="7f41d603224e8a0bf34ba957d3abf0a02437ab75000dd758b5ce3f050963e91f" - url="en-us_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "es" | "es-"* ) url="es-es_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "it" | "it-"* ) url="it-it_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + size=5933062144 + sum="5b6c4fab1027ed15cbd4179b8a41b184304ba362fa0053b3bad6ac070ee74281" + url="en-us_${s22}.iso" ;; + "es" | "es-"* ) url="es-es_${s22}.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${s22}.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${s22}.iso" ;; + "it" | "it-"* ) url="it-it_${s22}.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${s22}.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${s22}.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${s22}.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${s22}.iso" ;; + "br" | "pt-br" ) url="pt-br_${s22}.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${s22}.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${s22}.iso" ;; + "sv" | "sv-"* ) url="sv-se_${s22}.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${s22}.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${s22}.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${s22}.iso" ;; esac ;; "win2019" | "win2019-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2019_x64_dvd_65383121.iso" ;; - "de" | "de-"* ) url="de_windows_server_2019_x64_dvd_17559a5b.iso" ;; + "cs" | "cs-"* ) url="cs-cz_windows_server_2019_x64_dvd_3781c31c.iso" ;; + "de" | "de-"* ) url="de-de_windows_server_2019_x64_dvd_132f7aa4.iso" ;; "en" | "en-"* ) - size=4843268096 - sum="4c5dd63efee50117986a2e38d4b3a3fbaf3c1c15e2e7ea1d23ef9d8af148dd2d" - url="en_windows_server_2019_x64_dvd_4cb967d8.iso" ;; - "es" | "es-"* ) url="es_windows_server_2019_x64_dvd_dd6b7747.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2019_x64_dvd_d936fc7a.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2019_x64_dvd_c8f2c460.iso" ;; - "it" | "it-"* ) url="it_windows_server_2019_x64_dvd_03c34df6.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2019_x64_dvd_260a1d93.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2019_x64_dvd_8778047d.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2019_x64_dvd_82f9a152.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2019_x64_dvd_2cd7adba.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2019_x64_dvd_e078dea6.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2019_x64_dvd_e8fadd22.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2019_x64_dvd_3411c84a.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2019_x64_dvd_ce3d1a8d.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2019_x64_dvd_475b2d44.iso" ;; - "zh-hk" | "zh-tw" ) url="ct_windows_server_2019_x64_dvd_b776f44b.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2019_x64_dvd_4de40f33.iso" ;; + size=5651695616 + sum="ea247e5cf4df3e5829bfaaf45d899933a2a67b1c700a02ee8141287a8520261c" + url="en-us_windows_server_2019_x64_dvd_f9475476.iso" ;; + "es" | "es-"* ) url="es-es_windows_server_2019_x64_dvd_3ce0fd9e.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_server_2019_x64_dvd_f6f6acf6.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_server_2019_x64_dvd_1d834c46.iso" ;; + "it" | "it-"* ) url="it-it_windows_server_2019_x64_dvd_454267de.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_server_2019_x64_dvd_3899c3a3.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_server_2019_x64_dvd_84101c0a.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_server_2019_x64_dvd_f69d914e.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_server_2019_x64_dvd_a50263e1.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_server_2019_x64_dvd_aee8c1c2.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_server_2019_x64_dvd_464373e8.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_server_2019_x64_dvd_e02b76ba.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_server_2019_x64_dvd_48c1aeff.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_server_2019_x64_dvd_b51af600.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2019_x64_dvd_a4c80409.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_server_2019_x64_dvd_19d65722.iso" ;; esac ;; "win2016" | "win2016-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2016_x64_dvd_9327749.iso" ;; - "de" | "de-"* ) url="de_windows_server_2016_x64_dvd_9327757.iso" ;; + "cs" | "cs-"* ) url="cs_windows_server_2016_vl_x64_dvd_11636699.iso" ;; + "de" | "de-"* ) url="de_windows_server_2016_vl_x64_dvd_11636696.iso" ;; "en" | "en-"* ) - size=5653628928 - sum="4caeb24b661fcede81cd90661aec31aa69753bf49a5ac247253dd021bc1b5cbb" - url="en_windows_server_2016_x64_dvd_9327751.iso" ;; - "es" | "es-"* ) url="es_windows_server_2016_x64_dvd_9327767.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2016_x64_dvd_9327754.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2016_x64_dvd_9327759.iso" ;; - "it" | "it-"* ) url="it_windows_server_2016_x64_dvd_9327760.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2016_x64_dvd_9327761.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2016_x64_dvd_9327762.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2016_x64_dvd_9327750.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2016_x64_dvd_9327763.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2016_x64_dvd_9327764.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2016_x64_dvd_9327765.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2016_x64_dvd_9327766.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2016_x64_dvd_9327768.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2016_x64_dvd_9327769.iso" ;; - "zh-hk" | "zh-tw" ) url="ct_windows_server_2016_x64_dvd_9327748.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2016_x64_dvd_9327743.iso" ;; + size=6003804160 + sum="47919ce8b4993f531ca1fa3f85941f4a72b47ebaa4d3a321fecf83ca9d17e6b8" + url="en_windows_server_2016_vl_x64_dvd_11636701.iso" ;; + "es" | "es-"* ) url="es_windows_server_2016_vl_x64_dvd_11636712.iso" ;; + "fr" | "fr-"* ) url="fr_windows_server_2016_vl_x64_dvd_11636729.iso" ;; + "hu" | "hu-"* ) url="hu_windows_server_2016_vl_x64_dvd_11636720.iso" ;; + "it" | "it-"* ) url="it_windows_server_2016_vl_x64_dvd_11636710.iso" ;; + "ja" | "ja-"* ) url="ja_windows_server_2016_vl_x64_dvd_11645964.iso" ;; + "ko" | "ko-"* ) url="ko_windows_server_2016_vl_x64_dvd_11636709.iso" ;; + "nl" | "nl-"* ) url="nl_windows_server_2016_vl_x64_dvd_11636731.iso" ;; + "pl" | "pl-"* ) url="pl_windows_server_2016_vl_x64_dvd_11636719.iso" ;; + "br" | "pt-br" ) url="pt_windows_server_2016_vl_x64_dvd_11636697.iso" ;; + "pt" | "pt-"* ) url="pp_windows_server_2016_vl_x64_dvd_11637454.iso" ;; + "ru" | "ru-"* ) url="ru_windows_server_2016_vl_x64_dvd_11636694.iso" ;; + "sv" | "sv-"* ) url="sv_windows_server_2016_vl_x64_dvd_11636706.iso" ;; + "tr" | "tr-"* ) url="tr_windows_server_2016_vl_x64_dvd_11636725.iso" ;; + "zh-hk" | "zh-tw" ) url="ct_windows_server_2016_vl_x64_dvd_11636717.iso" ;; + "zh" | "zh-"* ) url="cn_windows_server_2016_vl_x64_dvd_11636695.iso" ;; esac ;; "win2012r2" | "win2012r2-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2012_r2_with_update_x64_dvd_6052695.iso" ;; - "de" | "de-"* ) url="de_windows_server_2012_r2_with_update_x64_dvd_6052720.iso" ;; + "cs" | "cs-"* ) url="cs_windows_server_2012_r2_vl_with_update_x64_dvd_6052752.iso" ;; + "de" | "de-"* ) url="de_windows_server_2012_r2_vl_with_update_x64_dvd_6052780.iso" ;; "en" | "en-"* ) - size=5397889024 - sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" - url="en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso" ;; - "es" | "es-"* ) url="es_windows_server_2012_r2_with_update_x64_dvd_6052769.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2012_r2_with_update_x64_dvd_6052713.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2012_r2_with_update_x64_dvd_6052727.iso" ;; - "it" | "it-"* ) url="it_windows_server_2012_r2_with_update_x64_dvd_6052734.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2012_r2_with_update_x64_dvd_6052738.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2012_r2_with_update_x64_dvd_6052743.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2012_r2_with_update_x64_dvd_6052701.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2012_r2_with_update_x64_dvd_6052749.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2012_r2_with_update_x64_dvd_6052754.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2012_r2_with_update_x64_dvd_6052758.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2012_r2_with_update_x64_dvd_6052763.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2012_r2_with_update_x64_dvd_6052773.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2012_r2_with_update_x64_dvd_6052778.iso" ;; - "zh-hk" ) url="hk_windows_server_2012_r2_with_update_x64_dvd_6052731.iso" ;; - "zh-tw" ) url="tw_windows_server_2012_r2_with_update_x64_dvd_6052736.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2012_r2_with_update_x64_dvd_6052725.iso" ;; + size=5400115200 + sum="0e883ce28eb5c6f58a3a3007be978d43edb1035a4585506c1c4504c9e143408d" + url="en_windows_server_2012_r2_vl_with_update_x64_dvd_6052766.iso" ;; + "es" | "es-"* ) url="es_windows_server_2012_r2_vl_with_update_x64_dvd_6052831.iso" ;; + "fr" | "fr-"* ) url="fr_windows_server_2012_r2_vl_with_update_x64_dvd_6052772.iso" ;; + "hu" | "hu-"* ) url="hu_windows_server_2012_r2_vl_with_update_x64_dvd_6052786.iso" ;; + "it" | "it-"* ) url="it_windows_server_2012_r2_vl_with_update_x64_dvd_6052792.iso" ;; + "ja" | "ja-"* ) url="ja_windows_server_2012_r2_vl_with_update_x64_dvd_6052800.iso" ;; + "ko" | "ko-"* ) url="ko_windows_server_2012_r2_vl_with_update_x64_dvd_6052806.iso" ;; + "nl" | "nl-"* ) url="nl_windows_server_2012_r2_vl_with_update_x64_dvd_6052760.iso" ;; + "pl" | "pl-"* ) url="pl_windows_server_2012_r2_vl_with_update_x64_dvd_6052815.iso" ;; + "br" | "pt-br" ) url="pt_windows_server_2012_r2_vl_with_update_x64_dvd_6052819.iso" ;; + "pt" | "pt-"* ) url="pp_windows_server_2012_r2_vl_with_update_x64_dvd_6052823.iso" ;; + "ru" | "ru-"* ) url="ru_windows_server_2012_r2_vl_with_update_x64_dvd_6052827.iso" ;; + "sv" | "sv-"* ) url="sv_windows_server_2012_r2_vl_with_update_x64_dvd_6052835.iso" ;; + "tr" | "tr-"* ) url="tr_windows_server_2012_r2_vl_with_update_x64_dvd_6052838.iso" ;; + "zh-hk" ) url="hk_windows_server_2012_r2_vl_with_update_x64_dvd_6052739.iso" ;; + "zh-tw" ) url="tw_windows_server_2012_r2_vl_with_update_x64_dvd_6052746.iso" ;; + "zh" | "zh-"* ) url="cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso" ;; esac ;; "win2008r2" | "win2008r2-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2008_r2_with_sp1_x64_dvd_617602.iso" ;; - "de" | "de-"* ) url="de_windows_server_2008_r2_with_sp1_x64_dvd_617380.iso" ;; + "cs" | "cs-"* ) url="cs_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617402.iso" ;; + "de" | "de-"* ) url="de_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617404.iso" ;; "en" | "en-"* ) - size=3166584832 - sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" - url="en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso" ;; - "es" | "es-"* ) url="es_windows_server_2008_r2_with_sp1_x64_dvd_617398.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2008_r2_with_sp1_x64_dvd_617591.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2008_r2_with_sp1_x64_dvd_617383.iso" ;; - "it" | "it-"* ) url="it_windows_server_2008_r2_with_sp1_x64_dvd_617391.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2008_r2_with_sp1_x64_dvd_617387.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2008_r2_with_sp1_x64_dvd_617385.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2008_r2_with_sp1_x64_dvd_617597.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2008_r2_with_sp1_x64_dvd_617388.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2008_r2_with_sp1_x64_dvd_617599.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2008_r2_with_sp1_x64_dvd_617382.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2008_r2_with_sp1_x64_dvd_617389.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2008_r2_with_sp1_x64_dvd_617393.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2008_r2_with_sp1_x64_dvd_617390.iso" ;; - "zh-hk" ) url="hk_windows_server_2008_r2_with_sp1_x64_dvd_617586.iso" ;; - "zh-tw" ) url="tw_windows_server_2008_r2_with_sp1_x64_dvd_617595.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2008_r2_with_sp1_x64_dvd_617598.iso" ;; + size=3166720000 + sum="9b0cd5b11cc2e92badb74450f0cac03006d3c63a2ada36cb1eb95c1bf4b2608f" + url="en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso" ;; + "es" | "es-"* ) url="es_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617410.iso" ;; + "fr" | "fr-"* ) url="fr_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617392.iso" ;; + "hu" | "hu-"* ) url="hu_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617415.iso" ;; + "it" | "it-"* ) url="it_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_619596.iso" ;; + "ja" | "ja-"* ) url="ja_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_631466.iso" ;; + "ko" | "ko-"* ) url="ko_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617409.iso" ;; + "nl" | "nl-"* ) url="nl_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617395.iso" ;; + "pl" | "pl-"* ) url="pl_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617397.iso" ;; + "br" | "pt-br" ) url="pt_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617394.iso" ;; + "pt" | "pt-"* ) url="pp_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617411.iso" ;; + "ru" | "ru-"* ) url="ru_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617421.iso" ;; + "sv" | "sv-"* ) url="sv_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617400.iso" ;; + "tr" | "tr-"* ) url="tr_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617416.iso" ;; + "zh-hk" ) url="hk_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617386.iso" ;; + "zh-tw" ) url="tw_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617405.iso" ;; + "zh" | "zh-"* ) url="cn_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617396.iso" ;; esac ;; "win7x64" | "win7x64-enterprise" ) @@ -1820,7 +1786,7 @@ getLink4() { return 0 } -getLink5() { +getLink4() { local id="$1" local lang="$2" diff --git a/src/entry.sh b/src/entry.sh index c964635..b037cdc 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -30,7 +30,7 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..." (( rc != 0 )) && error "$(<"$QEMU_LOG")" && exit 15 terminal -( sleep 10; boot ) & +( sleep 30; boot ) & tail -fn +0 "$QEMU_LOG" 2>/dev/null & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & wait $! || : diff --git a/src/install.sh b/src/install.sh index b8cd8cf..ac051ff 100644 --- a/src/install.sh +++ b/src/install.sh @@ -620,7 +620,7 @@ updateXML() { [ -z "$YRES" ] && YRES="720" [ -z "$XRES" ] && XRES="1280" - + sed -i "s/<VerticalResolution>1080<\/VerticalResolution>/<VerticalResolution>$YRES<\/VerticalResolution>/g" "$asset" sed -i "s/<HorizontalResolution>1920<\/HorizontalResolution>/<HorizontalResolution>$XRES<\/HorizontalResolution>/g" "$asset" @@ -683,7 +683,7 @@ addDriver() { "win81x64"* ) folder="w8.1/amd64" ;; "win10x64"* ) folder="w10/amd64" ;; "win11x64"* ) folder="w11/amd64" ;; - "win2025"* ) folder="w11/amd64" ;; + "win2025"* ) folder="2k25/amd64" ;; "win2022"* ) folder="2k22/amd64" ;; "win2019"* ) folder="2k19/amd64" ;; "win2016"* ) folder="2k16/amd64" ;; @@ -701,9 +701,16 @@ addDriver() { [ ! -d "$path/$driver/$folder" ] && return 0 - if [[ "${id,,}" == "winvista"* ]]; then - [[ "${driver,,}" == "viorng" ]] && return 0 - fi + case "${id,,}" in + "winvista"* ) + [[ "${driver,,}" == "viorng" ]] && return 0 + ;; + "win2025"* | "win11x64-iot"* | "win11x64-ltsc"* ) + [[ "${driver,,}" == "smbus" ]] && return 0 + [[ "${driver,,}" == "pvpanic" ]] && return 0 + [[ "${driver,,}" == "viogpudo" ]] && return 0 + ;; + esac local dest="$path/$target/$driver" mv "$path/$driver/$folder" "$dest" diff --git a/src/mido.sh b/src/mido.sh index 897542d..8773263 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -191,10 +191,10 @@ download_windows_eval() { windows_version="windows-11-enterprise" ;; "win11${PLATFORM,,}-enterprise-iot-eval" ) enterprise_type="iot" - windows_version="windows-11-iot-enterprise-ltsc" ;; + windows_version="windows-11-iot-enterprise-ltsc-eval" ;; "win11${PLATFORM,,}-enterprise-ltsc-eval" ) enterprise_type="iot" - windows_version="windows-11-iot-enterprise-ltsc" ;; + windows_version="windows-11-iot-enterprise-ltsc-eval" ;; "win10${PLATFORM,,}-enterprise-eval" ) enterprise_type="enterprise" windows_version="windows-10-enterprise" ;; @@ -548,7 +548,7 @@ downloadFile() { if (( rc == 0 )) && [ -f "$iso" ]; then total=$(stat -c%s "$iso") if [ "$total" -lt 100000000 ]; then - error "Downloaded ISO is only $total bytes?" && return 1 + error "Invalid download link: $url (is only $total bytes?). Please report this issue." && return 1 fi ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 html "Download finished successfully..." && return 0 From cac5196c0976e0098da89ddb7503c672d860a8fc Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 27 Aug 2024 18:30:29 +0200 Subject: [PATCH 253/505] docs: Update package URL (#716) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 5af0cb3..7054e6b 100644 --- a/readme.md +++ b/readme.md @@ -384,4 +384,4 @@ kubectl apply -f kubernetes.yml [Pulls]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker [Version]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5 [Package]: -https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fipitio%2Fbackage%2Fmaster%2Findex%2Fdockur%2Fwindows%2Fwindows.json&query=%24.downloads&logo=github&style=flat&color=066da5&label=pulls +https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fipitio.github.io%2Fbackage%2Fdockur%2Fwindows%2Fwindows.json&query=%24.downloads&logo=github&style=flat&color=066da5&label=pulls From c3177e279a37198d36696461ca2853d068ae83db Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 28 Aug 2024 13:14:09 +0200 Subject: [PATCH 254/505] fix: Update Win10 checksum (#717) --- src/define.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index b95717b..1706a31 100644 --- a/src/define.sh +++ b/src/define.sh @@ -740,8 +740,8 @@ getLink1() { url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) - size=5675616256 - sum="99c13b3afb1375661fc79496025cabe3f9ef5a555fc8ea767a48937b0f4bcace" + size=5623582720 + sum="57371545d752a79a8a8b163b209c7028915da661de83516e06ddae913290a855" url="10/en-us_windows_10_22h2_x64.iso" ;; "win10x64-iot" | "win10x64-enterprise-iot-eval" ) From a2a8ad8243935118877df966c5c06cc1f954b837 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 5 Sep 2024 20:03:34 +0200 Subject: [PATCH 255/505] fix: Update download mirrors (#729) --- Dockerfile | 4 +- readme.md | 3 +- src/define.sh | 259 ++++++++++++++++++-------------------------------- src/mido.sh | 2 +- 4 files changed, 95 insertions(+), 173 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4734e92..dc0e068 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.18 / / +COPY --from=qemux/qemu-docker:6.00 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" @@ -28,7 +28,7 @@ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd -ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.262/virtio-win-0.1.262.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.262-2/virtio-win-0.1.262.tar.xz /drivers.txz EXPOSE 8006 3389 VOLUME /storage diff --git a/readme.md b/readme.md index 7054e6b..a3d7b49 100644 --- a/readme.md +++ b/readme.md @@ -383,5 +383,4 @@ kubectl apply -f kubernetes.yml [Size]: https://img.shields.io/docker/image-size/dockurr/windows/latest?color=066da5&label=size [Pulls]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker [Version]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5 -[Package]: -https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fipitio.github.io%2Fbackage%2Fdockur%2Fwindows%2Fwindows.json&query=%24.downloads&logo=github&style=flat&color=066da5&label=pulls +[Package]: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fipitio.github.io%2Fbackage%2Fdockur%2Fwindows%2Fwindows.json&query=%24.downloads&logo=github&style=flat&color=066da5&label=pulls diff --git a/src/define.sh b/src/define.sh index 1706a31..efcb6b7 100644 --- a/src/define.sh +++ b/src/define.sh @@ -950,11 +950,11 @@ getLink3() { local sum="" local size="" local host="https://drive.massgrave.dev" - local s22="windows_server_2022_updated_july_2024_x64_dvd_fee121d6" - local c11="windows_11_consumer_editions_version_23h2_updated_july_2024_x64_dvd_13e3dd80" - local b11="windows_11_business_editions_version_23h2_updated_july_2024_x64_dvd" - local c10="windows_10_consumer_editions_version_22h2_updated_july_2024_x64_dvd_3245b006" - local b10="windows_10_business_editions_version_22h2_updated_july_2024_x64_dvd" + local s22="windows_server_2022_updated_aug_2024_x64_dvd_17b2bb17" + local c11="windows_11_consumer_editions_version_23h2_updated_aug_2024_x64_dvd_d3e1c088" + local b11="windows_11_business_editions_version_23h2_updated_aug_2024_x64_dvd" + local c10="windows_10_consumer_editions_version_22h2_updated_aug_2024_x86_dvd_2454bb57" + local b10="windows_10_business_editions_version_22h2_updated_aug_2024_x64_dvd" culture=$(getLanguage "$lang" "culture") @@ -969,8 +969,8 @@ getLink3() { "el" | "el-"* ) url="el-gr_${c11}.iso" ;; "gb" | "en-gb" ) url="en-gb_${c11}.iso" ;; "en" | "en-"* ) - size=7165775872 - sum="b84e497c019e95ba9aee9da3d86e679454cba1a426593711f0f4d426f48fc845" + size=7174344704 + sum="c37962a65405106323ccd9c8b26a148959413a8b4cae22be315338f283a25e60" url="en-us_${c11}.iso" ;; "mx" | "es-mx" ) url="es-mx_${c11}.iso" ;; "es" | "es-"* ) url="es-es_${c11}.iso" ;; @@ -1006,47 +1006,47 @@ getLink3() { ;; "win11x64-enterprise" | "win11x64-enterprise-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b11}_39c553d6.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b11}_eb13b76c.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b11}_397728ab.iso" ;; - "da" | "da-"* ) url="da-dk_${b11}_4df23c83.iso" ;; - "de" | "de-"* ) url="de-de_${b11}_9a27972d.iso" ;; - "el" | "el-"* ) url="el-gr_${b11}_c8957889.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b11}_deb8a337.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${b11}_e8f50c77.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b11}_4917d646.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b11}_7423efd7.iso" ;; + "da" | "da-"* ) url="da-dk_${b11}_320e7939.iso" ;; + "de" | "de-"* ) url="de-de_${b11}_0a30ec34.iso" ;; + "el" | "el-"* ) url="el-gr_${b11}_8094f396.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b11}_d2bfefb8.iso" ;; "en" | "en-"* ) - size=7035154432 - sum="651e02efa8efe5c3ed6f99f91a934604add93d0fa28a5e7e29898d47bc92eba5" - url="en-us_${b11}_5a07b6a4.iso" ;; - "mx" | "es-mx" ) url="es-mx_${b11}_2c5e4da9.iso" ;; - "es" | "es-"* ) url="es-es_${b11}_4fde1bd2.iso" ;; - "et" | "et-"* ) url="et-ee_${b11}_dbdba8e6.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b11}_84ef21ee.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b11}_2cfbb3d3.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b11}_f922413d.iso" ;; - "he" | "he-"* ) url="he-il_${b11}_277cd23a.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b11}_65579a9d.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b11}_3e8637f5.iso" ;; - "it" | "it-"* ) url="it-it_${b11}_da0f0ca1.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b11}_86b39781.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b11}_0a970f66.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b11}_8429ce4c.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b11}_8eb4a9a7.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b11}_2ebae5cb.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b11}_6dba664c.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b11}_829bf56a.iso" ;; - "br" | "pt-br" ) url="pt-br_${b11}_cd555922.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b11}_ad4cf2e0.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b11}_2340f750.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b11}_4207eb9f.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b11}_a1ba40e5.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b11}_282cc939.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b11}_b4915859.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b11}_879e706a.iso" ;; - "th" | "th-"* ) url="th-th_${b11}_f51e12b1.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b11}_b52351ad.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b11}_4a9948b3.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_75853f9b.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b11}_8c3fbaa8.iso" ;; + size=7058937856 + sum="16366a1970d98b590295f5858eb2aae5577ef870a148de42bd3ed051e78010fb" + url="en-us_${b11}_4b6aa6b4.iso" ;; + "mx" | "es-mx" ) url="es-mx_${b11}_a3ff371e.iso" ;; + "es" | "es-"* ) url="es-es_${b11}_49584d0f.iso" ;; + "et" | "et-"* ) url="et-ee_${b11}_9418af12.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b11}_f99ef6d3.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b11}_3b3e23dc.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b11}_e5a1eeb4.iso" ;; + "he" | "he-"* ) url="he-il_${b11}_52d76f40.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b11}_c93171de.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b11}_0ac31337.iso" ;; + "it" | "it-"* ) url="it-it_${b11}_d1670509.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b11}_6394f8d8.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b11}_ad04a091.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b11}_75df52ae.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b11}_f498cffc.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b11}_a4cdddfc.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b11}_03c01555.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b11}_d5274f4d.iso" ;; + "br" | "pt-br" ) url="pt-br_${b11}_662860be.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b11}_ec70d402.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b11}_d76af266.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b11}_689ea9dc.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b11}_358e8bce.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b11}_69a9feb3.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b11}_23247970.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b11}_2b228b50.iso" ;; + "th" | "th-"* ) url="th-th_${b11}_6914e97f.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b11}_20dd43f1.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b11}_ed5be63e.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_beaade88.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b11}_6ca91c94.iso" ;; esac ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) @@ -1071,8 +1071,8 @@ getLink3() { "el" | "el-"* ) url="el-gr_${c10}.iso" ;; "gb" | "en-gb" ) url="en-gb_${c10}.iso" ;; "en" | "en-"* ) - size=7151144960 - sum="2eda4701d3e4061eccfdf0ad264b69392e67e2a29fef9eb7d7a57150b08e87e0" + size=4950300672 + sum="bbe2caba5ae2562166ed1ed0d7b54678c7cb9a3fe25dcb1e27c8f6993a95b498" url="en-us_${c10}.iso" ;; "mx" | "es-mx" ) url="es-mx_${c10}.iso" ;; "es" | "es-"* ) url="es-es_${c10}.iso" ;; @@ -1108,47 +1108,47 @@ getLink3() { ;; "win10x64-enterprise" | "win10x64-enterprise-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b10}_c297cc0d.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b10}_30c9ad0e.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b10}_0a65fb0a.iso" ;; - "da" | "da-"* ) url="da-dk_${b10}_57521eab.iso" ;; - "de" | "de-"* ) url="de-de_${b10}_9beb944c.iso" ;; - "el" | "el-"* ) url="el-gr_${b10}_4f7921a5.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b10}_77325f32.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${b10}_92a8794f.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b10}_5c7ee697.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b10}_c8ad70aa.iso" ;; + "da" | "da-"* ) url="da-dk_${b10}_5a51835f.iso" ;; + "de" | "de-"* ) url="de-de_${b10}_e24c9809.iso" ;; + "el" | "el-"* ) url="el-gr_${b10}_a340838b.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b10}_e758d63e.iso" ;; "en" | "en-"* ) - size=6978310144 - sum="7847abd6f39abd02dc8089c4177d354f9eb66fa0ee2fe8ae20e596e675d1ab67" - url="en-us_${b10}_c004521a.iso" ;; - "mx" | "es-mx" ) url="es-mx_${b10}_56d48916.iso" ;; - "es" | "es-"* ) url="es-es_${b10}_4e057a75.iso" ;; - "et" | "et-"* ) url="et-ee_${b10}_8e8c70da.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b10}_023ba9da.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b10}_e4b0fd01.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b10}_8a45f12e.iso" ;; - "he" | "he-"* ) url="he-il_${b10}_8ce094aa.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b10}_668d9ec4.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b10}_7f70b22c.iso" ;; - "it" | "it-"* ) url="it-it_${b10}_3c49c82b.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b10}_383799d9.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b10}_f0249763.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b10}_a13593c6.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b10}_4a00695c.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b10}_c949d1f1.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b10}_bb1f8a40.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b10}_26b503cc.iso" ;; - "br" | "pt-br" ) url="pt-br_${b10}_10757645.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b10}_07f873cd.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b10}_e2c973f8.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b10}_e86552ca.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b10}_03d84a11.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b10}_ad745ec0.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b10}_36a086b8.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b10}_756d5d5b.iso" ;; - "th" | "th-"* ) url="th-th_${b10}_cf4bb364.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b10}_3ceed34b.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b10}_e6a5235d.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_fac0f45b.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b10}_53d015e8.iso" ;; + size=6976530432 + sum="290cdbfe5f9b9a76dad12981e5f27eba353c535ffd8c83fdc4691a925f93f487" + url="en-us_${b10}_633dcd07.iso" ;; + "mx" | "es-mx" ) url="es-mx_${b10}_0c82aba5.iso" ;; + "es" | "es-"* ) url="es-es_${b10}_d12d0e1a.iso" ;; + "et" | "et-"* ) url="et-ee_${b10}_021c20ff.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b10}_8fcefb87.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b10}_b0588c68.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b10}_8766236b.iso" ;; + "he" | "he-"* ) url="he-il_${b10}_e34ccebf.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b10}_ea8c7c60.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b10}_8381df72.iso" ;; + "it" | "it-"* ) url="it-it_${b10}_1e265790.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b10}_6334dde3.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b10}_092c4fe2.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b10}_5425bdce.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b10}_5426a93f.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b10}_67cd70cf.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b10}_43418e31.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b10}_7d9fc23a.iso" ;; + "br" | "pt-br" ) url="pt-br_${b10}_159a147c.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b10}_003df1d7.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b10}_068fb76e.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b10}_71cdb226.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b10}_22793411.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b10}_91ae3317.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b10}_4f8045aa.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b10}_fe117cac.iso" ;; + "th" | "th-"* ) url="th-th_${b10}_15986f75.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b10}_71319f58.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b10}_0555f2a3.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_ebffe3cd.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b10}_2dce9717.iso" ;; esac ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) @@ -1276,8 +1276,8 @@ getLink3() { "cs" | "cs-"* ) url="cs-cz_${s22}.iso" ;; "de" | "de-"* ) url="de-de_${s22}.iso" ;; "en" | "en-"* ) - size=5933062144 - sum="5b6c4fab1027ed15cbd4179b8a41b184304ba362fa0053b3bad6ac070ee74281" + size=5966127104 + sum="0b70ea0e3969ad63dfe7e819d76d37ea37582e9f29e0f8d70b38e6b978406ee9" url="en-us_${s22}.iso" ;; "es" | "es-"* ) url="es-es_${s22}.iso" ;; "fr" | "fr-"* ) url="fr-fr_${s22}.iso" ;; @@ -1321,83 +1321,6 @@ getLink3() { "zh" | "zh-"* ) url="zh-cn_windows_server_2019_x64_dvd_19d65722.iso" ;; esac ;; - "win2016" | "win2016-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2016_vl_x64_dvd_11636699.iso" ;; - "de" | "de-"* ) url="de_windows_server_2016_vl_x64_dvd_11636696.iso" ;; - "en" | "en-"* ) - size=6003804160 - sum="47919ce8b4993f531ca1fa3f85941f4a72b47ebaa4d3a321fecf83ca9d17e6b8" - url="en_windows_server_2016_vl_x64_dvd_11636701.iso" ;; - "es" | "es-"* ) url="es_windows_server_2016_vl_x64_dvd_11636712.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2016_vl_x64_dvd_11636729.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2016_vl_x64_dvd_11636720.iso" ;; - "it" | "it-"* ) url="it_windows_server_2016_vl_x64_dvd_11636710.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2016_vl_x64_dvd_11645964.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2016_vl_x64_dvd_11636709.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2016_vl_x64_dvd_11636731.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2016_vl_x64_dvd_11636719.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2016_vl_x64_dvd_11636697.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2016_vl_x64_dvd_11637454.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2016_vl_x64_dvd_11636694.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2016_vl_x64_dvd_11636706.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2016_vl_x64_dvd_11636725.iso" ;; - "zh-hk" | "zh-tw" ) url="ct_windows_server_2016_vl_x64_dvd_11636717.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2016_vl_x64_dvd_11636695.iso" ;; - esac - ;; - "win2012r2" | "win2012r2-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2012_r2_vl_with_update_x64_dvd_6052752.iso" ;; - "de" | "de-"* ) url="de_windows_server_2012_r2_vl_with_update_x64_dvd_6052780.iso" ;; - "en" | "en-"* ) - size=5400115200 - sum="0e883ce28eb5c6f58a3a3007be978d43edb1035a4585506c1c4504c9e143408d" - url="en_windows_server_2012_r2_vl_with_update_x64_dvd_6052766.iso" ;; - "es" | "es-"* ) url="es_windows_server_2012_r2_vl_with_update_x64_dvd_6052831.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2012_r2_vl_with_update_x64_dvd_6052772.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2012_r2_vl_with_update_x64_dvd_6052786.iso" ;; - "it" | "it-"* ) url="it_windows_server_2012_r2_vl_with_update_x64_dvd_6052792.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2012_r2_vl_with_update_x64_dvd_6052800.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2012_r2_vl_with_update_x64_dvd_6052806.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2012_r2_vl_with_update_x64_dvd_6052760.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2012_r2_vl_with_update_x64_dvd_6052815.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2012_r2_vl_with_update_x64_dvd_6052819.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2012_r2_vl_with_update_x64_dvd_6052823.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2012_r2_vl_with_update_x64_dvd_6052827.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2012_r2_vl_with_update_x64_dvd_6052835.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2012_r2_vl_with_update_x64_dvd_6052838.iso" ;; - "zh-hk" ) url="hk_windows_server_2012_r2_vl_with_update_x64_dvd_6052739.iso" ;; - "zh-tw" ) url="tw_windows_server_2012_r2_vl_with_update_x64_dvd_6052746.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso" ;; - esac - ;; - "win2008r2" | "win2008r2-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617402.iso" ;; - "de" | "de-"* ) url="de_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617404.iso" ;; - "en" | "en-"* ) - size=3166720000 - sum="9b0cd5b11cc2e92badb74450f0cac03006d3c63a2ada36cb1eb95c1bf4b2608f" - url="en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso" ;; - "es" | "es-"* ) url="es_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617410.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617392.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617415.iso" ;; - "it" | "it-"* ) url="it_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_619596.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_631466.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617409.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617395.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617397.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617394.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617411.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617421.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617400.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617416.iso" ;; - "zh-hk" ) url="hk_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617386.iso" ;; - "zh-tw" ) url="tw_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617405.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617396.iso" ;; - esac - ;; "win7x64" | "win7x64-enterprise" ) case "${culture,,}" in "ar" | "ar-"* ) url="ar_windows_7_enterprise_with_sp1_x64_dvd_u_677643.iso" ;; diff --git a/src/mido.sh b/src/mido.sh index 8773263..19b1efa 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -548,7 +548,7 @@ downloadFile() { if (( rc == 0 )) && [ -f "$iso" ]; then total=$(stat -c%s "$iso") if [ "$total" -lt 100000000 ]; then - error "Invalid download link: $url (is only $total bytes?). Please report this issue." && return 1 + error "Invalid download link: $url (is only $total bytes?). Please report this at $SUPPORT/issues." && return 1 fi ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 html "Download finished successfully..." && return 0 From a1e4ed160a7ba13ef3ef6e09b53c96bf33dfb995 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 14 Sep 2024 23:13:14 +0200 Subject: [PATCH 256/505] feat: Support Windows Server 2025 (#740) --- Dockerfile | 4 ++-- readme.md | 2 ++ src/install.sh | 5 ----- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index dc0e068..54b0b90 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:6.00 / / +COPY --from=qemux/qemu-docker:6.01 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" @@ -28,7 +28,7 @@ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd -ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.262-2/virtio-win-0.1.262.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.40-0/virtio-win-1.9.40.tar.xz /drivers.txz EXPOSE 8006 3389 VOLUME /storage diff --git a/readme.md b/readme.md index a3d7b49..7b7f1bd 100644 --- a/readme.md +++ b/readme.md @@ -98,11 +98,13 @@ kubectl apply -f kubernetes.yml | `vista` | Windows Vista Enterprise | 3.0 GB | | `winxp` | Windows XP Professional | 0.6 GB | |||| + | `2025` | Windows Server 2025 | 5.0 GB | | `2022` | Windows Server 2022 | 4.7 GB | | `2019` | Windows Server 2019 | 5.3 GB | | `2016` | Windows Server 2016 | 6.5 GB | | `2012` | Windows Server 2012 | 4.3 GB | | `2008` | Windows Server 2008 | 3.0 GB | + | `2003` | Windows Server 2003 | 0.6 GB | |||| | `core11` | Tiny 11 Core | 2.1 GB | | `tiny11` | Tiny 11 | 3.8 GB | diff --git a/src/install.sh b/src/install.sh index ac051ff..e9ce4da 100644 --- a/src/install.sh +++ b/src/install.sh @@ -705,11 +705,6 @@ addDriver() { "winvista"* ) [[ "${driver,,}" == "viorng" ]] && return 0 ;; - "win2025"* | "win11x64-iot"* | "win11x64-ltsc"* ) - [[ "${driver,,}" == "smbus" ]] && return 0 - [[ "${driver,,}" == "pvpanic" ]] && return 0 - [[ "${driver,,}" == "viogpudo" ]] && return 0 - ;; esac local dest="$path/$target/$driver" From b2251a4cc048df66838cd998a1baeca9520ec349 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 17 Sep 2024 23:14:23 +0200 Subject: [PATCH 257/505] build: Update VirtIO drivers to v1.9.43 (#741) --- Dockerfile | 2 +- src/define.sh | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 54b0b90..86eeb97 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,7 +28,7 @@ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.40-0/virtio-win-1.9.40.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz EXPOSE 8006 3389 VOLUME /storage diff --git a/src/define.sh b/src/define.sh index efcb6b7..f612c81 100644 --- a/src/define.sh +++ b/src/define.sh @@ -729,14 +729,14 @@ getLink1() { ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4821989376 - sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + size=4501397504 + sum="aaa4bd3254c1af5f9ce07f50db68fdead7a305878f2425c059ecd6b062a855b3" url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4821989376 - sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + size=4501397504 + sum="aaa4bd3254c1af5f9ce07f50db68fdead7a305878f2425c059ecd6b062a855b3" url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) @@ -2333,6 +2333,9 @@ setMachine() { if ! prepare2k3 "$iso" "$dir" "$desc"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; + "win2025"* | "win11x64-iot"* | "win11x64-ltsc"* ) + # Temporary: Use IDE CD to workaround install bug + MEDIA_TYPE="ide" ;; esac return 0 From c8f0d874534128c81e5b02cc5421ecfeeefe21e8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:58:12 +0200 Subject: [PATCH 258/505] fix: Missing x86 drivers for Windows XP (#755) --- readme.md | 4 - src/define.sh | 223 +++----------------------------------------------- 2 files changed, 12 insertions(+), 215 deletions(-) diff --git a/readme.md b/readme.md index 7b7f1bd..406984b 100644 --- a/readme.md +++ b/readme.md @@ -105,10 +105,6 @@ kubectl apply -f kubernetes.yml | `2012` | Windows Server 2012 | 4.3 GB | | `2008` | Windows Server 2008 | 3.0 GB | | `2003` | Windows Server 2003 | 0.6 GB | - |||| - | `core11` | Tiny 11 Core | 2.1 GB | - | `tiny11` | Tiny 11 | 3.8 GB | - | `tiny10` | Tiny 10 | 3.6 GB | > [!TIP] > To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). diff --git a/src/define.sh b/src/define.sh index f612c81..bfdd535 100644 --- a/src/define.sh +++ b/src/define.sh @@ -950,105 +950,10 @@ getLink3() { local sum="" local size="" local host="https://drive.massgrave.dev" - local s22="windows_server_2022_updated_aug_2024_x64_dvd_17b2bb17" - local c11="windows_11_consumer_editions_version_23h2_updated_aug_2024_x64_dvd_d3e1c088" - local b11="windows_11_business_editions_version_23h2_updated_aug_2024_x64_dvd" - local c10="windows_10_consumer_editions_version_22h2_updated_aug_2024_x86_dvd_2454bb57" - local b10="windows_10_business_editions_version_22h2_updated_aug_2024_x64_dvd" culture=$(getLanguage "$lang" "culture") case "${id,,}" in - "win11x64" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${c11}.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${c11}.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${c11}.iso" ;; - "da" | "da-"* ) url="da-dk_${c11}.iso" ;; - "de" | "de-"* ) url="de-de_${c11}.iso" ;; - "el" | "el-"* ) url="el-gr_${c11}.iso" ;; - "gb" | "en-gb" ) url="en-gb_${c11}.iso" ;; - "en" | "en-"* ) - size=7174344704 - sum="c37962a65405106323ccd9c8b26a148959413a8b4cae22be315338f283a25e60" - url="en-us_${c11}.iso" ;; - "mx" | "es-mx" ) url="es-mx_${c11}.iso" ;; - "es" | "es-"* ) url="es-es_${c11}.iso" ;; - "et" | "et-"* ) url="et-ee_${c11}.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${c11}.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${c11}.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${c11}.iso" ;; - "he" | "he-"* ) url="he-il_${c11}.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${c11}.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${c11}.iso" ;; - "it" | "it-"* ) url="it-it_${c11}.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${c11}.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${c11}.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${c11}.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${c11}.iso" ;; - "nb" | "nb-"* ) url="nb-no_${c11}.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${c11}.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${c11}.iso" ;; - "br" | "pt-br" ) url="pt-br_${c11}.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${c11}.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${c11}.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${c11}.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${c11}.iso" ;; - "sl" | "sl-"* ) url="sl-si_${c11}.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${c11}.iso" ;; - "sv" | "sv-"* ) url="sv-se_${c11}.iso" ;; - "th" | "th-"* ) url="th-th_${c11}.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${c11}.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${c11}.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${c11}.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${c11}.iso" ;; - esac - ;; - "win11x64-enterprise" | "win11x64-enterprise-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b11}_e8f50c77.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b11}_4917d646.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b11}_7423efd7.iso" ;; - "da" | "da-"* ) url="da-dk_${b11}_320e7939.iso" ;; - "de" | "de-"* ) url="de-de_${b11}_0a30ec34.iso" ;; - "el" | "el-"* ) url="el-gr_${b11}_8094f396.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b11}_d2bfefb8.iso" ;; - "en" | "en-"* ) - size=7058937856 - sum="16366a1970d98b590295f5858eb2aae5577ef870a148de42bd3ed051e78010fb" - url="en-us_${b11}_4b6aa6b4.iso" ;; - "mx" | "es-mx" ) url="es-mx_${b11}_a3ff371e.iso" ;; - "es" | "es-"* ) url="es-es_${b11}_49584d0f.iso" ;; - "et" | "et-"* ) url="et-ee_${b11}_9418af12.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b11}_f99ef6d3.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b11}_3b3e23dc.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b11}_e5a1eeb4.iso" ;; - "he" | "he-"* ) url="he-il_${b11}_52d76f40.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b11}_c93171de.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b11}_0ac31337.iso" ;; - "it" | "it-"* ) url="it-it_${b11}_d1670509.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b11}_6394f8d8.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b11}_ad04a091.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b11}_75df52ae.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b11}_f498cffc.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b11}_a4cdddfc.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b11}_03c01555.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b11}_d5274f4d.iso" ;; - "br" | "pt-br" ) url="pt-br_${b11}_662860be.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b11}_ec70d402.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b11}_d76af266.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b11}_689ea9dc.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b11}_358e8bce.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b11}_69a9feb3.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b11}_23247970.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b11}_2b228b50.iso" ;; - "th" | "th-"* ) url="th-th_${b11}_6914e97f.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b11}_20dd43f1.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b11}_ed5be63e.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_beaade88.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b11}_6ca91c94.iso" ;; - esac - ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=4821989376 @@ -1061,96 +966,6 @@ getLink3() { sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" url="26100.1.240331-1435.ge_release_CLIENTENTERPRISE_OEM_x64FRE_en-us.iso" ;; - "win10x64" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${c10}.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${c10}.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${c10}.iso" ;; - "da" | "da-"* ) url="da-dk_${c10}.iso" ;; - "de" | "de-"* ) url="de-de_${c10}.iso" ;; - "el" | "el-"* ) url="el-gr_${c10}.iso" ;; - "gb" | "en-gb" ) url="en-gb_${c10}.iso" ;; - "en" | "en-"* ) - size=4950300672 - sum="bbe2caba5ae2562166ed1ed0d7b54678c7cb9a3fe25dcb1e27c8f6993a95b498" - url="en-us_${c10}.iso" ;; - "mx" | "es-mx" ) url="es-mx_${c10}.iso" ;; - "es" | "es-"* ) url="es-es_${c10}.iso" ;; - "et" | "et-"* ) url="et-ee_${c10}.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${c10}.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${c10}.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${c10}.iso" ;; - "he" | "he-"* ) url="he-il_${c10}.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${c10}.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${c10}.iso" ;; - "it" | "it-"* ) url="it-it_${c10}.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${c10}.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${c10}.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${c10}.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${c10}.iso" ;; - "nb" | "nb-"* ) url="nb-no_${c10}.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${c10}.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${c10}.iso" ;; - "br" | "pt-br" ) url="pt-br_${c10}.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${c10}.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${c10}.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${c10}.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${c10}.iso" ;; - "sl" | "sl-"* ) url="sl-si_${c10}.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${c10}.iso" ;; - "sv" | "sv-"* ) url="sv-se_${c10}.iso" ;; - "th" | "th-"* ) url="th-th_${c10}.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${c10}.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${c10}.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${c10}.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${c10}.iso" ;; - esac - ;; - "win10x64-enterprise" | "win10x64-enterprise-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b10}_92a8794f.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b10}_5c7ee697.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b10}_c8ad70aa.iso" ;; - "da" | "da-"* ) url="da-dk_${b10}_5a51835f.iso" ;; - "de" | "de-"* ) url="de-de_${b10}_e24c9809.iso" ;; - "el" | "el-"* ) url="el-gr_${b10}_a340838b.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b10}_e758d63e.iso" ;; - "en" | "en-"* ) - size=6976530432 - sum="290cdbfe5f9b9a76dad12981e5f27eba353c535ffd8c83fdc4691a925f93f487" - url="en-us_${b10}_633dcd07.iso" ;; - "mx" | "es-mx" ) url="es-mx_${b10}_0c82aba5.iso" ;; - "es" | "es-"* ) url="es-es_${b10}_d12d0e1a.iso" ;; - "et" | "et-"* ) url="et-ee_${b10}_021c20ff.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b10}_8fcefb87.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b10}_b0588c68.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b10}_8766236b.iso" ;; - "he" | "he-"* ) url="he-il_${b10}_e34ccebf.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b10}_ea8c7c60.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b10}_8381df72.iso" ;; - "it" | "it-"* ) url="it-it_${b10}_1e265790.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b10}_6334dde3.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b10}_092c4fe2.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b10}_5425bdce.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b10}_5426a93f.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b10}_67cd70cf.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b10}_43418e31.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b10}_7d9fc23a.iso" ;; - "br" | "pt-br" ) url="pt-br_${b10}_159a147c.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b10}_003df1d7.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b10}_068fb76e.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b10}_71cdb226.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b10}_22793411.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b10}_91ae3317.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b10}_4f8045aa.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b10}_fe117cac.iso" ;; - "th" | "th-"* ) url="th-th_${b10}_15986f75.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b10}_71319f58.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b10}_0555f2a3.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_ebffe3cd.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b10}_2dce9717.iso" ;; - esac - ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) case "${culture,,}" in "ar" | "ar-"* ) url="ar-sa_windows_10_enterprise_ltsc_2021_x64_dvd_60bc2a7a.iso" ;; @@ -1271,31 +1086,6 @@ getLink3() { "zh" | "zh-"* ) url="zh-cn_windows_server_2025_preview_x64_dvd_a12bb0bf.iso" ;; esac ;; - "win2022" | "win2022-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_${s22}.iso" ;; - "de" | "de-"* ) url="de-de_${s22}.iso" ;; - "en" | "en-"* ) - size=5966127104 - sum="0b70ea0e3969ad63dfe7e819d76d37ea37582e9f29e0f8d70b38e6b978406ee9" - url="en-us_${s22}.iso" ;; - "es" | "es-"* ) url="es-es_${s22}.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${s22}.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${s22}.iso" ;; - "it" | "it-"* ) url="it-it_${s22}.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${s22}.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${s22}.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${s22}.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${s22}.iso" ;; - "br" | "pt-br" ) url="pt-br_${s22}.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${s22}.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${s22}.iso" ;; - "sv" | "sv-"* ) url="sv-se_${s22}.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${s22}.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${s22}.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${s22}.iso" ;; - esac - ;; "win2019" | "win2019-eval" ) case "${culture,,}" in "cs" | "cs-"* ) url="cs-cz_windows_server_2019_x64_dvd_3781c31c.iso" ;; @@ -1895,6 +1685,10 @@ prepareInstall() { local target [[ "${arch,,}" == "x86" ]] && target="$dir/I386" || target="$dir/AMD64" + if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then + error "Failed to locate required storage drivers!" && return 1 + fi + cp "$drivers/viostor/$driver/$arch/viostor.sys" "$target" mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" @@ -1902,6 +1696,10 @@ prepareInstall() { cp "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" cp "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" + if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then + error "Failed to locate required network drivers!" && return 1 + fi + mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" cp "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" cp "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" @@ -1919,8 +1717,11 @@ prepareInstall() { sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF" sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" - mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" + if [ ! -d "$drivers/sata/xp/$arch" ]; then + error "Failed to locate required SATA drivers!" && return 1 + fi + mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" cp -a "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" cp -a "$drivers/sata/xp/$arch/." "$target" From 34d6fa73f50d5732e258877ba5026d56a58f1520 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:51:16 +0200 Subject: [PATCH 259/505] chore(deps): update qemux/qemu-docker docker tag to v6.02 (#759) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 86eeb97..bb734dc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:6.01 / / +COPY --from=qemux/qemu-docker:6.02 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From bfc24167e3a72726be5bcb11c27a6594686e52a0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 1 Oct 2024 01:04:19 +0200 Subject: [PATCH 260/505] fix: Update Windows 11 LTSC download mirrors (#768) --- src/define.sh | 26 +++++++++++++------------- src/mido.sh | 1 + 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/define.sh b/src/define.sh index bfdd535..37da591 100644 --- a/src/define.sh +++ b/src/define.sh @@ -386,7 +386,7 @@ printVersion() { if [ -z "$desc" ]; then desc="Windows" - [[ "${PLATFORM,,}" != "x64" ]] && desc="$desc for ${PLATFORM}" + [[ "${PLATFORM,,}" != "x64" ]] && desc+=" for ${PLATFORM}" fi echo "$desc" @@ -729,15 +729,15 @@ getLink1() { ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4501397504 - sum="aaa4bd3254c1af5f9ce07f50db68fdead7a305878f2425c059ecd6b062a855b3" - url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4501397504 - sum="aaa4bd3254c1af5f9ce07f50db68fdead7a305878f2425c059ecd6b062a855b3" - url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) size=5623582720 @@ -956,15 +956,15 @@ getLink3() { case "${id,,}" in "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4821989376 - sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" - url="26100.1.240331-1435.ge_release_CLIENTENTERPRISE_OEM_x64FRE_en-us.iso" + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4821989376 - sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" - url="26100.1.240331-1435.ge_release_CLIENTENTERPRISE_OEM_x64FRE_en-us.iso" + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) case "${culture,,}" in diff --git a/src/mido.sh b/src/mido.sh index 19b1efa..454e83f 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -318,6 +318,7 @@ getWindows() { case "${version,,}" in "win11${PLATFORM,,}-enterprise-iot-eval" ) ;; + "win11${PLATFORM,,}-enterprise-ltsc-eval" ) ;; * ) if [[ "${PLATFORM,,}" != "x64" ]]; then error "No download for the ${PLATFORM^^} platform available for $edition!" From 73e725321824fa2a36c18102261e0b34b6280782 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 1 Oct 2024 20:33:25 +0200 Subject: [PATCH 261/505] feat: Add Windows 11 LTSC support (#770) --- assets/win11x64-iot.xml | 3 +++ assets/win11x64-ltsc.xml | 3 +++ src/define.sh | 7 ++----- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index cf49f4e..eeef008 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -86,6 +86,9 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> + <ProductKey> + <Key /> + </ProductKey> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 16ec029..c4c35db 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -86,6 +86,9 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> + <ProductKey> + <Key /> + </ProductKey> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/src/define.sh b/src/define.sh index 37da591..b38fc28 100644 --- a/src/define.sh +++ b/src/define.sh @@ -115,7 +115,7 @@ parseVersion() { ;; "ltsc11" | "11ltsc" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) VERSION="win11x64-enterprise-ltsc-eval" - [ -z "$DETECTED" ] && DETECTED="win11x64-iot" + [ -z "$DETECTED" ] && DETECTED="win11x64-ltsc" ;; "ltsc10" | "10ltsc" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) VERSION="win10x64-enterprise-ltsc-eval" @@ -420,7 +420,7 @@ printEdition() { edition="Education" ;; *"-iot" | *"-iot-eval" ) - edition="IoT" + edition="LTSC" ;; *"-ltsc" | *"-ltsc-eval" ) edition="LTSC" @@ -2134,9 +2134,6 @@ setMachine() { if ! prepare2k3 "$iso" "$dir" "$desc"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; - "win2025"* | "win11x64-iot"* | "win11x64-ltsc"* ) - # Temporary: Use IDE CD to workaround install bug - MEDIA_TYPE="ide" ;; esac return 0 From b5bef25c1a817b125f94df928623f0a3b63a8be5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 20:42:25 +0200 Subject: [PATCH 262/505] chore(deps): update qemux/qemu-docker docker tag to v6.03 (#771) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index bb734dc..be8ec62 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:6.02 / / +COPY --from=qemux/qemu-docker:6.03 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 717dbf01c4acd14c145cebaa95905a414a6edbbd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 2 Oct 2024 09:24:11 +0200 Subject: [PATCH 263/505] docs: Disk pass-through (#773) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 406984b..ff684f0 100644 --- a/readme.md +++ b/readme.md @@ -320,7 +320,7 @@ kubectl apply -f kubernetes.yml - /dev/sdc:/disk2 ``` - Use `/disk1` if you want it to become your main drive, and use `/disk2` and higher to add them as secondary drives. + Use `/disk1` if you want it to become your main drive (which will be formatted during installation), and use `/disk2` and higher to add them as secondary drives (which will stay untouched). ### How do I pass-through a USB device? From 27236d7352575ec6e04bb277ed1f7d04047d6b69 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 2 Oct 2024 10:31:16 +0200 Subject: [PATCH 264/505] feat: Add Windows 11 LTSC (#774) --- readme.md | 4 +++- src/define.sh | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index ff684f0..0e57a8d 100644 --- a/readme.md +++ b/readme.md @@ -86,8 +86,10 @@ kubectl apply -f kubernetes.yml | **Value** | **Version** | **Size** | |---|---|---| - | `win11` | Windows 11 Pro | 6.4 GB | + | `win11` | Windows 11 Pro | 5.4 GB | + | `ltsc11` | Windows 11 LTSC | 4.2 GB | | `win11e` | Windows 11 Enterprise | 5.8 GB | + |||| | `win10` | Windows 10 Pro | 5.7 GB | | `ltsc10` | Windows 10 LTSC | 4.6 GB | | `win10e` | Windows 10 Enterprise | 5.2 GB | diff --git a/src/define.sh b/src/define.sh index b38fc28..c08867e 100644 --- a/src/define.sh +++ b/src/define.sh @@ -637,8 +637,8 @@ getMido() { case "${id,,}" in "win11x64" ) - size=6812706816 - sum="36de5ecb7a0daa58dce68c03b9465a543ed0f5498aa8ae60ab45fb7c8c4ae402" + size=5819484160 + sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" ;; "win11x64-enterprise-eval" ) size=6209064960 From efe2a5b725c0cdc97e35c5f0ac89b09664cd89f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 5 Oct 2024 14:06:07 +0200 Subject: [PATCH 265/505] chore(deps): update qemux/qemu-docker docker tag to v6.04 (#776) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index be8ec62..b28efc8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:6.03 / / +COPY --from=qemux/qemu-docker:6.04 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 427ba244ce29bbee3971bf51f665d0237e1c3bda Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 5 Oct 2024 15:42:18 +0200 Subject: [PATCH 266/505] fix: Do not store display device (#777) --- src/install.sh | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/install.sh b/src/install.sh index e9ce4da..a1c290a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -156,10 +156,6 @@ finishInstall() { fi fi - if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio" ]] && [[ "${VGA:-}" != "ramfb" ]]; then - echo "$VGA" > "$STORAGE/windows.vga" - fi - if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then echo "$DISK_TYPE" > "$STORAGE/windows.type" fi @@ -980,12 +976,6 @@ bootWindows() { rm -rf "$TMP" - if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then - [ -z "${VGA:-}" ] && VGA=$(<"$STORAGE/windows.vga") - else - [ -z "${VGA:-}" ] && [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" - fi - if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type") fi From f3a1ac08f8782c5643d48adad5413603cbbf80cd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 8 Oct 2024 14:04:03 +0200 Subject: [PATCH 267/505] fix: Disable Hyper-V in Windows Legacy mode (#781) --- src/define.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/src/define.sh b/src/define.sh index c08867e..065ff3e 100644 --- a/src/define.sh +++ b/src/define.sh @@ -2111,7 +2111,6 @@ setMachine() { case "${id,,}" in "win9"* | "win2k"* | "winxp"* | "win2003"* ) - HV="N" BOOT_MODE="windows_legacy" ;; "winvista"* | "win7"* | "win2008"* ) BOOT_MODE="windows_legacy" ;; From 3d3945ee4e90c8083b2c8adfce875eb97aa1af86 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:35:54 +0200 Subject: [PATCH 268/505] chore(deps): update qemux/qemu-docker docker tag to v6.05 (#783) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b28efc8..74540dc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:6.04 / / +COPY --from=qemux/qemu-docker:6.05 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 89834cf6e611215b5e55bad6322e41e0e43179c5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:54:10 +0200 Subject: [PATCH 269/505] docs: Frequently asked questions (#785) --- readme.md | 49 +++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/readme.md b/readme.md index 0e57a8d..c1c88c2 100644 --- a/readme.md +++ b/readme.md @@ -111,30 +111,6 @@ kubectl apply -f kubernetes.yml > [!TIP] > To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). -### How do I select the Windows language? - - By default, the English version of Windows will be downloaded. But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: - - ```yaml - environment: - LANGUAGE: "French" - ``` - - You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estionian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. - -### How do I select the keyboard layout? - - If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: - - ```yaml - environment: - REGION: "en-US" - KEYBOARD: "en-US" - ``` - -> [!NOTE] -> Changing these values will have no effect after the installation has been performed already. Use the control panel inside Windows in that case. - ### How do I change the storage location? To change the storage location, include the following bind mount in your compose file: @@ -236,6 +212,31 @@ kubectl apply -f kubernetes.yml PASSWORD: "gates" ``` +### How do I select the Windows language? + + By default, the English version of Windows will be downloaded. But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: + + ```yaml + environment: + LANGUAGE: "French" + ``` + + You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estionian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. + +### How do I select the keyboard layout? + + If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: + + ```yaml + environment: + REGION: "en-US" + KEYBOARD: "en-US" + ``` + +> [!NOTE] +> Changing these values will have no effect after the installation has been performed already. Use the control panel inside Windows in that case. +> + ### How do I connect using RDP? The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. From 42d4e075d8f78e8b7d8c829700f0dc658d400c11 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 10 Oct 2024 21:15:18 +0200 Subject: [PATCH 270/505] feat: Disable SMB signing requirement (#787) --- assets/win11x64-enterprise-eval.xml | 43 +++++++++++++++------------- assets/win11x64-enterprise.xml | 44 ++++++++++++++++------------- assets/win11x64-iot.xml | 43 +++++++++++++++------------- assets/win11x64-ltsc.xml | 43 +++++++++++++++------------- assets/win11x64.xml | 43 +++++++++++++++------------- assets/win2025-eval.xml | 41 +++++++++++++++------------ assets/win2025.xml | 41 +++++++++++++++------------ 7 files changed, 167 insertions(+), 131 deletions(-) diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index c0045d3..555d1f4 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -343,101 +343,106 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 9800436..88983f0 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -346,101 +346,106 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -448,3 +453,4 @@ </component> </settings> </unattend> + diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index eeef008..79fc392 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -352,101 +352,106 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index c4c35db..584ff9e 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -352,101 +352,106 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 4877868..71ecdf9 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -346,101 +346,106 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 1ee2b54..70aa09c 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -242,96 +242,101 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index c0801b0..66871a5 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -245,96 +245,101 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From a2208ace94ff0158f79fcbd89ff5dc713deb916f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 10 Oct 2024 23:15:46 +0200 Subject: [PATCH 271/505] fix: Workaround VirtIO display driver bug (#788) --- assets/win11x64-enterprise-eval.xml | 5 +++++ assets/win11x64-enterprise.xml | 5 +++++ assets/win11x64-iot.xml | 5 +++++ assets/win11x64-ltsc.xml | 5 +++++ assets/win11x64.xml | 5 +++++ assets/win2025-eval.xml | 5 +++++ assets/win2025.xml | 5 +++++ src/install.sh | 4 ++++ 8 files changed, 39 insertions(+) diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 555d1f4..3072a69 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -443,6 +443,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 88983f0..ffb0d72 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -446,6 +446,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 79fc392..96d29e1 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -452,6 +452,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 584ff9e..8a680e5 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -452,6 +452,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 71ecdf9..ca65c1a 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -446,6 +446,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 70aa09c..fc44ff1 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -337,6 +337,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index 66871a5..2c53caf 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -340,6 +340,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/src/install.sh b/src/install.sh index a1c290a..cf9cac1 100644 --- a/src/install.sh +++ b/src/install.sh @@ -701,6 +701,9 @@ addDriver() { "winvista"* ) [[ "${driver,,}" == "viorng" ]] && return 0 ;; + "win11x64"* | "win2025"* ) + [[ "${driver,,}" == "viogpudo" ]] && return 0 + ;; esac local dest="$path/$target/$driver" @@ -737,6 +740,7 @@ addDrivers() { addDriver "$version" "$drivers" "$target" "smbus" addDriver "$version" "$drivers" "$target" "qxldod" addDriver "$version" "$drivers" "$target" "viorng" + addDriver "$version" "$drivers" "$target" "viomem" addDriver "$version" "$drivers" "$target" "viostor" addDriver "$version" "$drivers" "$target" "NetKVM" addDriver "$version" "$drivers" "$target" "Balloon" From 5bd88a5cc8be9b86f7a4910e8d7ee2da402017e8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 10 Oct 2024 23:53:41 +0200 Subject: [PATCH 272/505] fix: Workaround VirtIO display driver bug (#790) --- src/install.sh | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/install.sh b/src/install.sh index cf9cac1..7f87fd1 100644 --- a/src/install.sh +++ b/src/install.sh @@ -701,9 +701,6 @@ addDriver() { "winvista"* ) [[ "${driver,,}" == "viorng" ]] && return 0 ;; - "win11x64"* | "win2025"* ) - [[ "${driver,,}" == "viogpudo" ]] && return 0 - ;; esac local dest="$path/$target/$driver" @@ -714,9 +711,10 @@ addDriver() { addDrivers() { - local file="$1" - local index="$2" - local version="$3" + local src="$1" + local file="$2" + local index="$3" + local version="$4" local msg="Adding drivers to image..." info "$msg" && html "$msg" @@ -751,6 +749,16 @@ addDrivers() { addDriver "$version" "$drivers" "$target" "vioserial" addDriver "$version" "$drivers" "$target" "qemupciserial" + case "${version,,}" in + "win11x64"* | "win2025"* ) + # Workaround Virtio GPU driver bug + local dst="$src/\$OEM\$/\$\$/Drivers" + mkdir -p "$dst" + ! cp -a "$dest/." "$dst" && return 1 + rm -rf "$dest/viogpudo" + ;; + esac + if ! wimlib-imagex update "$file" "$index" --command "add $dest /$target" >/dev/null; then return 1 fi @@ -772,10 +780,10 @@ addFolder() { local msg="Adding OEM folder to image..." info "$msg" && html "$msg" - local dest="$src/\$OEM\$/\$1/" + local dest="$src/\$OEM\$/\$1/OEM" mkdir -p "$dest" - ! cp -r "$folder" "$dest" && return 1 + ! cp -a "$folder/." "$dest" && return 1 local file file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) @@ -824,7 +832,7 @@ updateImage() { index="2" fi - if ! addDrivers "$wim" "$index" "$DETECTED"; then + if ! addDrivers "$src" "$wim" "$index" "$DETECTED"; then error "Failed to add drivers to image!" && return 1 fi From d06591f2a1458bfea22c406be5c90f57c1701df4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 11 Oct 2024 01:00:07 +0200 Subject: [PATCH 273/505] feat: Remove empty Windows.old folder (#791) --- assets/win11x64-enterprise-eval.xml | 5 +++++ assets/win11x64-enterprise.xml | 5 +++++ assets/win11x64-iot.xml | 5 +++++ assets/win11x64-ltsc.xml | 5 +++++ assets/win11x64.xml | 5 +++++ assets/win2025-eval.xml | 5 +++++ assets/win2025.xml | 5 +++++ 7 files changed, 35 insertions(+) diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 3072a69..72dc300 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -448,6 +448,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index ffb0d72..56fa786 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -451,6 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 96d29e1..68f74f6 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -457,6 +457,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 8a680e5..1024334 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -457,6 +457,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index ca65c1a..61aad2e 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -451,6 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index fc44ff1..73801c5 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -342,6 +342,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index 2c53caf..a641959 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -345,6 +345,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From 94a84b0c2d5b692e03b032fcf1a0854bbcfbff79 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 11 Oct 2024 11:33:50 +0200 Subject: [PATCH 274/505] feat: Remove empty Windows.old folder (#793) --- assets/win11x64-enterprise-eval.xml | 2 +- assets/win11x64-enterprise.xml | 2 +- assets/win11x64-iot.xml | 2 +- assets/win11x64-ltsc.xml | 2 +- assets/win11x64.xml | 2 +- assets/win2025-eval.xml | 2 +- assets/win2025.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 72dc300..b8c3cbf 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -448,7 +448,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 56fa786..fc8562a 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -451,7 +451,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 68f74f6..89aa0d6 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -457,7 +457,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 1024334..545ea88 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -457,7 +457,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 61aad2e..3130bb4 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -451,7 +451,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 73801c5..9d90c77 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -342,7 +342,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win2025.xml b/assets/win2025.xml index a641959..7e543a2 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -345,7 +345,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> From 5f4c0938ac5020b60c719beb385d996b38a7af20 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 12 Oct 2024 14:26:04 +0200 Subject: [PATCH 275/505] feat: Extract temporary files to RAM (#796) --- src/define.sh | 7 ++++--- src/install.sh | 46 +++++++++++++++++++++++----------------------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/define.sh b/src/define.sh index 065ff3e..cd214df 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1665,7 +1665,10 @@ prepareInstall() { local arch="$4" local key="$5" local driver="$6" - local drivers="$TMP/drivers" + local drivers="/run/shm/drivers" + + rm -rf "$drivers" + mkdir -p "$drivers" ETFS="[BOOT]/Boot-NoEmul.img" @@ -1676,8 +1679,6 @@ prepareInstall() { local msg="Adding drivers to image..." info "$msg" && html "$msg" - mkdir -p "$drivers" - if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then error "Failed to extract drivers!" && return 1 fi diff --git a/src/install.sh b/src/install.sh index 7f87fd1..32f2f68 100644 --- a/src/install.sh +++ b/src/install.sh @@ -561,7 +561,7 @@ detectImage() { if [[ "${LANGUAGE,,}" != "en" ]] && [[ "${LANGUAGE,,}" != "en-"* ]]; then language=$(getLanguage "$LANGUAGE" "desc") - desc=+" ($language)" + desc+=" ($language)" fi info "Detected: $desc" @@ -712,18 +712,20 @@ addDriver() { addDrivers() { local src="$1" - local file="$2" - local index="$3" - local version="$4" + local tmp="$2" + local file="$3" + local index="$4" + local version="$5" + local drivers="$tmp/drivers" + + rm -rf "$drivers" + mkdir -p "$drivers" local msg="Adding drivers to image..." info "$msg" && html "$msg" - local drivers="$TMP/drivers" - mkdir -p "$drivers" - if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then - error "Failed to extract driver!" && return 1 + error "Failed to extract drivers from archive!" && return 1 fi local target="\$WinPEDriver\$" @@ -738,8 +740,8 @@ addDrivers() { addDriver "$version" "$drivers" "$target" "smbus" addDriver "$version" "$drivers" "$target" "qxldod" addDriver "$version" "$drivers" "$target" "viorng" - addDriver "$version" "$drivers" "$target" "viomem" addDriver "$version" "$drivers" "$target" "viostor" + addDriver "$version" "$drivers" "$target" "viomem" addDriver "$version" "$drivers" "$target" "NetKVM" addDriver "$version" "$drivers" "$target" "Balloon" addDriver "$version" "$drivers" "$target" "vioscsi" @@ -797,6 +799,7 @@ updateImage() { local dir="$1" local asset="$2" local language="$3" + local tmp="/run/shm/img" local file="autounattend.xml" local org="${file//.xml/.org}" local dat="${file//.xml/.dat}" @@ -812,6 +815,9 @@ updateImage() { fi fi + rm -rf "$tmp" + mkdir -p "$tmp" + src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then @@ -832,7 +838,7 @@ updateImage() { index="2" fi - if ! addDrivers "$src" "$wim" "$index" "$DETECTED"; then + if ! addDrivers "$src" "$tmp" "$wim" "$index" "$DETECTED"; then error "Failed to add drivers to image!" && return 1 fi @@ -840,17 +846,14 @@ updateImage() { error "Failed to add OEM folder to image!" && return 1 fi - if wimlib-imagex extract "$wim" "$index" "/$file" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex extract "$wim" "$index" "/$dat" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then + if wimlib-imagex extract "$wim" "$index" "/$file" "--dest-dir=$tmp" >/dev/null 2>&1; then + if ! wimlib-imagex extract "$wim" "$index" "/$dat" "--dest-dir=$tmp" >/dev/null 2>&1; then + if ! wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$tmp" >/dev/null 2>&1; then if ! wimlib-imagex update "$wim" "$index" --command "rename /$file /$org" > /dev/null; then warn "failed to backup original answer file ($file)." fi fi fi - rm -f "$TMP/$dat" - rm -f "$TMP/$org" - rm -f "$TMP/$file" fi if [[ "$MANUAL" != [Yy1]* ]]; then @@ -858,7 +861,7 @@ updateImage() { xml=$(basename "$asset") info "Adding $xml for automatic installation..." - local answer="$TMP/$xml" + local answer="$tmp/$xml" cp "$asset" "$answer" updateXML "$answer" "$language" @@ -869,22 +872,18 @@ updateImage() { wimlib-imagex update "$wim" "$index" --command "add $answer /$dat" > /dev/null || true fi - rm -f "$answer" - fi if [[ "$MANUAL" == [Yy1]* ]]; then wimlib-imagex update "$wim" "$index" --command "delete --force /$file" > /dev/null || true - if wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex update "$wim" "$index" --command "add $TMP/$org /$file" > /dev/null; then + if wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$tmp" >/dev/null 2>&1; then + if ! wimlib-imagex update "$wim" "$index" --command "add $tmp/$org /$file" > /dev/null; then warn "failed to restore original answer file ($org)." fi fi - rm -f "$TMP/$org" - fi local find="$file" @@ -899,6 +898,7 @@ updateImage() { fi fi + rm -rf "$tmp" return 0 } From 0dabce04a6fc78347dfc130557f7a579d74bfeb1 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 12 Oct 2024 15:52:51 +0200 Subject: [PATCH 276/505] docs: Features (#797) --- readme.md | 1 - 1 file changed, 1 deletion(-) diff --git a/readme.md b/readme.md index c1c88c2..24a262c 100644 --- a/readme.md +++ b/readme.md @@ -16,7 +16,6 @@ Windows inside a Docker container. ## Features ✨ - - Multi-language - ISO downloader - KVM acceleration - Web-based viewer From 9db3651654544558ded41db510b14861d29a04f2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:54:35 +0200 Subject: [PATCH 277/505] feat: Select LTSC edition based on key (#798) --- assets/win11x64-iot.xml | 8 +------- assets/win11x64-ltsc.xml | 8 +------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 89aa0d6..0de7bb4 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -61,12 +61,6 @@ </DiskConfiguration> <ImageInstall> <OSImage> - <InstallFrom> - <MetaData wcm:action="add"> - <Key>/image/index</Key> - <Value>2</Value> - </MetaData> - </InstallFrom> <InstallTo> <DiskID>0</DiskID> <PartitionID>3</PartitionID> @@ -87,7 +81,7 @@ <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> <ProductKey> - <Key /> + <Key>CGK42-GYN6Y-VD22B-BX98W-J8JXD</Key> </ProductKey> </UserData> <EnableFirewall>false</EnableFirewall> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 545ea88..8e42eb6 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -61,12 +61,6 @@ </DiskConfiguration> <ImageInstall> <OSImage> - <InstallFrom> - <MetaData wcm:action="add"> - <Key>/image/index</Key> - <Value>1</Value> - </MetaData> - </InstallFrom> <InstallTo> <DiskID>0</DiskID> <PartitionID>3</PartitionID> @@ -87,7 +81,7 @@ <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> <ProductKey> - <Key /> + <Key>M7XTQ-FN8P6-TTKYV-9D4CC-J462D</Key> </ProductKey> </UserData> <EnableFirewall>false</EnableFirewall> From edb300dfec9cce9caf44415cb4d4e68f4579b994 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 12 Oct 2024 18:09:13 +0200 Subject: [PATCH 278/505] feat: Additional download mirrors (#799) --- src/mido.sh | 44 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index 454e83f..0c6b58e 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -309,7 +309,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win2008r2" | "win81${PLATFORM,,}-enterprise-eval" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot-eval" ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -336,15 +336,47 @@ getWindows() { "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win81${PLATFORM,,}-enterprise-eval" ) - MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" && return 0 - ;; - "win2008r2" ) - MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" && return 0 + "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + MIDO_URL="" + return 1 + fi + + case "${version,,}" in + "win81${PLATFORM,,}-enterprise"* ) + MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" + return 0 + ;; + "win2025-eval" ) + MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" + return 0 + ;; + "win2022-eval" ) + MIDO_URL="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" + return 0 + ;; + "win2019-eval" ) + MIDO_URL="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" + return 0 + ;; + "win2016-eval" ) + MIDO_URL="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO" + return 0 + ;; + "win2012r2-eval" ) + MIDO_URL="https://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO" + return 0 + ;; + "win2008r2" ) + MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" + return 0 + ;; + esac + MIDO_URL="" return 1 } From ff55f843bd75082c6fff613a43027226baf3a2fe Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 12 Oct 2024 19:02:03 +0200 Subject: [PATCH 279/505] feat: Additional download mirrors (#801) --- src/mido.sh | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index 0c6b58e..079f9f2 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -309,7 +309,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot-eval" ) + "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -317,8 +317,8 @@ getWindows() { esac case "${version,,}" in - "win11${PLATFORM,,}-enterprise-iot-eval" ) ;; - "win11${PLATFORM,,}-enterprise-ltsc-eval" ) ;; + "win11${PLATFORM,,}-enterprise-iot"* ) ;; + "win11${PLATFORM,,}-enterprise-ltsc"* ) ;; * ) if [[ "${PLATFORM,,}" != "x64" ]]; then error "No download for the ${PLATFORM^^} platform available for $edition!" @@ -341,6 +341,11 @@ getWindows() { * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac + if [[ "${PLATFORM,,}" != "x64" ]]; then + MIDO_URL="" + return 1 + fi + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then MIDO_URL="" return 1 @@ -351,6 +356,10 @@ getWindows() { MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" return 0 ;; + "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENT_IOT_LTSC_EVAL_x64FRE_en-us.iso" + return 0 + ;; "win2025-eval" ) MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" return 0 From 3cab3d1c7bd7de8d7347b61c884e970a51b6d661 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 13 Oct 2024 11:28:21 +0200 Subject: [PATCH 280/505] feat: Extract drivers to temporary folder (#803) --- src/define.sh | 64 +++++++++++++++++++++++++++----------------------- src/install.sh | 32 ++++--------------------- 2 files changed, 38 insertions(+), 58 deletions(-) diff --git a/src/define.sh b/src/define.sh index cd214df..1b4bd77 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1637,6 +1637,31 @@ validVersion() { return 1 } +addFolder() { + + local src="$1" + local folder="/oem" + + [ ! -d "$folder" ] && folder="/OEM" + [ ! -d "$folder" ] && folder="$STORAGE/oem" + [ ! -d "$folder" ] && folder="$STORAGE/OEM" + [ ! -d "$folder" ] && return 0 + + local msg="Adding OEM folder to image..." + info "$msg" && html "$msg" + + local dest="$src/\$OEM\$/\$1/OEM" + mkdir -p "$dest" + + ! cp -Lr "$folder/." "$dest" && return 1 + + local file + file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) + [ -f "$file" ] && unix2dos -q "$file" + + return 0 +} + migrateFiles() { local base="$1" @@ -1665,7 +1690,7 @@ prepareInstall() { local arch="$4" local key="$5" local driver="$6" - local drivers="/run/shm/drivers" + local drivers="/tmp/drivers" rm -rf "$drivers" mkdir -p "$drivers" @@ -1723,8 +1748,8 @@ prepareInstall() { fi mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" - cp -a "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" - cp -a "$drivers/sata/xp/$arch/." "$target" + cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" + cp -Lr "$drivers/sata/xp/$arch/." "$target" sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" @@ -1749,23 +1774,14 @@ prepareInstall() { warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." fi - local oem="" - local folder="/oem" - - [ ! -d "$folder" ] && folder="/OEM" - [ ! -d "$folder" ] && folder="$STORAGE/oem" - [ ! -d "$folder" ] && folder="$STORAGE/OEM" - - if [ -d "$folder" ]; then - - file=$(find "$folder" -maxdepth 1 -type f -iname install.bat | head -n 1) - - if [ -f "$file" ]; then - unix2dos -q "$file" - oem="\"Script\"=\"cmd /C start \\\"Install\\\" \\\"cmd /C C:\\\\OEM\\\\install.bat\\\"\"" - fi + if ! addFolder "$dir"; then + error "Failed to add OEM folder to image!" && return 1 fi + local oem="" + local install="$dir/\$OEM\$/\$1/OEM/install.bat" + [ -f "$install" ] && oem="\"Script\"=\"cmd /C start \\\"Install\\\" \\\"cmd /C C:\\\\OEM\\\\install.bat\\\"\"" + [ -z "$YRES" ] && YRES="720" [ -z "$XRES" ] && XRES="1280" @@ -1958,18 +1974,6 @@ prepareInstall() { echo "" } | unix2dos > "$dir/\$OEM\$/cmdlines.txt" - [ ! -d "$folder" ] && return 0 - - msg="Adding OEM folder to image..." - info "$msg" && html "$msg" - - local dest="$dir/\$OEM\$/\$1/" - mkdir -p "$dest" - - if ! cp -r "$folder" "$dest"; then - error "Failed to copy OEM folder!" && return 1 - fi - return 0 } diff --git a/src/install.sh b/src/install.sh index 32f2f68..f6cad16 100644 --- a/src/install.sh +++ b/src/install.sh @@ -704,8 +704,9 @@ addDriver() { esac local dest="$path/$target/$driver" - mv "$path/$driver/$folder" "$dest" + mkdir -p "$dest" + cp -Lr "$path/$driver/$folder/." "$dest" return 0 } @@ -756,7 +757,7 @@ addDrivers() { # Workaround Virtio GPU driver bug local dst="$src/\$OEM\$/\$\$/Drivers" mkdir -p "$dst" - ! cp -a "$dest/." "$dst" && return 1 + ! cp -Lr "$dest/." "$dst" && return 1 rm -rf "$dest/viogpudo" ;; esac @@ -769,37 +770,12 @@ addDrivers() { return 0 } -addFolder() { - - local src="$1" - local folder="/oem" - - [ ! -d "$folder" ] && folder="/OEM" - [ ! -d "$folder" ] && folder="$STORAGE/oem" - [ ! -d "$folder" ] && folder="$STORAGE/OEM" - [ ! -d "$folder" ] && return 0 - - local msg="Adding OEM folder to image..." - info "$msg" && html "$msg" - - local dest="$src/\$OEM\$/\$1/OEM" - mkdir -p "$dest" - - ! cp -a "$folder/." "$dest" && return 1 - - local file - file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) - [ -f "$file" ] && unix2dos -q "$file" - - return 0 -} - updateImage() { local dir="$1" local asset="$2" local language="$3" - local tmp="/run/shm/img" + local tmp="/tmp/install" local file="autounattend.xml" local org="${file//.xml/.org}" local dat="${file//.xml/.dat}" From 16c3a047c2ca6e5bfbff0f135a49003276ad645c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 13 Oct 2024 12:00:31 +0200 Subject: [PATCH 281/505] fix: Shared folder mount (#804) --- readme.md | 2 +- src/samba.sh | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 24a262c..2e98468 100644 --- a/readme.md +++ b/readme.md @@ -139,7 +139,7 @@ kubectl apply -f kubernetes.yml ```yaml volumes: - - /home/user/example:/shared + - /home/user/example:/data ``` The example folder `/home/user/example` will be available as ` \\host.lan\Data`. diff --git a/src/samba.sh b/src/samba.sh index 71f9bcf..6a65095 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -14,7 +14,15 @@ if [[ "$DHCP" == [Yy1]* ]]; then interface="$VM_NET_DEV" fi -share="/shared" +share="/data" + +if [ ! -d "$share" ] && [ -d "$STORAGE/data" ]; then + share="$STORAGE/data" +fi + +if [ ! -d "$share" ] && [ -d "/shared" ]; then + share="/shared" +fi if [ ! -d "$share" ] && [ -d "$STORAGE/shared" ]; then share="$STORAGE/shared" @@ -36,11 +44,11 @@ if [ -z "$(ls -A "$share")" ]; then echo "To change its location, include the following bind mount in your compose file:" echo "" echo " volumes:" - echo " - \"/home/user/example:/shared\"" + echo " - \"/home/user/example:/data\"" echo "" echo "Or in your run command:" echo "" - echo " -v \"/home/user/example:/shared\"" + echo " -v \"/home/user/example:/data\"" echo "" echo "Replace the example path /home/user/example with the desired shared folder." echo "" From a659c1c9da635a5f594fbb2450be3edb834a2b21 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 13 Oct 2024 21:14:38 +0200 Subject: [PATCH 282/505] feat: Use bsdtar to extract driver archive (#805) --- Dockerfile | 3 ++- src/define.sh | 2 +- src/install.sh | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 74540dc..a8e4197 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,8 @@ RUN set -eu && \ dos2unix \ cabextract \ genisoimage \ - libxml2-utils && \ + libxml2-utils \ + libarchive-tools && \ apt-get clean && \ echo "$VERSION_ARG" > /run/version && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/src/define.sh b/src/define.sh index 1b4bd77..2fc1b1d 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1704,7 +1704,7 @@ prepareInstall() { local msg="Adding drivers to image..." info "$msg" && html "$msg" - if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then + if ! bsdtar -xf /drivers.txz -C "$drivers"; then error "Failed to extract drivers!" && return 1 fi diff --git a/src/install.sh b/src/install.sh index f6cad16..b0c58ff 100644 --- a/src/install.sh +++ b/src/install.sh @@ -725,7 +725,7 @@ addDrivers() { local msg="Adding drivers to image..." info "$msg" && html "$msg" - if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then + if ! bsdtar -xf /drivers.txz -C "$drivers"; then error "Failed to extract drivers from archive!" && return 1 fi From 955f8a08a0584a514583535ce5fc50f7f718902a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Oct 2024 01:03:52 +0200 Subject: [PATCH 283/505] fix: Dereference symbolic links (#806) --- src/define.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/define.sh b/src/define.sh index 2fc1b1d..7a1c705 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1715,21 +1715,21 @@ prepareInstall() { error "Failed to locate required storage drivers!" && return 1 fi - cp "$drivers/viostor/$driver/$arch/viostor.sys" "$target" + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then error "Failed to locate required network drivers!" && return 1 fi mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" if [ ! -f "$target/TXTSETUP.SIF" ]; then error "The file TXTSETUP.SIF could not be found!" && return 1 From b347232ac88c3af7352bfbc4d28f6b6877d9af64 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Oct 2024 03:26:19 +0200 Subject: [PATCH 284/505] feat: Check returnvalues for drivers (#807) --- src/define.sh | 29 ++++++++++++++--------------- src/install.sh | 42 +++++++++++++++++++++--------------------- 2 files changed, 35 insertions(+), 36 deletions(-) diff --git a/src/define.sh b/src/define.sh index 7a1c705..501b8c8 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1651,9 +1651,8 @@ addFolder() { info "$msg" && html "$msg" local dest="$src/\$OEM\$/\$1/OEM" - mkdir -p "$dest" - - ! cp -Lr "$folder/." "$dest" && return 1 + mkdir -p "$dest" || return 1 + cp -Lr "$folder/." "$dest" || return 1 local file file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) @@ -1715,21 +1714,21 @@ prepareInstall() { error "Failed to locate required storage drivers!" && return 1 fi - cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" || return 1 - mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" - cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" + mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then error "Failed to locate required network drivers!" && return 1 fi - mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 if [ ! -f "$target/TXTSETUP.SIF" ]; then error "The file TXTSETUP.SIF could not be found!" && return 1 @@ -1747,9 +1746,9 @@ prepareInstall() { error "Failed to locate required SATA drivers!" && return 1 fi - mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" - cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" - cp -Lr "$drivers/sata/xp/$arch/." "$target" + mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 + cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 + cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1 sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" diff --git a/src/install.sh b/src/install.sh index b0c58ff..4d7f6da 100644 --- a/src/install.sh +++ b/src/install.sh @@ -704,9 +704,9 @@ addDriver() { esac local dest="$path/$target/$driver" - mkdir -p "$dest" + mkdir -p "$dest" || return 1 + cp -Lr "$path/$driver/$folder/." "$dest" || return 1 - cp -Lr "$path/$driver/$folder/." "$dest" return 0 } @@ -731,33 +731,33 @@ addDrivers() { local target="\$WinPEDriver\$" local dest="$drivers/$target" - mkdir -p "$dest" + mkdir -p "$dest" || return 1 wimlib-imagex update "$file" "$index" --command "delete --force --recursive /$target" >/dev/null || true - addDriver "$version" "$drivers" "$target" "qxl" - addDriver "$version" "$drivers" "$target" "viofs" - addDriver "$version" "$drivers" "$target" "sriov" - addDriver "$version" "$drivers" "$target" "smbus" - addDriver "$version" "$drivers" "$target" "qxldod" - addDriver "$version" "$drivers" "$target" "viorng" - addDriver "$version" "$drivers" "$target" "viostor" - addDriver "$version" "$drivers" "$target" "viomem" - addDriver "$version" "$drivers" "$target" "NetKVM" - addDriver "$version" "$drivers" "$target" "Balloon" - addDriver "$version" "$drivers" "$target" "vioscsi" - addDriver "$version" "$drivers" "$target" "pvpanic" - addDriver "$version" "$drivers" "$target" "vioinput" - addDriver "$version" "$drivers" "$target" "viogpudo" - addDriver "$version" "$drivers" "$target" "vioserial" - addDriver "$version" "$drivers" "$target" "qemupciserial" + addDriver "$version" "$drivers" "$target" "qxl" || return 1 + addDriver "$version" "$drivers" "$target" "viofs" || return 1 + addDriver "$version" "$drivers" "$target" "sriov" || return 1 + addDriver "$version" "$drivers" "$target" "smbus" || return 1 + addDriver "$version" "$drivers" "$target" "qxldod" || return 1 + addDriver "$version" "$drivers" "$target" "viorng" || return 1 + addDriver "$version" "$drivers" "$target" "viostor" || return 1 + addDriver "$version" "$drivers" "$target" "viomem" || return 1 + addDriver "$version" "$drivers" "$target" "NetKVM" || return 1 + addDriver "$version" "$drivers" "$target" "Balloon" || return 1 + addDriver "$version" "$drivers" "$target" "vioscsi" || return 1 + addDriver "$version" "$drivers" "$target" "pvpanic" || return 1 + addDriver "$version" "$drivers" "$target" "vioinput" || return 1 + addDriver "$version" "$drivers" "$target" "viogpudo" || return 1 + addDriver "$version" "$drivers" "$target" "vioserial" || return 1 + addDriver "$version" "$drivers" "$target" "qemupciserial" || return 1 case "${version,,}" in "win11x64"* | "win2025"* ) # Workaround Virtio GPU driver bug local dst="$src/\$OEM\$/\$\$/Drivers" - mkdir -p "$dst" - ! cp -Lr "$dest/." "$dst" && return 1 + mkdir -p "$dst" || return 1 + cp -Lr "$dest/." "$dst" || return 1 rm -rf "$dest/viogpudo" ;; esac From 69b450299c684a80e16e345bcad356849a5c5f2c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Oct 2024 15:23:59 +0200 Subject: [PATCH 285/505] fix: Continue without drivers (#809) --- src/define.sh | 6 +++--- src/install.sh | 27 ++++++++++++++------------- src/mido.sh | 2 +- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/define.sh b/src/define.sh index 501b8c8..e496be5 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1677,7 +1677,7 @@ migrateFiles() { [[ "${version,,}" == "win7x64" ]] && file="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" [ ! -f "$STORAGE/$file" ] && return 0 - ! mv -f "$STORAGE/$file" "$base" && return 1 + mv -f "$STORAGE/$file" "$base" || return 1 return 0 } @@ -1996,7 +1996,7 @@ prepare2k3() { key="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" fi - ! prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" && return 1 + prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" || return 1 return 0 } @@ -2021,7 +2021,7 @@ prepareXP() { key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" fi - ! prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" && return 1 + prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" || return 1 return 0 } diff --git a/src/install.sh b/src/install.sh index 4d7f6da..3170833 100644 --- a/src/install.sh +++ b/src/install.sh @@ -541,7 +541,7 @@ detectImage() { fi info=$(wimlib-imagex info -xml "$wim" | tr -d '\000') - ! checkPlatform "$info" && exit 67 + checkPlatform "$info" || exit 67 DETECTED=$(detectVersion "$info") @@ -588,7 +588,7 @@ prepareImage() { desc=$(printVersion "$DETECTED" "$DETECTED") - ! setMachine "$DETECTED" "$iso" "$dir" "$desc" && return 1 + setMachine "$DETECTED" "$iso" "$dir" "$desc" || return 1 skipVersion "$DETECTED" && return 0 if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then @@ -815,11 +815,11 @@ updateImage() { fi if ! addDrivers "$src" "$tmp" "$wim" "$index" "$DETECTED"; then - error "Failed to add drivers to image!" && return 1 + error "Failed to add drivers to image!" fi if ! addFolder "$src"; then - error "Failed to add OEM folder to image!" && return 1 + error "Failed to add OEM folder to image!" fi if wimlib-imagex extract "$wim" "$index" "/$file" "--dest-dir=$tmp" >/dev/null 2>&1; then @@ -884,7 +884,8 @@ removeImage() { [ ! -f "$iso" ] && return 0 [ -n "$CUSTOM" ] && return 0 - ! rm -f "$iso" 2> /dev/null && warn "failed to remove $iso !" + + rm -f "$iso" 2> /dev/null || warn "failed to remove $iso !" return 0 } @@ -927,20 +928,20 @@ buildImage() { if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then - ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ - -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log" && failed="y" + genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ + -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log" || failed="y" else case "${DETECTED,,}" in "win2k"* | "winxp"* | "win2003"* ) - ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ - -relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log" && failed="y" ;; + genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ + -relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log" || failed="y" ;; "win9"* ) - ! genisoimage -o "$out" -b "$ETFS" -J -r -V "${LABEL::30}" -quiet "$dir" 2> "$log" && failed="y" ;; + genisoimage -o "$out" -b "$ETFS" -J -r -V "${LABEL::30}" -quiet "$dir" 2> "$log" || failed="y" ;; * ) - ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ - -udf -allow-limited-size -quiet "$dir" 2> "$log" && failed="y" ;; + genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ + -udf -allow-limited-size -quiet "$dir" 2> "$log" || failed="y" ;; esac fi @@ -956,7 +957,7 @@ buildImage() { [ -s "$log" ] && error="$(<"$log")" [[ "$error" != "$hide" ]] && echo "$error" - ! mv -f "$out" "$BOOT" && return 1 + mv -f "$out" "$BOOT" || return 1 return 0 } diff --git a/src/mido.sh b/src/mido.sh index 079f9f2..ef8015e 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -592,7 +592,7 @@ downloadFile() { if [ "$total" -lt 100000000 ]; then error "Invalid download link: $url (is only $total bytes?). Please report this at $SUPPORT/issues." && return 1 fi - ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 + verifyFile "$iso" "$size" "$total" "$sum" || return 1 html "Download finished successfully..." && return 0 fi From 815a3f3c6637e617a0b121510cf43267c9586f4c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Oct 2024 16:40:15 +0200 Subject: [PATCH 286/505] feat: Support multiple shared folders (#810) --- src/samba.sh | 92 ++++++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 6a65095..498194f 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -14,47 +14,52 @@ if [[ "$DHCP" == [Yy1]* ]]; then interface="$VM_NET_DEV" fi -share="/data" +addShare() { + local dir="$1" + local name="$2" + local comment="$3" -if [ ! -d "$share" ] && [ -d "$STORAGE/data" ]; then - share="$STORAGE/data" -fi + mkdir -p "$dir" || return 1 -if [ ! -d "$share" ] && [ -d "/shared" ]; then - share="/shared" -fi + if [ -z "$(ls -A "$dir")" ]; then -if [ ! -d "$share" ] && [ -d "$STORAGE/shared" ]; then - share="$STORAGE/shared" -fi + chmod 777 "$dir" -mkdir -p "$share" + { echo "--------------------------------------------------------" + echo " $APP for Docker v$(</run/version)..." + echo " For support visit $SUPPORT" + echo "--------------------------------------------------------" + echo "" + echo "Using this folder you can share files with the host machine." + echo "" + echo "To change its location, include the following bind mount in your compose file:" + echo "" + echo " volumes:" + echo " - \"/home/example:/${name,,}\"" + echo "" + echo "Or in your run command:" + echo "" + echo " -v \"/home/example:/${name,,}\"" + echo "" + echo "Replace the example path /home/example with the desired shared folder." + echo "" + } | unix2dos > "$dir/readme.txt" -if [ -z "$(ls -A "$share")" ]; then + fi - chmod 777 "$share" + { echo "" + echo "[$name]" + echo " path = $dir" + echo " comment = $comment" + echo " writable = yes" + echo " guest ok = yes" + echo " guest only = yes" + echo " force user = root" + echo " force group = root" + } >> "/etc/samba/smb.conf" - { echo "--------------------------------------------------------" - echo " $APP for Docker v$(</run/version)..." - echo " For support visit $SUPPORT" - echo "--------------------------------------------------------" - echo "" - echo "Using this folder you can share files with the host machine." - echo "" - echo "To change its location, include the following bind mount in your compose file:" - echo "" - echo " volumes:" - echo " - \"/home/user/example:/data\"" - echo "" - echo "Or in your run command:" - echo "" - echo " -v \"/home/user/example:/data\"" - echo "" - echo "Replace the example path /home/user/example with the desired shared folder." - echo "" - } | unix2dos > "$share/readme.txt" - -fi + return 0 +} { echo "[global]" echo " server string = Dockur" @@ -72,17 +77,18 @@ fi echo " printing = bsd" echo " printcap name = /dev/null" echo " disable spoolss = yes" - echo "" - echo "[Data]" - echo " path = $share" - echo " comment = Shared" - echo " writable = yes" - echo " guest ok = yes" - echo " guest only = yes" - echo " force user = root" - echo " force group = root" } > "/etc/samba/smb.conf" +share="/data" +[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" +[ ! -d "$share" ] && [ -d "/shared" ] && share="/shared" +[ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" + +addShare "$share" "Data" "Shared" || error "Failed to create shared folder!" + +[ -d "/data2" ] && addShare "/data2" "Data2" "Shared" +[ -d "/data3" ] && addShare "/data3" "Data3" "Shared" + if ! smbd; then error "Samba daemon failed to start!" smbd -i --debug-stdout || true From 01c61dd32d924903f8df8f51e7d82adae97dfcb6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:56:43 +0200 Subject: [PATCH 287/505] build: Remove ARM64 platform (#811) --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index eb6174a..f6e2cf1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -74,7 +74,7 @@ jobs: context: . push: true provenance: false - platforms: linux/amd64,linux/arm64 + platforms: linux/amd64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} annotations: ${{ steps.meta.outputs.annotations }} From 760fe9a31f10f3ef831c9cdfc874fd7d0ee7d725 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 15 Oct 2024 00:45:28 +0200 Subject: [PATCH 288/505] feat: Include ARM64 version in image (#812) --- .github/workflows/build.yml | 4 ++-- Dockerfile | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f6e2cf1..8731ab4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -50,7 +50,7 @@ jobs: labels: | org.opencontainers.image.title=${{ vars.NAME }} env: - DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index + DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -74,7 +74,7 @@ jobs: context: . push: true provenance: false - platforms: linux/amd64 + platforms: linux/amd64,linux/arm64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} annotations: ${{ steps.meta.outputs.annotations }} diff --git a/Dockerfile b/Dockerfile index a8e4197..22a73af 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM scratch +FROM scratch AS build-amd64 COPY --from=qemux/qemu-docker:6.05 / / ARG VERSION_ARG="0.0" @@ -31,6 +31,9 @@ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz +FROM dockurr/windows-arm:2.20 AS build-arm64 +FROM build-${TARGETARCH} + EXPOSE 8006 3389 VOLUME /storage From 80c5ba2231eadfa39a51ada9b1e7bb3e95e41d18 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 15 Oct 2024 00:49:05 +0200 Subject: [PATCH 289/505] build: Docker lint exception (#813) --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 2c1ce5a..b132f31 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -21,5 +21,5 @@ jobs: uses: hadolint/hadolint-action@v3.1.0 with: dockerfile: Dockerfile - ignore: DL3008 + ignore: DL3006,DL3008 failure-threshold: warning From bc614fd233768137c118dfcfa74fb121fb48c7d1 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Oct 2024 16:20:12 +0200 Subject: [PATCH 290/505] feat: Use q35 machine type for Windows XP (#823) --- Dockerfile | 2 +- src/define.sh | 34 ++++++++++++++++------------------ src/install.sh | 11 +++++++++++ src/samba.sh | 12 ++---------- 4 files changed, 30 insertions(+), 29 deletions(-) diff --git a/Dockerfile b/Dockerfile index 22a73af..61b4567 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.05 / / +COPY --from=qemux/qemu-docker:6.06 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/define.sh b/src/define.sh index e496be5..271f38c 100644 --- a/src/define.sh +++ b/src/define.sh @@ -2106,39 +2106,37 @@ setMachine() { local dir="$3" local desc="$4" - case "${id,,}" in - "win9"* | "win2k"* ) - MACHINE="pc-i440fx-2.4" ;; - "winxp"* | "win2003"* | "winvistax86"* | "win7x86"* ) - MACHINE="pc-q35-2.10" ;; - esac - - case "${id,,}" in - "win9"* | "win2k"* | "winxp"* | "win2003"* ) - BOOT_MODE="windows_legacy" ;; - "winvista"* | "win7"* | "win2008"* ) - BOOT_MODE="windows_legacy" ;; - esac - case "${id,,}" in "win9"* ) - DISK_TYPE="auto" ETFS="[BOOT]/Boot-1.44M.img" ;; "win2k"* ) - DISK_TYPE="auto" ETFS="[BOOT]/Boot-NoEmul.img" ;; "winxp"* ) - DISK_TYPE="blk" if ! prepareXP "$iso" "$dir" "$desc"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; "win2003"* ) - DISK_TYPE="blk" if ! prepare2k3 "$iso" "$dir" "$desc"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; esac + case "${id,,}" in + "win9"* | "win2k"* ) + USB="None" + DISK_TYPE="auto" + MACHINE="pc-i440fx-2.4" + BOOT_MODE="windows_legacy" ;; + "winxp"* | "win2003"* ) + USB="None" + DISK_TYPE="blk" + BOOT_MODE="windows_legacy" + # Prevent bluescreen if 64 bit PCI hole size is >2G. + ARGS="-global q35-pcihost.x-pci-hole64-fix=false" ;; + "winvista"* | "win7"* | "win2008"* ) + BOOT_MODE="windows_legacy" ;; + esac + return 0 } diff --git a/src/install.sh b/src/install.sh index 3170833..b03f55a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -120,6 +120,7 @@ finishInstall() { rm -f "$STORAGE/windows.old" rm -f "$STORAGE/windows.vga" + rm -f "$STORAGE/windows.args" rm -f "$STORAGE/windows.base" rm -f "$STORAGE/windows.boot" rm -f "$STORAGE/windows.mode" @@ -156,6 +157,11 @@ finishInstall() { fi fi + if [ -n "${ARGS:-}" ]; then + ARGUMENTS="$ARGS ${ARGUMENTS:-}" + echo "$ARGS" > "$STORAGE/windows.args" + fi + if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then echo "$DISK_TYPE" > "$STORAGE/windows.type" fi @@ -965,6 +971,11 @@ bootWindows() { rm -rf "$TMP" + if [ -f "$STORAGE/windows.args" ]; then + ARGS=$(<"$STORAGE/windows.args") + ARGUMENTS="$ARGS ${ARGUMENTS:-}" + fi + if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type") fi diff --git a/src/samba.sh b/src/samba.sh index 498194f..3137d05 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -94,16 +94,8 @@ if ! smbd; then smbd -i --debug-stdout || true fi -legacy="" - -if [ -f "$STORAGE/windows.old" ]; then - MT=$(<"$STORAGE/windows.old") - [[ "${MT,,}" == "pc-q35-2"* ]] && legacy="y" - [[ "${MT,,}" == "pc-i440fx-2"* ]] && legacy="y" -fi - -if [ -n "$legacy" ]; then - # Enable NetBIOS on Windows XP and lower +if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then + # Enable NetBIOS on Windows 7 and lower if ! nmbd; then error "NetBIOS daemon failed to start!" nmbd -i --debug-stdout || true From 80dead14461b0fb0e4b373ba2234164bba0c0e3a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Oct 2024 16:39:42 +0200 Subject: [PATCH 291/505] fix: Enable USB for legacy machines (#824) --- src/define.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index 271f38c..9006934 100644 --- a/src/define.sh +++ b/src/define.sh @@ -2123,12 +2123,10 @@ setMachine() { case "${id,,}" in "win9"* | "win2k"* ) - USB="None" DISK_TYPE="auto" MACHINE="pc-i440fx-2.4" BOOT_MODE="windows_legacy" ;; "winxp"* | "win2003"* ) - USB="None" DISK_TYPE="blk" BOOT_MODE="windows_legacy" # Prevent bluescreen if 64 bit PCI hole size is >2G. From b39507c5a4bf349ccaf8c098156c1ec10d20de13 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:17:09 +0200 Subject: [PATCH 292/505] feat: Additional aliasses (#833) --- src/define.sh | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/define.sh b/src/define.sh index 9006934..c62aecb 100644 --- a/src/define.sh +++ b/src/define.sh @@ -26,19 +26,35 @@ parseVersion() { [ -z "$VERSION" ] && VERSION="win11" case "${VERSION,,}" in - "11" | "11p" | "win11" | "win11p" | "windows11" | "windows 11" ) + "11" | "11p" | "win11" | "pro11" | "win11p" | "windows11" | "windows 11" ) VERSION="win11x64" ;; "11e" | "win11e" | "windows11e" | "windows 11e" ) VERSION="win11x64-enterprise-eval" ;; - "10" | "10p" | "win10" | "win10p" | "windows10" | "windows 10" ) + "iot11" | "11i" | "11iot" | "win11i" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + VERSION="win11x64-enterprise-iot-eval" + [ -z "$DETECTED" ] && DETECTED="win11x64-iot" + ;; + "ltsc11" | "11l" | "11ltsc" | "win11l" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + VERSION="win11x64-enterprise-ltsc-eval" + [ -z "$DETECTED" ] && DETECTED="win11x64-ltsc" + ;; + "10" | "10p" | "win10" | "pro10" | "win10p" | "windows10" | "windows 10" ) VERSION="win10x64" ;; "10e" | "win10e" | "windows10e" | "windows 10e" ) VERSION="win10x64-enterprise-eval" ;; - "8" | "8p" | "81" | "81p" | "8.1" | "win8" | "win8p" | "win81" | "win81p" | "windows 8" ) + "iot10" | "10i" | "10iot" | "win10i" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + VERSION="win10x64-enterprise-iot-eval" + [ -z "$DETECTED" ] && DETECTED="win10x64-iot" + ;; + "ltsc10" | "10l" | "10ltsc" | "win10l" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + VERSION="win10x64-enterprise-ltsc-eval" + [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" + ;; + "8" | "8p" | "81" | "81p" | "pro8" | "8.1" | "win8" | "win8p" | "win81" | "win81p" | "windows 8" ) VERSION="win81x64" ;; "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" ) @@ -105,22 +121,6 @@ parseVersion() { VERSION="tiny10" [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" ;; - "iot11" | "11iot" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" ) - VERSION="win11x64-enterprise-iot-eval" - [ -z "$DETECTED" ] && DETECTED="win11x64-iot" - ;; - "iot10" | "10iot" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" ) - VERSION="win10x64-enterprise-iot-eval" - [ -z "$DETECTED" ] && DETECTED="win10x64-iot" - ;; - "ltsc11" | "11ltsc" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) - VERSION="win11x64-enterprise-ltsc-eval" - [ -z "$DETECTED" ] && DETECTED="win11x64-ltsc" - ;; - "ltsc10" | "10ltsc" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) - VERSION="win10x64-enterprise-ltsc-eval" - [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" - ;; esac return 0 From 86a766381e2bee9bbd62168aa73256d5d4461f54 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 24 Oct 2024 17:49:02 +0200 Subject: [PATCH 293/505] feat: Support 32-bit Windows versions (#834) --- src/define.sh | 63 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/src/define.sh b/src/define.sh index c62aecb..806ad62 100644 --- a/src/define.sh +++ b/src/define.sh @@ -32,11 +32,11 @@ parseVersion() { "11e" | "win11e" | "windows11e" | "windows 11e" ) VERSION="win11x64-enterprise-eval" ;; - "iot11" | "11i" | "11iot" | "win11i" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + "11i" | "11iot" | "iot11" | "win11i" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" ) VERSION="win11x64-enterprise-iot-eval" [ -z "$DETECTED" ] && DETECTED="win11x64-iot" ;; - "ltsc11" | "11l" | "11ltsc" | "win11l" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + "11l" | "11ltsc" | "ltsc11" | "win11l" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) VERSION="win11x64-enterprise-ltsc-eval" [ -z "$DETECTED" ] && DETECTED="win11x64-ltsc" ;; @@ -46,11 +46,11 @@ parseVersion() { "10e" | "win10e" | "windows10e" | "windows 10e" ) VERSION="win10x64-enterprise-eval" ;; - "iot10" | "10i" | "10iot" | "win10i" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + "10i" | "10iot" | "iot10" | "win10i" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" ) VERSION="win10x64-enterprise-iot-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-iot" ;; - "ltsc10" | "10l" | "10ltsc" | "win10l" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + "10l" | "10ltsc" | "ltsc10" | "win10l" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) VERSION="win10x64-enterprise-ltsc-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" ;; @@ -71,21 +71,21 @@ parseVersion() { VERSION="win7x86" [ -z "$DETECTED" ] && DETECTED="win7x86-enterprise" ;; - "vista" | "winvista" | "windowsvista" | "windows vista" ) + "vista" | "6" | "winvista" | "windowsvista" | "windows vista" ) VERSION="winvistax64" [ -z "$DETECTED" ] && DETECTED="winvistax64-enterprise" ;; - "vistu" | "winvistu" | "windowsvistu" | "windows vistu" ) + "vistu" | "6u" | "winvistu" | "windowsvistu" | "windows vistu" ) VERSION="winvistax64-ultimate" ;; - "vistax86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) + "vistax86" | "6x86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) VERSION="winvistax86" [ -z "$DETECTED" ] && DETECTED="winvistax86-enterprise" ;; - "xp" | "xp32" | "xpx86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" ) + "xp" | "xp32" | "xpx86" | "5" | "5x86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" ) VERSION="winxpx86" ;; - "xp64" | "xpx64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" ) + "xp64" | "xpx64" | "5x64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" ) VERSION="winxpx64" ;; "25" | "2025" | "win25" | "win2025" | "windows2025" | "windows 2025" ) @@ -473,6 +473,9 @@ fromFile() { ;; esac + local add="" + [[ "$arch" != "x64" ]] && add="$arch" + case "${file// /_}" in "win7"* | "win_7"* | *"windows7"* | *"windows_7"* ) id="win7${arch}" @@ -502,25 +505,25 @@ fromFile() { id="tiny10" ;; *"server2025"* | *"server_2025"* ) - id="win2025" + id="win2025${add}" ;; *"server2022"* | *"server_2022"* ) - id="win2022" + id="win2022${add}" ;; *"server2019"* | *"server_2019"* ) - id="win2019" + id="win2019${add}" ;; *"server2016"* | *"server_2016"* ) - id="win2016" + id="win2016${add}" ;; *"server2012"* | *"server_2012"* ) - id="win2012r2" + id="win2012r2${add}" ;; *"server2008"* | *"server_2008"* ) - id="win2008r2" + id="win2008r2${add}" ;; *"server2003"* | *"server_2003"* ) - id="win2003r2" + id="win2003r2${add}" ;; esac @@ -538,18 +541,22 @@ fromName() { local name="$1" local arch="$2" + local add="" + [[ "$arch" != "x64" ]] && add="$arch" + case "${name,,}" in - *"server 2025"* ) id="win2025" ;; - *"server 2022"* ) id="win2022" ;; - *"server 2019"* ) id="win2019" ;; - *"server 2016"* ) id="win2016" ;; - *"server 2012"* ) id="win2012r2" ;; - *"server 2008"* ) id="win2008r2" ;; *"windows 7"* ) id="win7${arch}" ;; *"windows 8"* ) id="win81${arch}" ;; *"windows 10"* ) id="win10${arch}" ;; *"windows 11"* ) id="win11${arch}" ;; *"windows vista"* ) id="winvista${arch}" ;; + *"server 2025"* ) id="win2025${add}" ;; + *"server 2022"* ) id="win2022${add}" ;; + *"server 2019"* ) id="win2019${add}" ;; + *"server 2016"* ) id="win2016${add}" ;; + *"server 2012"* ) id="win2012r2${add}" ;; + *"server 2008"* ) id="win2008r2${add}" ;; + *"server 2003"* ) id="win2003r2${add}" ;; esac echo "$id" @@ -589,7 +596,7 @@ getVersion() { *" enterprise"* ) id="$id-enterprise" ;; esac ;; - "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* ) + "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* | "win2003"* ) case "${name,,}" in *" evaluation"* ) id="$id-eval" ;; esac @@ -2128,13 +2135,17 @@ setMachine() { BOOT_MODE="windows_legacy" ;; "winxp"* | "win2003"* ) DISK_TYPE="blk" - BOOT_MODE="windows_legacy" - # Prevent bluescreen if 64 bit PCI hole size is >2G. - ARGS="-global q35-pcihost.x-pci-hole64-fix=false" ;; + BOOT_MODE="windows_legacy" ;; "winvista"* | "win7"* | "win2008"* ) BOOT_MODE="windows_legacy" ;; esac + case "${id,,}" in + "winxp"* | "win2003"* | "winvistax86"* | "win7x86"* | "win2008r2x86"* ) + # Prevent bluescreen if 64 bit PCI hole size is >2G. + ARGS="-global q35-pcihost.x-pci-hole64-fix=false" ;; + esac + return 0 } From f1f6c640b9f4a78e7fdc5ce5a61de840d3114d95 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 10 Nov 2024 00:01:12 +0100 Subject: [PATCH 294/505] docs: Version alias (#859) --- Dockerfile | 2 +- compose.yml | 2 +- kubernetes.yml | 4 +++- readme.md | 42 +++++++++++++++++++++--------------------- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/Dockerfile b/Dockerfile index 61b4567..decadd1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,9 +37,9 @@ FROM build-${TARGETARCH} EXPOSE 8006 3389 VOLUME /storage +ENV VERSION="11" ENV RAM_SIZE="4G" ENV CPU_CORES="2" ENV DISK_SIZE="64G" -ENV VERSION="win11" ENTRYPOINT ["/usr/bin/tini", "-s", "/run/entry.sh"] diff --git a/compose.yml b/compose.yml index b97eaf1..9d0134b 100644 --- a/compose.yml +++ b/compose.yml @@ -3,7 +3,7 @@ services: image: dockurr/windows container_name: windows environment: - VERSION: "win11" + VERSION: "11" devices: - /dev/kvm cap_add: diff --git a/kubernetes.yml b/kubernetes.yml index 2fb5888..efa668d 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -30,8 +30,10 @@ spec: securityContext: privileged: true env: + - name: VERSION + value: "11" - name: RAM_SIZE - value: 4G + value: "4G" - name: CPU_CORES value: "2" - name: DISK_SIZE diff --git a/readme.md b/readme.md index 2e98468..ef87dff 100644 --- a/readme.md +++ b/readme.md @@ -34,7 +34,7 @@ services: image: dockurr/windows container_name: windows environment: - VERSION: "win11" + VERSION: "11" devices: - /dev/kvm cap_add: @@ -78,34 +78,34 @@ kubectl apply -f kubernetes.yml ```yaml environment: - VERSION: "win11" + VERSION: "11" ``` Select from the values below: - | **Value** | **Version** | **Size** | + | **Value** | **Version** | **Size** | |---|---|---| - | `win11` | Windows 11 Pro | 5.4 GB | - | `ltsc11` | Windows 11 LTSC | 4.2 GB | - | `win11e` | Windows 11 Enterprise | 5.8 GB | + | `11` | Windows 11 Pro | 5.4 GB | + | `11l` | Windows 11 LTSC | 4.2 GB | + | `11e` | Windows 11 Enterprise | 5.8 GB | |||| - | `win10` | Windows 10 Pro | 5.7 GB | - | `ltsc10` | Windows 10 LTSC | 4.6 GB | - | `win10e` | Windows 10 Enterprise | 5.2 GB | + | `10` | Windows 10 Pro | 5.7 GB | + | `10l` | Windows 10 LTSC | 4.6 GB | + | `10e` | Windows 10 Enterprise | 5.2 GB | |||| - | `win8` | Windows 8.1 Pro | 4.0 GB | - | `win8e` | Windows 8.1 Enterprise | 3.7 GB | - | `win7` | Windows 7 Enterprise | 3.0 GB | - | `vista` | Windows Vista Enterprise | 3.0 GB | - | `winxp` | Windows XP Professional | 0.6 GB | + | `8` | Windows 8.1 Pro | 4.0 GB | + | `8e` | Windows 8.1 Enterprise | 3.7 GB | + | `7e` | Windows 7 Enterprise | 3.0 GB | + | `ve` | Windows Vista Enterprise | 3.0 GB | + | `xp` | Windows XP Professional | 0.6 GB | |||| - | `2025` | Windows Server 2025 | 5.0 GB | - | `2022` | Windows Server 2022 | 4.7 GB | - | `2019` | Windows Server 2019 | 5.3 GB | - | `2016` | Windows Server 2016 | 6.5 GB | - | `2012` | Windows Server 2012 | 4.3 GB | - | `2008` | Windows Server 2008 | 3.0 GB | - | `2003` | Windows Server 2003 | 0.6 GB | + | `2025` | Windows Server 2025 | 5.0 GB | + | `2022` | Windows Server 2022 | 4.7 GB | + | `2019` | Windows Server 2019 | 5.3 GB | + | `2016` | Windows Server 2016 | 6.5 GB | + | `2012` | Windows Server 2012 | 4.3 GB | + | `2008` | Windows Server 2008 | 3.0 GB | + | `2003` | Windows Server 2003 | 0.6 GB | > [!TIP] > To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). From 2cdb57a6790be2f9749a4873c7d9372926150125 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 10 Nov 2024 00:17:00 +0100 Subject: [PATCH 295/505] feat: Update download links (#860) --- src/define.sh | 59 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/src/define.sh b/src/define.sh index 806ad62..0eff317 100644 --- a/src/define.sh +++ b/src/define.sh @@ -71,14 +71,14 @@ parseVersion() { VERSION="win7x86" [ -z "$DETECTED" ] && DETECTED="win7x86-enterprise" ;; - "vista" | "6" | "winvista" | "windowsvista" | "windows vista" ) + "vista" | "ve" | "6" | "winvista" | "windowsvista" | "windows vista" ) VERSION="winvistax64" [ -z "$DETECTED" ] && DETECTED="winvistax64-enterprise" ;; - "vistu" | "6u" | "winvistu" | "windowsvistu" | "windows vistu" ) + "vistu" | "vu" | "6u" | "winvistu" | "windowsvistu" | "windows vistu" ) VERSION="winvistax64-ultimate" ;; - "vistax86" | "6x86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) + "vistax86" | "vex86" | "6x86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) VERSION="winvistax86" [ -z "$DETECTED" ] && DETECTED="winvistax86-enterprise" ;; @@ -961,17 +961,56 @@ getLink3() { culture=$(getLanguage "$lang" "culture") case "${id,,}" in + "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_windows_11_enterprise_ltsc_2024_x64_dvd_8012f159.iso" ;; + "bg" | "bg-"* ) url="bg-bg_windows_11_enterprise_ltsc_2024_x64_dvd_2778f4e8.iso" ;; + "cs" | "cs-"* ) url="cs-cz_windows_11_enterprise_ltsc_2024_x64_dvd_d4ef05f2.iso" ;; + "da" | "da-"* ) url="da-dk_windows_11_enterprise_ltsc_2024_x64_dvd_c231c267.iso" ;; + "de" | "de-"* ) url="de-de_windows_11_enterprise_ltsc_2024_x64_dvd_4f136f69.iso" ;; + "el" | "el-"* ) url="el-gr_windows_11_enterprise_ltsc_2024_x64_dvd_54eaabb2.iso" ;; + "gb" | "en-gb" ) url="en-gb_windows_11_enterprise_ltsc_2024_x64_dvd_e2137661.iso" ;; + "en" | "en-"* ) + size=5125844992 + sum="157d8365a517c40afeb3106fdd74d0836e1025debbc343f2080e1a8687607f51" + url="en-us_windows_11_enterprise_ltsc_2024_x64_dvd_965cfb00.iso" ;; + "mx" | "es-mx" ) url="es-mx_windows_11_enterprise_ltsc_2024_x64_dvd_3310c094.iso" ;; + "es" | "es-"* ) url="es-es_windows_11_enterprise_ltsc_2024_x64_dvd_77392d61.iso" ;; + "et" | "et-"* ) url="et-ee_windows_11_enterprise_ltsc_2024_x64_dvd_2dbd4bfe.iso" ;; + "fi" | "fi-"* ) url="fi-fi_windows_11_enterprise_ltsc_2024_x64_dvd_998f5df6.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_windows_11_enterprise_ltsc_2024_x64_dvd_78732953.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_11_enterprise_ltsc_2024_x64_dvd_d66e386e.iso" ;; + "he" | "he-"* ) url="he-il_windows_11_enterprise_ltsc_2024_x64_dvd_fae050ec.iso" ;; + "hr" | "hr-"* ) url="hr-hr_windows_11_enterprise_ltsc_2024_x64_dvd_e3594411.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_11_enterprise_ltsc_2024_x64_dvd_8fea6034.iso" ;; + "it" | "it-"* ) url="it-it_windows_11_enterprise_ltsc_2024_x64_dvd_1e8cabb6.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_11_enterprise_ltsc_2024_x64_dvd_e59ad418.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_11_enterprise_ltsc_2024_x64_dvd_b6b6eb18.iso" ;; + "lt" | "lt-"* ) url="lt-lt_windows_11_enterprise_ltsc_2024_x64_dvd_145479e9.iso" ;; + "lv" | "lv-"* ) url="lv-lv_windows_11_enterprise_ltsc_2024_x64_dvd_e0ebc53d.iso" ;; + "nb" | "nb-"* ) url="nb-no_windows_11_enterprise_ltsc_2024_x64_dvd_d41eeb48.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_11_enterprise_ltsc_2024_x64_dvd_e3063aab.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_11_enterprise_ltsc_2024_x64_dvd_e00807a1.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_11_enterprise_ltsc_2024_x64_dvd_2bb6b75b.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_11_enterprise_ltsc_2024_x64_dvd_2f34bd6b.iso" ;; + "ro" | "ro-"* ) url="ro-ro_windows_11_enterprise_ltsc_2024_x64_dvd_2eadb4df.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_11_enterprise_ltsc_2024_x64_dvd_f9af5773.iso" ;; + "sk" | "sk-"* ) url="sk-sk_windows_11_enterprise_ltsc_2024_x64_dvd_03b916e7.iso" ;; + "sl" | "sl-"* ) url="sl-si_windows_11_enterprise_ltsc_2024_x64_dvd_310b3a76.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_windows_11_enterprise_ltsc_2024_x64_dvd_3dfa5da5.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_11_enterprise_ltsc_2024_x64_dvd_191cf991.iso" ;; + "th" | "th-"* ) url="th-th_windows_11_enterprise_ltsc_2024_x64_dvd_47ce2c8a.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_11_enterprise_ltsc_2024_x64_dvd_27bdab81.iso" ;; + "uk" | "uk-"* ) url="uk-ua_windows_11_enterprise_ltsc_2024_x64_dvd_b3f00872.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_11_enterprise_ltsc_2024_x64_dvd_6287d84d.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_11_enterprise_ltsc_2024_x64_dvd_cff9cd2d.iso" ;; + esac + ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" - url="X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" - ;; - "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=5144817664 - sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" - url="X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + url="en-us_windows_11_iot_enterprise_ltsc_2024_x64_dvd_f6b14814.iso" ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) case "${culture,,}" in From 243b3bb5d6883f0c30bd5693db4821cc7fd63834 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 10 Nov 2024 02:45:01 +0100 Subject: [PATCH 296/505] chore(deps): update dockurr/windows-arm docker tag to v2.21 (#861) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index decadd1..82863a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,7 @@ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz -FROM dockurr/windows-arm:2.20 AS build-arm64 +FROM dockurr/windows-arm:2.21 AS build-arm64 FROM build-${TARGETARCH} EXPOSE 8006 3389 From d92ac18210c0928d331d3b380b50de9ba5a1d44d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 10 Nov 2024 11:31:54 +0100 Subject: [PATCH 297/505] docs: Fix typo (#862) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index ef87dff..3e8dcf5 100644 --- a/readme.md +++ b/readme.md @@ -135,7 +135,7 @@ kubectl apply -f kubernetes.yml ### How do I share files with the host? - Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. Double-click it and it will show a folder called `Data`, which can be binded to any folder on your host via the compose file: + Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. Double-click it and it will show a folder called `Data`, which can be bound to any folder on your host via the compose file: ```yaml volumes: @@ -220,7 +220,7 @@ kubectl apply -f kubernetes.yml LANGUAGE: "French" ``` - You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estionian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. + You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estonian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. ### How do I select the keyboard layout? From e292d18d322f58429ba31aa25605c9a77e3ca1b0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 11 Nov 2024 14:13:47 +0100 Subject: [PATCH 298/505] docs: KVM troubleshooting (#865) --- readme.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index 3e8dcf5..4ad3c42 100644 --- a/readme.md +++ b/readme.md @@ -340,24 +340,28 @@ kubectl apply -f kubernetes.yml ### How do I verify if my system supports KVM? - To verify that your system supports KVM, run the following commands: + Only Linux and Windows 11 support KVM virtualization, macOS and Windows 10 do not unfortunately. + + You can run the following commands in Linux to check your system: ```bash sudo apt install cpu-checker sudo kvm-ok ``` - If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, please check whether: + If you receive an error from `kvm-ok` indicating that KVM cannot be used, please check whether: - the virtualization extensions (`Intel VT-x` or `AMD SVM`) are enabled in your BIOS. - - you are running an operating system that supports them, like Linux or Windows 11 (macOS and Windows 10 do not unfortunately). - - you enabled "nested virtualization" if you are running the container inside a virtual machine. - you are not using a cloud provider, as most of them do not allow nested virtualization for their VPS's. - If you didn't receive any error from `kvm-ok` at all, but the container still complains that `/dev/kvm` is missing, it might help to add `privileged: true` to your compose file (or `--privileged` to your `run` command), to rule out any permission issue. + If you do not receive any error from `kvm-ok` but the container still complains about KVM, please check whether: + + - you are not using "Docker Desktop for Linux" as it does not support KVM, instead make use of Docker Engine directly. + + - it could help to add `privileged: true` to your compose file (or `sudo` to your `run` command), to rule out any permission issue. ### How do I run macOS in a container? From 7120584548b3d5fc99b0a8f645c67173d2518f05 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 11 Nov 2024 18:05:59 +0100 Subject: [PATCH 299/505] feat: Additional download mirrors (#870) --- Dockerfile | 2 +- src/define.sh | 597 +++++++++++++++++++++++++++++++++++++------------- src/mido.sh | 31 ++- 3 files changed, 477 insertions(+), 153 deletions(-) diff --git a/Dockerfile b/Dockerfile index 82863a7..e5abb6f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,7 @@ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz -FROM dockurr/windows-arm:2.21 AS build-arm64 +FROM dockurr/windows-arm:2.22 AS build-arm64 FROM build-${TARGETARCH} EXPOSE 8006 3389 diff --git a/src/define.sh b/src/define.sh index 0eff317..a2706e3 100644 --- a/src/define.sh +++ b/src/define.sh @@ -957,53 +957,156 @@ getLink3() { local sum="" local size="" local host="https://drive.massgrave.dev" + local w19="windows_server_2019_x64_dvd" + local w25="windows_server_2025_x64_dvd" + local w16="windows_server_2016_vl_x64_dvd" + local w12="windows_server_2012_r2_vl_with_update_x64_dvd" + local w08="windows_server_2008_r2_with_sp1_vl_build_x64_dvd" + local w81="windows_8.1_enterprise_with_update_x64_dvd" + local l11="windows_11_enterprise_ltsc_2024_x64_dvd" + local l10="windows_10_enterprise_ltsc_2021_x64_dvd" + local c11="windows_11_consumer_editions_version_24h2_x64_dvd" + local b11="windows_11_business_editions_version_24h2_x64_dvd" + local w22="windows_server_2022_updated_oct_2024_x64_dvd_d1a47ecc" + local b10="windows_10_business_editions_version_22h2_updated_oct_2024_x64_dvd" + local c10="windows_10_consumer_editions_version_22h2_updated_oct_2024_x64_dvd_d0cfb2e9" culture=$(getLanguage "$lang" "culture") case "${id,,}" in + "win11x64" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_${c11}_3c9a7ef3.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${c11}_f8623745.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${c11}_ae72ca80.iso" ;; + "da" | "da-"* ) url="da-dk_${c11}_4f25c452.iso" ;; + "de" | "de-"* ) url="de-de_${c11}_bc4adebe.iso" ;; + "el" | "el-"* ) url="el-gr_${c11}_9e6ef9a0.iso" ;; + "gb" | "en-gb" ) url="en-gb_${c11}_4b3a8183.iso" ;; + "en" | "en-"* ) + size=5819484160 + sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" + url="en-us_${c11}_1d5fcad3.iso" ;; + "mx" | "es-mx" ) url="es-es_${c11}_3bc0e5c3.iso" ;; + "es" | "es-"* ) url="es-mx_${c11}_a28d9dab.iso" ;; + "et" | "et-"* ) url="et-ee_${c11}_48306c65.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${c11}_21618747.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${c11}_42755257.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${c11}_033875c5.iso" ;; + "he" | "he-"* ) url="he-il_${c11}_533bc3ac.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${c11}_40c769ed.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${c11}_7d2259d6.iso" ;; + "it" | "it-"* ) url="it-it_${c11}_33e81ff0.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${c11}_fc6538fd.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${c11}_f09a396b.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${c11}_22d54265.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${c11}_5ff65441.iso" ;; + "nb" | "nb-"* ) url="nb-no_${c11}_5a5d625b.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${c11}_7959020a.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${c11}_c0dcd21b.iso" ;; + "br" | "pt-br" ) url="pt-br_${c11}_751fe150.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${c11}_e0df188a.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${c11}_0821b265.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${c11}_784471d8.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${c11}_fd13020e.iso" ;; + "sl" | "sl-"* ) url="sl-si_${c11}_9aa9f408.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${c11}_febab1a9.iso" ;; + "sv" | "sv-"* ) url="sv-se_${c11}_fe34647f.iso" ;; + "th" | "th-"* ) url="th-th_${c11}_fc3e523e.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${c11}_443fefaf.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${c11}_32966915.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${c11}_d0825b63.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${c11}_bfc0d79b.iso" ;; + esac + ;; + "win11x64-enterprise" | "win11x64-enterprise-eval" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_${b11}_47dae48e.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b11}_4231caca.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b11}_ca1661fd.iso" ;; + "da" | "da-"* ) url="da-dk_${b11}_ac0db9fc.iso" ;; + "de" | "de-"* ) url="de-de_${b11}_87a70226.iso" ;; + "el" | "el-"* ) url="el-gr_${b11}_946ba34d.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b11}_27d8c2f1.iso" ;; + "en" | "en-"* ) + size=5722114048 + sum="d0dca325314322518ae967d58c3061bcae57ee9743a8a1cf374aad8637e5e8ac" + url="en-us_${b11}_59a1851e.iso" ;; + "mx" | "es-mx" ) url="es-es_${b11}_86632f8d.iso" ;; + "es" | "es-"* ) url="es-mx_${b11}_6ee25ce4.iso" ;; + "et" | "et-"* ) url="et-ee_${b11}_c26c1e3a.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b11}_59dd0bb5.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b11}_a02f0c99.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b11}_c0a4510e.iso" ;; + "he" | "he-"* ) url="he-il_${b11}_c844d280.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b11}_6e4839cc.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b11}_aed71101.iso" ;; + "it" | "it-"* ) url="it-it_${b11}_5552c3a1.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b11}_7fdb7541.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b11}_646bb9fc.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b11}_54d6d7e2.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b11}_acee0541.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b11}_78f22960.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b11}_0719b251.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b11}_1a183794.iso" ;; + "br" | "pt-br" ) url="pt-br_${b11}_ecc90645.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b11}_e7bf77a1.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b11}_9adc8d7b.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b11}_f9b9b5d6.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b11}_1a91433b.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b11}_0b79bd14.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b11}_8a4b35b5.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b11}_55ad9818.iso" ;; + "th" | "th-"* ) url="th-th_${b11}_a2a350c3.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b11}_f35a9f1b.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b11}_38ff1d1d.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_a9b30de5.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b11}_5f9e5858.iso" ;; + esac + ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_11_enterprise_ltsc_2024_x64_dvd_8012f159.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_11_enterprise_ltsc_2024_x64_dvd_2778f4e8.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_11_enterprise_ltsc_2024_x64_dvd_d4ef05f2.iso" ;; - "da" | "da-"* ) url="da-dk_windows_11_enterprise_ltsc_2024_x64_dvd_c231c267.iso" ;; - "de" | "de-"* ) url="de-de_windows_11_enterprise_ltsc_2024_x64_dvd_4f136f69.iso" ;; - "el" | "el-"* ) url="el-gr_windows_11_enterprise_ltsc_2024_x64_dvd_54eaabb2.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_11_enterprise_ltsc_2024_x64_dvd_e2137661.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${l11}_8012f159.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${l11}_2778f4e8.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${l11}_d4ef05f2.iso" ;; + "da" | "da-"* ) url="da-dk_${l11}_c231c267.iso" ;; + "de" | "de-"* ) url="de-de_${l11}_4f136f69.iso" ;; + "el" | "el-"* ) url="el-gr_${l11}_54eaabb2.iso" ;; + "gb" | "en-gb" ) url="en-gb_${l11}_e2137661.iso" ;; "en" | "en-"* ) size=5125844992 sum="157d8365a517c40afeb3106fdd74d0836e1025debbc343f2080e1a8687607f51" - url="en-us_windows_11_enterprise_ltsc_2024_x64_dvd_965cfb00.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_11_enterprise_ltsc_2024_x64_dvd_3310c094.iso" ;; - "es" | "es-"* ) url="es-es_windows_11_enterprise_ltsc_2024_x64_dvd_77392d61.iso" ;; - "et" | "et-"* ) url="et-ee_windows_11_enterprise_ltsc_2024_x64_dvd_2dbd4bfe.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_11_enterprise_ltsc_2024_x64_dvd_998f5df6.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_11_enterprise_ltsc_2024_x64_dvd_78732953.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_11_enterprise_ltsc_2024_x64_dvd_d66e386e.iso" ;; - "he" | "he-"* ) url="he-il_windows_11_enterprise_ltsc_2024_x64_dvd_fae050ec.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_11_enterprise_ltsc_2024_x64_dvd_e3594411.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_11_enterprise_ltsc_2024_x64_dvd_8fea6034.iso" ;; - "it" | "it-"* ) url="it-it_windows_11_enterprise_ltsc_2024_x64_dvd_1e8cabb6.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_11_enterprise_ltsc_2024_x64_dvd_e59ad418.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_11_enterprise_ltsc_2024_x64_dvd_b6b6eb18.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_11_enterprise_ltsc_2024_x64_dvd_145479e9.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_11_enterprise_ltsc_2024_x64_dvd_e0ebc53d.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_11_enterprise_ltsc_2024_x64_dvd_d41eeb48.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_11_enterprise_ltsc_2024_x64_dvd_e3063aab.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_11_enterprise_ltsc_2024_x64_dvd_e00807a1.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_11_enterprise_ltsc_2024_x64_dvd_2bb6b75b.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_11_enterprise_ltsc_2024_x64_dvd_2f34bd6b.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_11_enterprise_ltsc_2024_x64_dvd_2eadb4df.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_11_enterprise_ltsc_2024_x64_dvd_f9af5773.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_11_enterprise_ltsc_2024_x64_dvd_03b916e7.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_11_enterprise_ltsc_2024_x64_dvd_310b3a76.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_11_enterprise_ltsc_2024_x64_dvd_3dfa5da5.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_11_enterprise_ltsc_2024_x64_dvd_191cf991.iso" ;; - "th" | "th-"* ) url="th-th_windows_11_enterprise_ltsc_2024_x64_dvd_47ce2c8a.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_11_enterprise_ltsc_2024_x64_dvd_27bdab81.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_11_enterprise_ltsc_2024_x64_dvd_b3f00872.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_11_enterprise_ltsc_2024_x64_dvd_6287d84d.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_11_enterprise_ltsc_2024_x64_dvd_cff9cd2d.iso" ;; + url="en-us_${l11}_965cfb00.iso" ;; + "mx" | "es-mx" ) url="es-mx_${l11}_3310c094.iso" ;; + "es" | "es-"* ) url="es-es_${l11}_77392d61.iso" ;; + "et" | "et-"* ) url="et-ee_${l11}_2dbd4bfe.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${l11}_998f5df6.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${l11}_78732953.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${l11}_d66e386e.iso" ;; + "he" | "he-"* ) url="he-il_${l11}_fae050ec.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${l11}_e3594411.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${l11}_8fea6034.iso" ;; + "it" | "it-"* ) url="it-it_${l11}_1e8cabb6.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${l11}_e59ad418.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${l11}_b6b6eb18.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${l11}_145479e9.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${l11}_e0ebc53d.iso" ;; + "nb" | "nb-"* ) url="nb-no_${l11}_d41eeb48.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${l11}_e3063aab.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${l11}_e00807a1.iso" ;; + "br" | "pt-br" ) url="pt-br_${l11}_2bb6b75b.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${l11}_2f34bd6b.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${l11}_2eadb4df.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${l11}_f9af5773.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${l11}_03b916e7.iso" ;; + "sl" | "sl-"* ) url="sl-si_${l11}_310b3a76.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${l11}_3dfa5da5.iso" ;; + "sv" | "sv-"* ) url="sv-se_${l11}_191cf991.iso" ;; + "th" | "th-"* ) url="th-th_${l11}_47ce2c8a.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${l11}_27bdab81.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${l11}_b3f00872.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${l11}_6287d84d.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${l11}_cff9cd2d.iso" ;; esac ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) @@ -1012,49 +1115,139 @@ getLink3() { sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="en-us_windows_11_iot_enterprise_ltsc_2024_x64_dvd_f6b14814.iso" ;; + "win10x64" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_${c10}.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${c10}.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${c10}.iso" ;; + "da" | "da-"* ) url="da-dk_${c10}.iso" ;; + "de" | "de-"* ) url="de-de_${c10}.iso" ;; + "el" | "el-"* ) url="el-gr_${c10}.iso" ;; + "gb" | "en-gb" ) url="en-gb_${c10}.iso" ;; + "en" | "en-"* ) + size=7176140800 + sum="dda45d271061937657689b30944c792be97405fd5ca2110094049dc01a9201ec" + url="en-us_${c10}.iso" ;; + "mx" | "es-mx" ) url="es-mx_${c10}.iso" ;; + "es" | "es-"* ) url="es-es_${c10}.iso" ;; + "et" | "et-"* ) url="et-ee_${c10}.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${c10}.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${c10}.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${c10}.iso" ;; + "he" | "he-"* ) url="he-il_${c10}.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${c10}.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${c10}.iso" ;; + "it" | "it-"* ) url="it-it_${c10}.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${c10}.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${c10}.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${c10}.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${c10}.iso" ;; + "nb" | "nb-"* ) url="nb-no_${c10}.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${c10}.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${c10}.iso" ;; + "br" | "pt-br" ) url="pt-br_${c10}.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${c10}.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${c10}.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${c10}.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${c10}.iso" ;; + "sl" | "sl-"* ) url="sl-si_${c10}.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${c10}.iso" ;; + "sv" | "sv-"* ) url="sv-se_${c10}.iso" ;; + "th" | "th-"* ) url="th-th_${c10}.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${c10}.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${c10}.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${c10}.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${c10}.iso" ;; + esac + ;; + "win10x64-enterprise" | "win10x64-enterprise-eval" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_${b10}_72d26609.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b10}_916cba75.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b10}_737b3dce.iso" ;; + "da" | "da-"* ) url="da-dk_${b10}_beb2874a.iso" ;; + "de" | "de-"* ) url="de-de_${b10}_e5656293.iso" ;; + "el" | "el-"* ) url="el-gr_${b10}_3dcced88.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b10}_4b87ccc8.iso" ;; + "en" | "en-"* ) + size=6985318400 + sum="cd224fff371bbce4ab2120a3ace8ed30dc5c48c87f766ff699eed3327d0db83e" + url="en-us_${b10}_66a185c7.iso" ;; + "mx" | "es-mx" ) url="es-mx_${b10}_c71c3a9b.iso" ;; + "es" | "es-"* ) url="es-es_${b10}_6a893bdb.iso" ;; + "et" | "et-"* ) url="et-ee_${b10}_e73ca294.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b10}_b4138a1f.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b10}_fa1fcfd1.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b10}_2582115c.iso" ;; + "he" | "he-"* ) url="he-il_${b10}_070da6e1.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b10}_7ab0b83d.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b10}_9ae1341c.iso" ;; + "it" | "it-"* ) url="it-it_${b10}_ed9771c1.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b10}_41fb6974.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b10}_8ee84458.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b10}_dde00c8b.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b10}_3c6ec670.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b10}_5c0830a7.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b10}_98c1911c.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b10}_21470c6f.iso" ;; + "br" | "pt-br" ) url="pt-br_${b10}_a8287ba4.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b10}_927e183d.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b10}_05768a51.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b10}_e0d31c6c.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b10}_a09d6210.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b10}_b6e9be37.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b10}_d3114222.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b10}_4fbbd5fa.iso" ;; + "th" | "th-"* ) url="th-th_${b10}_c820f914.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b10}_62d51ca5.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b10}_3d50cf88.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_2fab2287.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b10}_52bd0537.iso" ;; + esac + ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_10_enterprise_ltsc_2021_x64_dvd_60bc2a7a.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_10_enterprise_ltsc_2021_x64_dvd_b0887275.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_10_enterprise_ltsc_2021_x64_dvd_d624c653.iso" ;; - "da" | "da-"* ) url="da-dk_windows_10_enterprise_ltsc_2021_x64_dvd_6ec511bb.iso" ;; - "de" | "de-"* ) url="de-de_windows_10_enterprise_ltsc_2021_x64_dvd_71796d33.iso" ;; - "el" | "el-"* ) url="el-gr_windows_10_enterprise_ltsc_2021_x64_dvd_c83eab34.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_10_enterprise_ltsc_2021_x64_dvd_7fe51fe8.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${l10}_60bc2a7a.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${l10}_b0887275.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${l10}_d624c653.iso" ;; + "da" | "da-"* ) url="da-dk_${l10}_6ec511bb.iso" ;; + "de" | "de-"* ) url="de-de_${l10}_71796d33.iso" ;; + "el" | "el-"* ) url="el-gr_${l10}_c83eab34.iso" ;; + "gb" | "en-gb" ) url="en-gb_${l10}_7fe51fe8.iso" ;; "en" | "en-"* ) size=4899461120 sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" - url="en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_10_enterprise_ltsc_2021_x64_dvd_f6aaf384.iso" ;; - "es" | "es-"* ) url="es-es_windows_10_enterprise_ltsc_2021_x64_dvd_51d721ea.iso" ;; - "et" | "et-"* ) url="et-ee_windows_10_enterprise_ltsc_2021_x64_dvd_012a5c50.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_10_enterprise_ltsc_2021_x64_dvd_551582d9.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_10_enterprise_ltsc_2021_x64_dvd_2770e649.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_10_enterprise_ltsc_2021_x64_dvd_bda01eb0.iso" ;; - "he" | "he-"* ) url="he-il_windows_10_enterprise_ltsc_2021_x64_dvd_3a55ecd6.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_10_enterprise_ltsc_2021_x64_dvd_f5085b75.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_10_enterprise_ltsc_2021_x64_dvd_d541ddb3.iso" ;; - "it" | "it-"* ) url="it-it_windows_10_enterprise_ltsc_2021_x64_dvd_0c1aa034.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_10_enterprise_ltsc_2021_x64_dvd_ef58c6a1.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_10_enterprise_ltsc_2021_x64_dvd_6d26f398.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_10_enterprise_ltsc_2021_x64_dvd_9ffbbd5b.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_10_enterprise_ltsc_2021_x64_dvd_6c89d2e0.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_10_enterprise_ltsc_2021_x64_dvd_c65c51a5.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_10_enterprise_ltsc_2021_x64_dvd_88f53466.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_10_enterprise_ltsc_2021_x64_dvd_eff40776.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_10_enterprise_ltsc_2021_x64_dvd_f318268e.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_10_enterprise_ltsc_2021_x64_dvd_f2e9b6a0.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_10_enterprise_ltsc_2021_x64_dvd_ae2284d6.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_10_enterprise_ltsc_2021_x64_dvd_5044a1e7.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_10_enterprise_ltsc_2021_x64_dvd_d6c64c5f.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_10_enterprise_ltsc_2021_x64_dvd_ec090386.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_10_enterprise_ltsc_2021_x64_dvd_2d2f8815.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_10_enterprise_ltsc_2021_x64_dvd_9a28bb6b.iso" ;; - "th" | "th-"* ) url="th-th_windows_10_enterprise_ltsc_2021_x64_dvd_b7ed34d6.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_10_enterprise_ltsc_2021_x64_dvd_e55b1896.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_10_enterprise_ltsc_2021_x64_dvd_816da3c3.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_10_enterprise_ltsc_2021_x64_dvd_80dba877.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_10_enterprise_ltsc_2021_x64_dvd_033b7312.iso" ;; + url="en-us_${l10}_d289cf96.iso" ;; + "mx" | "es-mx" ) url="es-mx_${l10}_f6aaf384.iso" ;; + "es" | "es-"* ) url="es-es_${l10}_51d721ea.iso" ;; + "et" | "et-"* ) url="et-ee_${l10}_012a5c50.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${l10}_551582d9.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${l10}_2770e649.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${l10}_bda01eb0.iso" ;; + "he" | "he-"* ) url="he-il_${l10}_3a55ecd6.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${l10}_f5085b75.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${l10}_d541ddb3.iso" ;; + "it" | "it-"* ) url="it-it_${l10}_0c1aa034.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${l10}_ef58c6a1.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${l10}_6d26f398.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${l10}_9ffbbd5b.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${l10}_6c89d2e0.iso" ;; + "nb" | "nb-"* ) url="nb-no_${l10}_c65c51a5.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${l10}_88f53466.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${l10}_eff40776.iso" ;; + "br" | "pt-br" ) url="pt-br_${l10}_f318268e.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${l10}_f2e9b6a0.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${l10}_ae2284d6.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${l10}_5044a1e7.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${l10}_d6c64c5f.iso" ;; + "sl" | "sl-"* ) url="sl-si_${l10}_ec090386.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${l10}_2d2f8815.iso" ;; + "sv" | "sv-"* ) url="sv-se_${l10}_9a28bb6b.iso" ;; + "th" | "th-"* ) url="th-th_${l10}_b7ed34d6.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${l10}_e55b1896.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${l10}_816da3c3.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${l10}_80dba877.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${l10}_033b7312.iso" ;; esac ;; "win10x64-iot" | "win10x64-enterprise-iot-eval" ) @@ -1065,96 +1258,198 @@ getLink3() { ;; "win81x64-enterprise" | "win81x64-enterprise-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_8.1_enterprise_with_update_x64_dvd_6050360.iso" ;; - "bg" | "bg-"* ) url="bg_windows_8.1_enterprise_with_update_x64_dvd_6050367.iso" ;; - "cs" | "cs-"* ) url="cs_windows_8.1_enterprise_with_update_x64_dvd_6050393.iso" ;; - "da" | "da-"* ) url="da_windows_8.1_enterprise_with_update_x64_dvd_6050394.iso" ;; - "de" | "de-"* ) url="de_windows_8.1_enterprise_with_update_x64_dvd_6050501.iso" ;; - "el" | "el-"* ) url="el_windows_8.1_enterprise_with_update_x64_dvd_6050503.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_8.1_enterprise_with_update_x64_dvd_6054383.iso" ;; + "ar" | "ar-"* ) url="ar_${w81}_6050360.iso" ;; + "bg" | "bg-"* ) url="bg_${w81}_6050367.iso" ;; + "cs" | "cs-"* ) url="cs_${w81}_6050393.iso" ;; + "da" | "da-"* ) url="da_${w81}_6050394.iso" ;; + "de" | "de-"* ) url="de_${w81}_6050501.iso" ;; + "el" | "el-"* ) url="el_${w81}_6050503.iso" ;; + "gb" | "en-gb" ) url="en-gb_${w81}_6054383.iso" ;; "en" | "en-"* ) size=4139163648 sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" - url="en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso" ;; - "es" | "es-"* ) url="es_windows_8.1_enterprise_with_update_x64_dvd_6050578.iso" ;; - "et" | "et-"* ) url="et_windows_8.1_enterprise_with_update_x64_dvd_6054384.iso" ;; - "fi" | "fi-"* ) url="fi_windows_8.1_enterprise_with_update_x64_dvd_6050497.iso" ;; - "fr" | "fr-"* ) url="fr_windows_8.1_enterprise_with_update_x64_dvd_6050499.iso" ;; - "he" | "he-"* ) url="he_windows_8.1_enterprise_with_update_x64_dvd_6050504.iso" ;; - "hr" | "hr-"* ) url="hr_windows_8.1_enterprise_with_update_x64_dvd_6050391.iso" ;; - "hu" | "hu-"* ) url="hu_windows_8.1_enterprise_with_update_x64_dvd_6050505.iso" ;; - "it" | "it-"* ) url="it_windows_8.1_enterprise_with_update_x64_dvd_6050507.iso" ;; - "ja" | "ja-"* ) url="ja_windows_8.1_enterprise_with_update_x64_dvd_6050508.iso" ;; - "ko" | "ko-"* ) url="ko_windows_8.1_enterprise_with_update_x64_dvd_6050509.iso" ;; - "lt" | "lt-"* ) url="lt_windows_8.1_enterprise_with_update_x64_dvd_6050511.iso" ;; - "lv" | "lv-"* ) url="lv_windows_8.1_enterprise_with_update_x64_dvd_6050510.iso" ;; - "nb" | "nb-"* ) url="nb_windows_8.1_enterprise_with_update_x64_dvd_6050512.iso" ;; - "nl" | "nl-"* ) url="nl_windows_8.1_enterprise_with_update_x64_dvd_6054381.iso" ;; - "pl" | "pl-"* ) url="pl_windows_8.1_enterprise_with_update_x64_dvd_6050515.iso" ;; - "br" | "pt-br" ) url="pt_windows_8.1_enterprise_with_update_x64_dvd_6050521.iso" ;; - "pt" | "pt-"* ) url="pp_windows_8.1_enterprise_with_update_x64_dvd_6050526.iso" ;; - "ro" | "ro-"* ) url="ro_windows_8.1_enterprise_with_update_x64_dvd_6050534.iso" ;; - "ru" | "ru-"* ) url="ru_windows_8.1_enterprise_with_update_x64_dvd_6050542.iso" ;; - "sk" | "sk-"* ) url="sk_windows_8.1_enterprise_with_update_x64_dvd_6050562.iso" ;; - "sl" | "sl-"* ) url="sl_windows_8.1_enterprise_with_update_x64_dvd_6050570.iso" ;; - "sr" | "sr-"* ) url="sr-latn_windows_8.1_enterprise_with_update_x64_dvd_6050553.iso" ;; - "sv" | "sv-"* ) url="sv_windows_8.1_enterprise_with_update_x64_dvd_6050590.iso" ;; - "th" | "th-"* ) url="th_windows_8.1_enterprise_with_update_x64_dvd_6050602.iso" ;; - "tr" | "tr-"* ) url="tr_windows_8.1_enterprise_with_update_x64_dvd_6050609.iso" ;; - "uk" | "uk-"* ) url="uk_windows_8.1_enterprise_with_update_x64_dvd_6050618.iso" ;; - "zh-hk" ) url="hk_windows_8.1_enterprise_with_update_x64_dvd_6050380.iso" ;; - "zh-tw" ) url="tw_windows_8.1_enterprise_with_update_x64_dvd_6050387.iso" ;; - "zh" | "zh-"* ) url="cn_windows_8.1_enterprise_with_update_x64_dvd_6050374.iso" ;; + url="en_${w81}_6054382.iso" ;; + "es" | "es-"* ) url="es_${w81}_6050578.iso" ;; + "et" | "et-"* ) url="et_${w81}_6054384.iso" ;; + "fi" | "fi-"* ) url="fi_${w81}_6050497.iso" ;; + "fr" | "fr-"* ) url="fr_${w81}_6050499.iso" ;; + "he" | "he-"* ) url="he_${w81}_6050504.iso" ;; + "hr" | "hr-"* ) url="hr_${w81}_6050391.iso" ;; + "hu" | "hu-"* ) url="hu_${w81}_6050505.iso" ;; + "it" | "it-"* ) url="it_${w81}_6050507.iso" ;; + "ja" | "ja-"* ) url="ja_${w81}_6050508.iso" ;; + "ko" | "ko-"* ) url="ko_${w81}_6050509.iso" ;; + "lt" | "lt-"* ) url="lt_${w81}_6050511.iso" ;; + "lv" | "lv-"* ) url="lv_${w81}_6050510.iso" ;; + "nb" | "nb-"* ) url="nb_${w81}_6050512.iso" ;; + "nl" | "nl-"* ) url="nl_${w81}_6054381.iso" ;; + "pl" | "pl-"* ) url="pl_${w81}_6050515.iso" ;; + "br" | "pt-br" ) url="pt_${w81}_6050521.iso" ;; + "pt" | "pt-"* ) url="pp_${w81}_6050526.iso" ;; + "ro" | "ro-"* ) url="ro_${w81}_6050534.iso" ;; + "ru" | "ru-"* ) url="ru_${w81}_6050542.iso" ;; + "sk" | "sk-"* ) url="sk_${w81}_6050562.iso" ;; + "sl" | "sl-"* ) url="sl_${w81}_6050570.iso" ;; + "sr" | "sr-"* ) url="sr-latn_${w81}_6050553.iso" ;; + "sv" | "sv-"* ) url="sv_${w81}_6050590.iso" ;; + "th" | "th-"* ) url="th_${w81}_6050602.iso" ;; + "tr" | "tr-"* ) url="tr_${w81}_6050609.iso" ;; + "uk" | "uk-"* ) url="uk_${w81}_6050618.iso" ;; + "zh-hk" ) url="hk_${w81}_6050380.iso" ;; + "zh-tw" ) url="tw_${w81}_6050387.iso" ;; + "zh" | "zh-"* ) url="cn_${w81}_6050374.iso" ;; esac ;; "win2025" | "win2025-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_windows_server_2025_preview_x64_dvd_8b1f5b49.iso" ;; - "de" | "de-"* ) url="de-de_windows_server_2025_preview_x64_dvd_1c3dfe1c.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${w25}_4f54e1b0.iso" ;; + "de" | "de-"* ) url="de-de_${w25}_5282a882.iso" ;; "en" | "en-"* ) - size=5307176960 - sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3" - url="en-us_windows_server_2025_preview_x64_dvd_ce9eb1a5.iso" ;; - "es" | "es-"* ) url="es-es_windows_server_2025_preview_x64_dvd_b07cc858.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_server_2025_preview_x64_dvd_036e8a78.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_server_2025_preview_x64_dvd_2d5d77e5.iso" ;; - "it" | "it-"* ) url="it-it_windows_server_2025_preview_x64_dvd_eaccac73.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_server_2025_preview_x64_dvd_62f802be.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_server_2025_preview_x64_dvd_e2c3e8f0.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_server_2025_preview_x64_dvd_314b4ed1.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_server_2025_preview_x64_dvd_be4b099e.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_server_2025_preview_x64_dvd_993c803a.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_server_2025_preview_x64_dvd_869aa534.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_server_2025_preview_x64_dvd_5ada1817.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_server_2025_preview_x64_dvd_5fafd4f7.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_server_2025_preview_x64_dvd_3aab7fda.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2025_preview_x64_dvd_9b147dcd.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_server_2025_preview_x64_dvd_a12bb0bf.iso" ;; + size=6013794304 + sum="854109e1f215a29fc3541188297a6ca97c8a8f0f8c4dd6236b78dfdf845bf75e" + url="en-us_${w25}_b7ec10f3.iso" ;; + "es" | "es-"* ) url="es-es_${w25}_c15f0ce2.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${w25}_bd6be507.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${w25}_e13eb8bf.iso" ;; + "it" | "it-"* ) url="it-it_${w25}_98437899.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${w25}_7a2e979b.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${w25}_85109737.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${w25}_5c3218f3.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${w25}_aa368cf8.iso" ;; + "br" | "pt-br" ) url="pt-br_${w25}_66107129.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${w25}_62bb3c31.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${w25}_2dfe1679.iso" ;; + "sv" | "sv-"* ) url="sv-se_${w25}_512bf117.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${w25}_a03fe256.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${w25}_6d2c01e3.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${w25}_1d93dd12.iso" ;; + esac + ;; + "win2022" | "win2022-eval" ) + case "${culture,,}" in + "cs" | "cs-"* ) url="cs-cz_${w22}.iso" ;; + "de" | "de-"* ) url="de-de_${w22}.iso" ;; + "en" | "en-"* ) + size=5973856256 + sum="61fa400b6e8f54e644529d024b18a578547147cdf815ea66c4b7961798717291" + url="en-us_${w22}.iso" ;; + "es" | "es-"* ) url="es-es_${w22}.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${w22}.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${w22}.iso" ;; + "it" | "it-"* ) url="it-it_${w22}.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${w22}.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${w22}.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${w22}.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${w22}.iso" ;; + "br" | "pt-br" ) url="pt-br_${w22}.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${w22}.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${w22}.iso" ;; + "sv" | "sv-"* ) url="sv-se_${w22}.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${w22}.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${w22}.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${w22}.iso" ;; esac ;; "win2019" | "win2019-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_windows_server_2019_x64_dvd_3781c31c.iso" ;; - "de" | "de-"* ) url="de-de_windows_server_2019_x64_dvd_132f7aa4.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${w19}_3781c31c.iso" ;; + "de" | "de-"* ) url="de-de_${w19}_132f7aa4.iso" ;; "en" | "en-"* ) size=5651695616 sum="ea247e5cf4df3e5829bfaaf45d899933a2a67b1c700a02ee8141287a8520261c" - url="en-us_windows_server_2019_x64_dvd_f9475476.iso" ;; - "es" | "es-"* ) url="es-es_windows_server_2019_x64_dvd_3ce0fd9e.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_server_2019_x64_dvd_f6f6acf6.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_server_2019_x64_dvd_1d834c46.iso" ;; - "it" | "it-"* ) url="it-it_windows_server_2019_x64_dvd_454267de.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_server_2019_x64_dvd_3899c3a3.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_server_2019_x64_dvd_84101c0a.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_server_2019_x64_dvd_f69d914e.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_server_2019_x64_dvd_a50263e1.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_server_2019_x64_dvd_aee8c1c2.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_server_2019_x64_dvd_464373e8.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_server_2019_x64_dvd_e02b76ba.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_server_2019_x64_dvd_48c1aeff.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_server_2019_x64_dvd_b51af600.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2019_x64_dvd_a4c80409.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_server_2019_x64_dvd_19d65722.iso" ;; + url="en-us_${w19}_f9475476.iso" ;; + "es" | "es-"* ) url="es-es_${w19}_3ce0fd9e.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${w19}_f6f6acf6.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${w19}_1d834c46.iso" ;; + "it" | "it-"* ) url="it-it_${w19}_454267de.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${w19}_3899c3a3.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${w19}_84101c0a.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${w19}_f69d914e.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${w19}_a50263e1.iso" ;; + "br" | "pt-br" ) url="pt-br_${w19}_aee8c1c2.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${w19}_464373e8.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${w19}_e02b76ba.iso" ;; + "sv" | "sv-"* ) url="sv-se_${w19}_48c1aeff.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${w19}_b51af600.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${w19}_a4c80409.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${w19}_19d65722.iso" ;; + esac + ;; + "win2016" | "win2016-eval" ) + case "${culture,,}" in + "cs" | "cs-"* ) url="cs_${w16}_11636699.iso" ;; + "de" | "de-"* ) url="de_${w16}_11636696.iso" ;; + "en" | "en-"* ) + size=6003804160 + sum="47919ce8b4993f531ca1fa3f85941f4a72b47ebaa4d3a321fecf83ca9d17e6b8" + url="en_${w16}_11636701.iso" ;; + "es" | "es-"* ) url="es_${w16}_11636712.iso" ;; + "fr" | "fr-"* ) url="fr_${w16}_11636729.iso" ;; + "hu" | "hu-"* ) url="hu_${w16}_11636720.iso" ;; + "it" | "it-"* ) url="it_${w16}_11636710.iso" ;; + "ja" | "ja-"* ) url="ja_${w16}_11645964.iso" ;; + "ko" | "ko-"* ) url="ko_${w16}_11636709.iso" ;; + "nl" | "nl-"* ) url="nl_${w16}_11636731.iso" ;; + "pl" | "pl-"* ) url="pl_${w16}_11636719.iso" ;; + "br" | "pt-br" ) url="pt_${w16}_11636697.iso" ;; + "pt" | "pt-"* ) url="pp_${w16}_11637454.iso" ;; + "ru" | "ru-"* ) url="ru_${w16}_11636694.iso" ;; + "sv" | "sv-"* ) url="sv_${w16}_11636706.iso" ;; + "tr" | "tr-"* ) url="tr_${w16}_11636725.iso" ;; + "zh-hk" | "zh-tw" ) url="ct_${w16}_11636717.iso" ;; + "zh" | "zh-"* ) url="cn_${w16}_11636695.iso" ;; + esac + ;; + "win2012r2" | "win2012r2-eval" ) + case "${culture,,}" in + "cs" | "cs-"* ) url="cs_${w12}_6052752.iso" ;; + "de" | "de-"* ) url="de_${w12}_6052780.iso" ;; + "en" | "en-"* ) + size=5400115200 + sum="0e883ce28eb5c6f58a3a3007be978d43edb1035a4585506c1c4504c9e143408d" + url="en_${w12}_6052766.iso" ;; + "es" | "es-"* ) url="es_${w12}_6052831.iso" ;; + "fr" | "fr-"* ) url="fr_${w12}_6052772.iso" ;; + "hu" | "hu-"* ) url="hu_${w12}_6052786.iso" ;; + "it" | "it-"* ) url="it_${w12}_6052792.iso" ;; + "ja" | "ja-"* ) url="ja_${w12}_6052800.iso" ;; + "ko" | "ko-"* ) url="ko_${w12}_6052806.iso" ;; + "nl" | "nl-"* ) url="nl_${w12}_6052760.iso" ;; + "pl" | "pl-"* ) url="pl_${w12}_6052815.iso" ;; + "br" | "pt-br" ) url="pt_${w12}_6052819.iso" ;; + "pt" | "pt-"* ) url="pp_${w12}_6052823.iso" ;; + "ru" | "ru-"* ) url="ru_${w12}_6052827.iso" ;; + "sv" | "sv-"* ) url="sv_${w12}_6052835.iso" ;; + "tr" | "tr-"* ) url="tr_${w12}_6052838.iso" ;; + "zh-hk" ) url="hk_${w12}_6052739.iso" ;; + "zh-tw" ) url="tw_${w12}_6052746.iso" ;; + "zh" | "zh-"* ) url="cn_${w12}_6052729.iso" ;; + esac + ;; + "win2008r2" | "win2008r2-eval" ) + case "${culture,,}" in + "cs" | "cs-"* ) url="cs_${w08}_617402.iso" ;; + "de" | "de-"* ) url="de_${w08}_617404.iso" ;; + "en" | "en-"* ) + size=3166720000 + sum="9b0cd5b11cc2e92badb74450f0cac03006d3c63a2ada36cb1eb95c1bf4b2608f" + url="en_${w08}_617403.iso" ;; + "es" | "es-"* ) url="es_${w08}_617410.iso" ;; + "fr" | "fr-"* ) url="fr_${w08}_617392.iso" ;; + "hu" | "hu-"* ) url="hu_${w08}_617415.iso" ;; + "it" | "it-"* ) url="it_${w08}_619596.iso" ;; + "ja" | "ja-"* ) url="ja_${w08}_631466.iso" ;; + "ko" | "ko-"* ) url="ko_${w08}_617409.iso" ;; + "nl" | "nl-"* ) url="nl_${w08}_617395.iso" ;; + "pl" | "pl-"* ) url="pl_${w08}_617397.iso" ;; + "br" | "pt-br" ) url="pt_${w08}_617394.iso" ;; + "pt" | "pt-"* ) url="pp_${w08}_617411.iso" ;; + "ru" | "ru-"* ) url="ru_${w08}_617421.iso" ;; + "sv" | "sv-"* ) url="sv_${w08}_617400.iso" ;; + "tr" | "tr-"* ) url="tr_${w08}_617416.iso" ;; + "zh-hk" ) url="hk_${w08}_617386.iso" ;; + "zh-tw" ) url="tw_${w08}_617405.iso" ;; + "zh" | "zh-"* ) url="cn_${w08}_617396.iso" ;; esac ;; "win7x64" | "win7x64-enterprise" ) diff --git a/src/mido.sh b/src/mido.sh index ef8015e..be7884f 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -305,7 +305,7 @@ getWindows() { language=$(getLanguage "$lang" "desc") edition=$(printEdition "$version" "$desc") - local msg="Requesting $desc from Microsoft server..." + local msg="Requesting $desc from the Microsoft servers..." info "$msg" && html "$msg" case "${version,,}" in @@ -610,13 +610,18 @@ downloadImage() { local iso="$1" local version="$2" local lang="$3" + local delay=5 local tried="n" + local success="n" local url sum size base desc language + local msg="Will retry after $delay seconds..." if [[ "${version,,}" == "http"* ]]; then base=$(basename "$iso") desc=$(fromFile "$base") downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 + info "$msg" && html "$msg" && sleep "$delay" + downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 rm -f "$iso" return 1 fi @@ -637,11 +642,23 @@ downloadImage() { fi if isMido "$version" "$lang"; then + tried="y" + success="n" + if getWindows "$version" "$lang" "$desc"; then + success="y" + else + info "$msg" && html "$msg" && sleep "$delay" + getWindows "$version" "$lang" "$desc" && success="y" + fi + + if [[ "$success" == "y" ]]; then size=$(getMido "$version" "$lang" "size" ) sum=$(getMido "$version" "$lang" "sum") downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 + info "$msg" && html "$msg" && sleep "$delay" + downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 rm -f "$iso" fi fi @@ -655,10 +672,20 @@ downloadImage() { fi tried="y" + success="n" if getESD "$TMP/esd" "$version" "$lang" "$desc"; then + success="y" + else + info "$msg" && html "$msg" && sleep "$delay" + getESD "$TMP/esd" "$version" "$lang" "$desc" && success="y" + fi + + if [[ "$success" == "y" ]]; then ISO="${ISO%.*}.esd" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 + info "$msg" && html "$msg" && sleep "$delay" + downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 rm -f "$ISO" ISO="$iso" fi @@ -677,6 +704,8 @@ downloadImage() { size=$(getSize "$i" "$version" "$lang") sum=$(getHash "$i" "$version" "$lang") downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 + info "$msg" && html "$msg" && sleep "$delay" + downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 rm -f "$iso" fi From bb0a0b47b8b7e7c3e36b5bce6cceede52be0b4f8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:17:51 +0100 Subject: [PATCH 300/505] build: Use same version number for ARM64 build (#873) --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index e5abb6f..a36dbd2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,6 +32,10 @@ ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.p ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz FROM dockurr/windows-arm:2.22 AS build-arm64 + +ARG VERSION_ARG="0.0" +RUN echo "$VERSION_ARG" > /run/version + FROM build-${TARGETARCH} EXPOSE 8006 3389 From d7fcf9a5da70f50eb633fb3b360dff8fd1941fc3 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:34:03 +0100 Subject: [PATCH 301/505] build: Use same version number for ARM64 build (#874) --- Dockerfile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index a36dbd2..7e9e776 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,6 @@ FROM scratch AS build-amd64 COPY --from=qemux/qemu-docker:6.06 / / -ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" ARG DEBCONF_NONINTERACTIVE_SEEN="true" @@ -22,7 +21,6 @@ RUN set -eu && \ libxml2-utils \ libarchive-tools && \ apt-get clean && \ - echo "$VERSION_ARG" > /run/version && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY --chmod=755 ./src /run/ @@ -32,12 +30,11 @@ ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.p ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz FROM dockurr/windows-arm:2.22 AS build-arm64 +FROM build-${TARGETARCH} ARG VERSION_ARG="0.0" RUN echo "$VERSION_ARG" > /run/version -FROM build-${TARGETARCH} - EXPOSE 8006 3389 VOLUME /storage From da8bbdcb4747ef88258833d76b07b5f5d98d5fdc Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:51:43 +0100 Subject: [PATCH 302/505] build: Synchronize versions between platforms (#876) --- Dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7e9e776..801a2ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,5 @@ +ARG VERSION_ARG="4.00" + FROM scratch AS build-amd64 COPY --from=qemux/qemu-docker:6.06 / / @@ -29,10 +31,10 @@ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz -FROM dockurr/windows-arm:2.22 AS build-arm64 +FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} -ARG VERSION_ARG="0.0" +ARG VERSION_ARG="4.00" RUN echo "$VERSION_ARG" > /run/version EXPOSE 8006 3389 From 3aa2f6e128c64797f0f611e20544791251af79c5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 13 Nov 2024 01:12:10 +0100 Subject: [PATCH 303/505] build: Update qemu-docker to v6.07 (#882) --- Dockerfile | 4 ++-- readme.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 801a2ee..f7252ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="4.00" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.06 / / +COPY --from=qemux/qemu-docker:6.07 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" @@ -37,8 +37,8 @@ FROM build-${TARGETARCH} ARG VERSION_ARG="4.00" RUN echo "$VERSION_ARG" > /run/version -EXPOSE 8006 3389 VOLUME /storage +EXPOSE 8006 3389 ENV VERSION="11" ENV RAM_SIZE="4G" diff --git a/readme.md b/readme.md index 4ad3c42..4d7b8db 100644 --- a/readme.md +++ b/readme.md @@ -361,7 +361,7 @@ kubectl apply -f kubernetes.yml - you are not using "Docker Desktop for Linux" as it does not support KVM, instead make use of Docker Engine directly. - - it could help to add `privileged: true` to your compose file (or `sudo` to your `run` command), to rule out any permission issue. + - it could help to add `privileged: true` to your compose file (or `sudo` to your `docker run` command), to rule out any permission issue. ### How do I run macOS in a container? From 658c84c55f1dc08367d83ac5407abf13e55212db Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 13 Nov 2024 03:24:11 +0100 Subject: [PATCH 304/505] docs: Add compatibility chart (#883) --- readme.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/readme.md b/readme.md index 4d7b8db..29e1bdd 100644 --- a/readme.md +++ b/readme.md @@ -58,6 +58,16 @@ Via Kubernetes: kubectl apply -f kubernetes.yml ``` +## Compatibility ⚙️ + +| **Product** | **Platform** | | +|---|---|---| +| Docker Engine | Linux| ✅ | +| Docker Desktop | Linux | ❌ | +| Docker Desktop | macOS | ❌ | +| Docker Desktop | Windows 11 | ✅ | +| Docker Desktop | Windows 10 | ❌ | + ## FAQ 💬 ### How do I use it? From 6919e36aee1e86c9e30f4977dfcf231cc824d668 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 13 Nov 2024 03:34:45 +0100 Subject: [PATCH 305/505] docs: Add Kubernetes URL (#885) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 29e1bdd..1a72923 100644 --- a/readme.md +++ b/readme.md @@ -55,7 +55,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Via Kubernetes: ```shell -kubectl apply -f kubernetes.yml +kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml ``` ## Compatibility ⚙️ From 66f595d84a1c891daa4d262cd5a19ac2b4713d85 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 13 Nov 2024 04:37:27 +0100 Subject: [PATCH 306/505] fix: Disable HTTP keepalives (#887) --- src/mido.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index be7884f..d739553 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -457,7 +457,7 @@ getESD() { local eFile="esd_edition.xml" local fFile="products_filter.xml" - { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30; rc=$?; } || : + { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30 --no-http-keep-alive; rc=$?; } || : msg="Failed to download $winCatalog" (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 @@ -583,7 +583,7 @@ downloadFile() { info "$msg..." /run/progress.sh "$iso" "$size" "$msg ([P])..." & - { wget "$url" -O "$iso" -q --timeout=30 --show-progress "$progress"; rc=$?; } || : + { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --show-progress "$progress"; rc=$?; } || : fKill "progress.sh" From 2c4094b0f799e26c49cadb43075b595b6708a146 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 15 Nov 2024 05:16:48 +0100 Subject: [PATCH 307/505] feat: Improved download method (#903) --- Dockerfile | 9 +++--- readme.md | 1 - src/define.sh | 33 +++++++++---------- src/install.sh | 8 ++--- src/mido.sh | 87 +++++++++++++++++++++++++------------------------- 5 files changed, 70 insertions(+), 68 deletions(-) diff --git a/Dockerfile b/Dockerfile index f7252ce..a610fbc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ -ARG VERSION_ARG="4.00" - +ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.07 / / + +COPY --from=qemux/qemu-docker:6.08 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" @@ -11,6 +11,7 @@ RUN set -eu && \ apt-get update && \ apt-get --no-install-recommends -y install \ bc \ + jq \ curl \ 7zip \ wsdd \ @@ -34,7 +35,7 @@ ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43- FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} -ARG VERSION_ARG="4.00" +ARG VERSION_ARG="0.00" RUN echo "$VERSION_ARG" > /run/version VOLUME /storage diff --git a/readme.md b/readme.md index 1a72923..ed9c719 100644 --- a/readme.md +++ b/readme.md @@ -103,7 +103,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | `10l` | Windows 10 LTSC | 4.6 GB | | `10e` | Windows 10 Enterprise | 5.2 GB | |||| - | `8` | Windows 8.1 Pro | 4.0 GB | | `8e` | Windows 8.1 Enterprise | 3.7 GB | | `7e` | Windows 7 Enterprise | 3.0 GB | | `ve` | Windows Vista Enterprise | 3.0 GB | diff --git a/src/define.sh b/src/define.sh index a2706e3..00fe997 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash set -Eeuo pipefail -: "${XRES:=""}" -: "${YRES:=""}" +: "${WIDTH:=""}" +: "${HEIGHT:=""}" : "${VERIFY:=""}" : "${REGION:=""}" : "${MANUAL:=""}" @@ -164,7 +164,7 @@ getLanguage() { desc="English" culture="en-GB" ;; "en" | "en-"* ) - lang="English (United States)" + lang="English" desc="English" culture="en-US" ;; "mx" | "es-mx" ) @@ -280,15 +280,15 @@ getLanguage() { desc="$lang" culture="uk-UA" ;; "hk" | "zh-hk" | "cn-hk" ) - lang="Chinese Traditional" + lang="Chinese (Traditional)" desc="Chinese HK" culture="zh-TW" ;; "tw" | "zh-tw" | "cn-tw" ) - lang="Chinese Traditional" + lang="Chinese (Traditional)" desc="Chinese TW" culture="zh-TW" ;; "zh" | "zh-"* | "cn" | "cn-"* ) - lang="Chinese Simplified" + lang="Chinese (Simplified)" desc="Chinese" culture="zh-CN" ;; esac @@ -671,10 +671,6 @@ getMido() { size=4898582528 sum="e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5" ;; - "win81x64" ) - size=4320526336 - sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" - ;; "win81x64-enterprise-eval" ) size=3961473024 sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" @@ -766,6 +762,11 @@ getLink1() { sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" url="8.x/8.1/en_windows_8.1_with_update_x64_dvd_6051480.iso" ;; + "win81x64-enterprise" | "win81x64-enterprise-eval" ) + size=4139163648 + sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" + url="8.x/8.1/en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso" + ;; "win2025" | "win2025-eval" ) size=5307176960 sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3" @@ -2122,11 +2123,11 @@ prepareInstall() { local install="$dir/\$OEM\$/\$1/OEM/install.bat" [ -f "$install" ] && oem="\"Script\"=\"cmd /C start \\\"Install\\\" \\\"cmd /C C:\\\\OEM\\\\install.bat\\\"\"" - [ -z "$YRES" ] && YRES="720" - [ -z "$XRES" ] && XRES="1280" + [ -z "$WIDTH" ] && WIDTH="1280" + [ -z "$HEIGHT" ] && HEIGHT="720" - XHEX=$(printf '%x\n' "$XRES") - YHEX=$(printf '%x\n' "$YRES") + XHEX=$(printf '%x\n' "$WIDTH") + YHEX=$(printf '%x\n' "$HEIGHT") local username="Docker" local password="*" @@ -2178,8 +2179,8 @@ prepareInstall() { echo "" echo "[Display]" echo " BitsPerPel=32" - echo " XResolution=$XRES" - echo " YResolution=$YRES" + echo " XResolution=$WIDTH" + echo " YResolution=$HEIGHT" echo "" echo "[Networking]" echo " InstallDefaultComponents=Yes" diff --git a/src/install.sh b/src/install.sh index b03f55a..e22b99e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -620,11 +620,11 @@ updateXML() { local language="$2" local culture region user admin pass keyboard - [ -z "$YRES" ] && YRES="720" - [ -z "$XRES" ] && XRES="1280" + [ -z "$HEIGHT" ] && HEIGHT="720" + [ -z "$WIDTH" ] && WIDTH="1280" - sed -i "s/<VerticalResolution>1080<\/VerticalResolution>/<VerticalResolution>$YRES<\/VerticalResolution>/g" "$asset" - sed -i "s/<HorizontalResolution>1920<\/HorizontalResolution>/<HorizontalResolution>$XRES<\/HorizontalResolution>/g" "$asset" + sed -i "s/<VerticalResolution>1080<\/VerticalResolution>/<VerticalResolution>$HEIGHT<\/VerticalResolution>/g" "$asset" + sed -i "s/<HorizontalResolution>1920<\/HorizontalResolution>/<HorizontalResolution>$WIDTH<\/HorizontalResolution>/g" "$asset" culture=$(getLanguage "$language" "culture") diff --git a/src/mido.sh b/src/mido.sh index d739553..776f716 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -63,31 +63,33 @@ download_windows() { local lang="$2" local desc="$3" local sku_id="" + local sku_url="" + local iso_url="" + local iso_json="" local language="" local session_id="" local user_agent="" + local download_type="" local windows_version="" local iso_download_link="" + local download_page_html="" local product_edition_id="" - local iso_download_link_html="" - local iso_download_page_html="" - local language_skuid_table_html="" - - case "${id,,}" in - "win11x64" ) windows_version="11" ;; - "win10x64" ) windows_version="10" ;; - "win81x64" ) windows_version="8" ;; - * ) error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;; - esac + local language_skuid_json="" + local profile="606624d44113" user_agent=$(get_agent) language=$(getLanguage "$lang" "name") - local url="https://www.microsoft.com/en-us/software-download/windows$windows_version" - case "$windows_version" in - 8 | 10) url+="ISO";; + case "${id,,}" in + "win11x64" ) windows_version="11" && download_type="1" ;; + "win10x64" ) windows_version="10" && download_type="1" ;; + "win11arm64" ) windows_version="11arm64" && download_type="2" ;; + * ) error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;; esac + local url="https://www.microsoft.com/en-us/software-download/windows$windows_version" + [[ "${id,,}" == "win10"* ]] && url+="ISO" + # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs session_id=$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random) @@ -96,44 +98,39 @@ download_windows() { # This is the *only* request we make that Fido doesn't. Fido manually maintains a list of all the Windows release/edition product edition IDs in its script (see: $WindowsVersions array). This is helpful for downloading older releases (e.g. Windows 10 1909, 21H1, etc.) but we always want to get the newest release which is why we get this value dynamically # Also, keeping a "$WindowsVersions" array like Fido does would be way too much of a maintenance burden # Remove "Accept" header that curl sends by default - [[ "$DEBUG" == [Yy1]* ]] && echo " - Parsing download page: ${url}" - iso_download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { + [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" + download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { handle_curl_error $? return $? } [[ "$DEBUG" == [Yy1]* ]] && echo -n "Getting Product edition ID: " - # tr: Filter for only numerics to prevent HTTP parameter injection - # head -c was recently added to POSIX: https://austingroupbugs.net/view.php?id=407 - product_edition_id=$(echo "$iso_download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16) + product_edition_id=$(echo "$download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16) [[ "$DEBUG" == [Yy1]* ]] && echo "$product_edition_id" + if [ -z "$product_edition_id" ]; then + error "Product edition ID not found!" + return 1 + fi + [[ "$DEBUG" == [Yy1]* ]] && echo "Permit Session ID: $session_id" # Permit Session ID - # "org_id" is always the same value curl --silent --max-time 30 --output /dev/null --user-agent "$user_agent" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://vlscppe.microsoft.com/tags?org_id=y6jn8c31&session_id=$session_id" || { # This should only happen if there's been some change to how this API works handle_curl_error $? return $? } - # Extract everything after the last slash - local url_segment_parameter="${url##*/}" - [[ "$DEBUG" == [Yy1]* ]] && echo -n "Getting language SKU ID: " - # Get language -> skuID association table - # SKU ID: This specifies the language of the ISO. We always use "English (United States)", however, the SKU for this changes with each Windows release - # We must make this request so our next one will be allowed - # --data "" is required otherwise no "Content-Length" header will be sent causing HTTP response "411 Length Required" - language_skuid_table_html=$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --header "Accept:" --max-filesize 10K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=a8f8f489-4c7f-463a-9ca6-5cff94d8d041&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=getskuinformationbyproductedition&sessionId=$session_id&productEditionId=$product_edition_id&sdVersion=2") || { + sku_url="https://www.microsoft.com/software-download-connector/api/getskuinformationbyproductedition?profile=$profile&ProductEditionId=$product_edition_id&SKU=undefined&friendlyFileName=undefined&Locale=en-US&sessionID=$session_id" + language_skuid_json=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "$sku_url") || { handle_curl_error $? return $? } - # tr: Filter for only alphanumerics or "-" to prevent HTTP parameter injection - sku_id=$(echo "$language_skuid_table_html" | grep -m 1 ">${language}<" | sed 's/&quot;//g' | cut -d ',' -f 1 | cut -d ':' -f 2 | tr -cd '[:alnum:]-' | head -c 16) + { sku_id=$(echo "$language_skuid_json" | jq --arg LANG "$language" -r '.Skus[] | select(.Language==$LANG).Id') 2>/dev/null; rc=$?; } || : - if [ -z "$sku_id" ]; then + if [ -z "$sku_id" ] || [[ "${sku_id,,}" == "null" ]] || (( rc != 0 )); then language=$(getLanguage "$lang" "desc") error "No download in the $language language available for $desc!" return 1 @@ -144,28 +141,31 @@ download_windows() { # Get ISO download link # If any request is going to be blocked by Microsoft it's always this last one (the previous requests always seem to succeed) - # --referer: Required by Microsoft servers to allow request - iso_download_link_html=$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=6e2a1789-ef16-4f27-a296-74ef7ef5d96b&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=GetProductDownloadLinksBySku&sessionId=$session_id&skuId=$sku_id&language=English&sdVersion=2") - if ! [ "$iso_download_link_html" ]; then + iso_url="https://www.microsoft.com/software-download-connector/api/GetProductDownloadLinksBySku?profile=$profile&ProductEditionId=undefined&SKU=$sku_id&friendlyFileName=undefined&Locale=en-US&sessionID=$session_id" + iso_json=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_url") + + if ! [ "$iso_json" ]; then # This should only happen if there's been some change to how this API works error "Microsoft servers gave us an empty response to our request for an automated download." return 1 fi - if echo "$iso_download_link_html" | grep -q "We are unable to complete your request at this time."; then + if echo "$iso_json" | grep -q "Sentinel marked this request as rejected."; then error "Microsoft blocked the automated download request based on your IP address." return 1 fi - # Filter for 64-bit ISO download URL - # sed: HTML decode "&" character - # tr: Filter for only alphanumerics or punctuation - iso_download_link=$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]') + if echo "$iso_json" | grep -q "We are unable to complete your request at this time."; then + error "Microsoft blocked the automated download request based on your IP address." + return 1 + fi - if ! [ "$iso_download_link" ]; then - # This should only happen if there's been some change to the download endpoint web address + { iso_download_link=$(echo "$iso_json" | jq --argjson TYPE "$download_type" -r '.ProductDownloadOptions[] | select(.DownloadType==$TYPE).Uri') 2>/dev/null; rc=$?; } || : + + if [ -z "$iso_download_link" ] || [[ "${iso_download_link,,}" == "null" ]] || (( rc != 0 )); then error "Microsoft servers gave us no download link to our request for an automated download!" + info "Response: $iso_json" return 1 fi @@ -283,8 +283,8 @@ download_windows_eval() { [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" # Follow redirect so proceeding log message is useful - # This is a request we make this Fido doesn't - # We don't need to set "--max-filesize" here because this is a HEAD request and the output is to /dev/null anyway + # This is a request we make that Fido doesn't + iso_download_link=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link") || { # This should only happen if the Microsoft servers are down handle_curl_error $? @@ -317,6 +317,7 @@ getWindows() { esac case "${version,,}" in + "win11${PLATFORM,,}" ) ;; "win11${PLATFORM,,}-enterprise-iot"* ) ;; "win11${PLATFORM,,}-enterprise-ltsc"* ) ;; * ) @@ -327,7 +328,7 @@ getWindows() { esac case "${version,,}" in - "win81${PLATFORM,,}" | "win10${PLATFORM,,}" | "win11${PLATFORM,,}" ) + "win10${PLATFORM,,}" | "win11${PLATFORM,,}" ) download_windows "$version" "$lang" "$edition" && return 0 ;; "win11${PLATFORM,,}-enterprise"* | "win10${PLATFORM,,}-enterprise"* ) From a5b4d7760d21036dda7d92c96e83e8c7257f3db6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:27:15 +0100 Subject: [PATCH 308/505] docs: Readme (#920) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index ed9c719..f8f8b95 100644 --- a/readme.md +++ b/readme.md @@ -84,7 +84,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I select the Windows version? - By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to be downloaded: + By default, Windows 11 Pro will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to be downloaded: ```yaml environment: From b84a2b60a9e1737f8b8183df996440f649451493 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 24 Nov 2024 22:00:24 +0100 Subject: [PATCH 309/505] feat: Additional download mirrors (#923) --- Dockerfile | 2 +- src/define.sh | 995 +++++--------------------------------------------- src/mido.sh | 261 ++++++++++++- 3 files changed, 347 insertions(+), 911 deletions(-) diff --git a/Dockerfile b/Dockerfile index a610fbc..80619ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.08 / / +COPY --from=qemux/qemu-docker:6.09 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/define.sh b/src/define.sh index 00fe997..ef93d41 100644 --- a/src/define.sh +++ b/src/define.sh @@ -14,7 +14,7 @@ set -Eeuo pipefail : "${USERNAME:=""}" : "${PASSWORD:=""}" -MIRRORS=4 +MIRRORS=3 PLATFORM="x64" parseVersion() { @@ -132,162 +132,202 @@ getLanguage() { local ret="$2" local lang="" local desc="" + local short="" local culture="" case "${id,,}" in "ar" | "ar-"* ) + short="ar" lang="Arabic" desc="$lang" culture="ar-SA" ;; "bg" | "bg-"* ) + short="bg" lang="Bulgarian" desc="$lang" culture="bg-BG" ;; "cs" | "cs-"* | "cz" | "cz-"* ) + short="cs" lang="Czech" desc="$lang" culture="cs-CZ" ;; "da" | "da-"* | "dk" | "dk-"* ) + short="da" lang="Danish" desc="$lang" culture="da-DK" ;; "de" | "de-"* ) + short="de" lang="German" desc="$lang" culture="de-DE" ;; "el" | "el-"* | "gr" | "gr-"* ) + short="el" lang="Greek" desc="$lang" culture="el-GR" ;; "gb" | "en-gb" ) + short="en-gb" lang="English International" desc="English" culture="en-GB" ;; "en" | "en-"* ) + short="en" lang="English" desc="English" culture="en-US" ;; "mx" | "es-mx" ) + short="mx" lang="Spanish (Mexico)" desc="Spanish" culture="es-MX" ;; "es" | "es-"* ) + short="es" lang="Spanish" desc="$lang" culture="es-ES" ;; "et" | "et-"* ) + short="et" lang="Estonian" desc="$lang" culture="et-EE" ;; "fi" | "fi-"* ) + short="fi" lang="Finnish" desc="$lang" culture="fi-FI" ;; "ca" | "fr-ca" ) + short="ca" lang="French Canadian" desc="French" culture="fr-CA" ;; "fr" | "fr-"* ) + short="fr" lang="French" desc="$lang" culture="fr-FR" ;; "he" | "he-"* | "il" | "il-"* ) + short="he" lang="Hebrew" desc="$lang" culture="he-IL" ;; "hr" | "hr-"* | "cr" | "cr-"* ) + short="hr" lang="Croatian" desc="$lang" culture="hr-HR" ;; "hu" | "hu-"* ) + short="hu" lang="Hungarian" desc="$lang" culture="hu-HU" ;; "it" | "it-"* ) + short="it" lang="Italian" desc="$lang" culture="it-IT" ;; "ja" | "ja-"* | "jp" | "jp-"* ) + short="ja" lang="Japanese" desc="$lang" culture="ja-JP" ;; "ko" | "ko-"* | "kr" | "kr-"* ) + short="ko" lang="Korean" desc="$lang" culture="ko-KR" ;; "lt" | "lt-"* ) + short="lt" lang="Lithuanian" desc="$lang" - culture="lv-LV" ;; + culture="lt-LT" ;; "lv" | "lv-"* ) + short="lv" lang="Latvian" desc="$lang" - culture="lt-LT" ;; + culture="lv-LV" ;; "nb" | "nb-"* |"nn" | "nn-"* | "no" | "no-"* ) + short="no" lang="Norwegian" desc="$lang" culture="nb-NO" ;; "nl" | "nl-"* ) + short="nl" lang="Dutch" desc="$lang" culture="nl-NL" ;; "pl" | "pl-"* ) + short="pl" lang="Polish" desc="$lang" culture="pl-PL" ;; "br" | "pt-br" ) + short="pt" lang="Brazilian Portuguese" desc="Portuguese" culture="pt-BR" ;; "pt" | "pt-"* ) + short="pp" lang="Portuguese" desc="$lang" culture="pt-BR" ;; "ro" | "ro-"* ) + short="ro" lang="Romanian" desc="$lang" culture="ro-RO" ;; "ru" | "ru-"* ) + short="ru" lang="Russian" desc="$lang" culture="ru-RU" ;; "sk" | "sk-"* ) + short="sk" lang="Slovak" desc="$lang" culture="sk-SK" ;; "sl" | "sl-"* | "si" | "si-"* ) + short="sl" lang="Slovenian" desc="$lang" culture="sl-SI" ;; "sr" | "sr-"* ) + short="sr" lang="Serbian Latin" desc="Serbian" culture="sr-Latn-RS" ;; "sv" | "sv-"* | "se" | "se-"* ) + short="sv" lang="Swedish" desc="$lang" culture="sv-SE" ;; "th" | "th-"* ) + short="th" lang="Thai" desc="$lang" culture="th-TH" ;; "tr" | "tr-"* ) + short="tr" lang="Turkish" desc="$lang" culture="tr-TR" ;; "ua" | "ua-"* | "uk" | "uk-"* ) + short="uk" lang="Ukrainian" desc="$lang" culture="uk-UA" ;; "hk" | "zh-hk" | "cn-hk" ) + short="hk" lang="Chinese (Traditional)" desc="Chinese HK" culture="zh-TW" ;; "tw" | "zh-tw" | "cn-tw" ) + short="tw" lang="Chinese (Traditional)" desc="Chinese TW" culture="zh-TW" ;; "zh" | "zh-"* | "cn" | "cn-"* ) + short="cn" lang="Chinese (Simplified)" desc="Chinese" culture="zh-CN" ;; @@ -296,6 +336,7 @@ getLanguage() { case "${ret,,}" in "desc" ) echo "$desc" ;; "name" ) echo "$lang" ;; + "code" ) echo "$short" ;; "culture" ) echo "$culture" ;; *) echo "$desc";; esac @@ -949,900 +990,6 @@ getLink2() { getLink3() { - # Fallbacks for users who cannot connect to the Microsoft servers - - local id="$1" - local lang="$2" - local ret="$3" - local url="" - local sum="" - local size="" - local host="https://drive.massgrave.dev" - local w19="windows_server_2019_x64_dvd" - local w25="windows_server_2025_x64_dvd" - local w16="windows_server_2016_vl_x64_dvd" - local w12="windows_server_2012_r2_vl_with_update_x64_dvd" - local w08="windows_server_2008_r2_with_sp1_vl_build_x64_dvd" - local w81="windows_8.1_enterprise_with_update_x64_dvd" - local l11="windows_11_enterprise_ltsc_2024_x64_dvd" - local l10="windows_10_enterprise_ltsc_2021_x64_dvd" - local c11="windows_11_consumer_editions_version_24h2_x64_dvd" - local b11="windows_11_business_editions_version_24h2_x64_dvd" - local w22="windows_server_2022_updated_oct_2024_x64_dvd_d1a47ecc" - local b10="windows_10_business_editions_version_22h2_updated_oct_2024_x64_dvd" - local c10="windows_10_consumer_editions_version_22h2_updated_oct_2024_x64_dvd_d0cfb2e9" - - culture=$(getLanguage "$lang" "culture") - - case "${id,,}" in - "win11x64" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${c11}_3c9a7ef3.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${c11}_f8623745.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${c11}_ae72ca80.iso" ;; - "da" | "da-"* ) url="da-dk_${c11}_4f25c452.iso" ;; - "de" | "de-"* ) url="de-de_${c11}_bc4adebe.iso" ;; - "el" | "el-"* ) url="el-gr_${c11}_9e6ef9a0.iso" ;; - "gb" | "en-gb" ) url="en-gb_${c11}_4b3a8183.iso" ;; - "en" | "en-"* ) - size=5819484160 - sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" - url="en-us_${c11}_1d5fcad3.iso" ;; - "mx" | "es-mx" ) url="es-es_${c11}_3bc0e5c3.iso" ;; - "es" | "es-"* ) url="es-mx_${c11}_a28d9dab.iso" ;; - "et" | "et-"* ) url="et-ee_${c11}_48306c65.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${c11}_21618747.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${c11}_42755257.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${c11}_033875c5.iso" ;; - "he" | "he-"* ) url="he-il_${c11}_533bc3ac.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${c11}_40c769ed.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${c11}_7d2259d6.iso" ;; - "it" | "it-"* ) url="it-it_${c11}_33e81ff0.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${c11}_fc6538fd.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${c11}_f09a396b.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${c11}_22d54265.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${c11}_5ff65441.iso" ;; - "nb" | "nb-"* ) url="nb-no_${c11}_5a5d625b.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${c11}_7959020a.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${c11}_c0dcd21b.iso" ;; - "br" | "pt-br" ) url="pt-br_${c11}_751fe150.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${c11}_e0df188a.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${c11}_0821b265.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${c11}_784471d8.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${c11}_fd13020e.iso" ;; - "sl" | "sl-"* ) url="sl-si_${c11}_9aa9f408.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${c11}_febab1a9.iso" ;; - "sv" | "sv-"* ) url="sv-se_${c11}_fe34647f.iso" ;; - "th" | "th-"* ) url="th-th_${c11}_fc3e523e.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${c11}_443fefaf.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${c11}_32966915.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${c11}_d0825b63.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${c11}_bfc0d79b.iso" ;; - esac - ;; - "win11x64-enterprise" | "win11x64-enterprise-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b11}_47dae48e.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b11}_4231caca.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b11}_ca1661fd.iso" ;; - "da" | "da-"* ) url="da-dk_${b11}_ac0db9fc.iso" ;; - "de" | "de-"* ) url="de-de_${b11}_87a70226.iso" ;; - "el" | "el-"* ) url="el-gr_${b11}_946ba34d.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b11}_27d8c2f1.iso" ;; - "en" | "en-"* ) - size=5722114048 - sum="d0dca325314322518ae967d58c3061bcae57ee9743a8a1cf374aad8637e5e8ac" - url="en-us_${b11}_59a1851e.iso" ;; - "mx" | "es-mx" ) url="es-es_${b11}_86632f8d.iso" ;; - "es" | "es-"* ) url="es-mx_${b11}_6ee25ce4.iso" ;; - "et" | "et-"* ) url="et-ee_${b11}_c26c1e3a.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b11}_59dd0bb5.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b11}_a02f0c99.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b11}_c0a4510e.iso" ;; - "he" | "he-"* ) url="he-il_${b11}_c844d280.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b11}_6e4839cc.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b11}_aed71101.iso" ;; - "it" | "it-"* ) url="it-it_${b11}_5552c3a1.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b11}_7fdb7541.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b11}_646bb9fc.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b11}_54d6d7e2.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b11}_acee0541.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b11}_78f22960.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b11}_0719b251.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b11}_1a183794.iso" ;; - "br" | "pt-br" ) url="pt-br_${b11}_ecc90645.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b11}_e7bf77a1.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b11}_9adc8d7b.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b11}_f9b9b5d6.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b11}_1a91433b.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b11}_0b79bd14.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b11}_8a4b35b5.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b11}_55ad9818.iso" ;; - "th" | "th-"* ) url="th-th_${b11}_a2a350c3.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b11}_f35a9f1b.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b11}_38ff1d1d.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_a9b30de5.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b11}_5f9e5858.iso" ;; - esac - ;; - "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${l11}_8012f159.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${l11}_2778f4e8.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${l11}_d4ef05f2.iso" ;; - "da" | "da-"* ) url="da-dk_${l11}_c231c267.iso" ;; - "de" | "de-"* ) url="de-de_${l11}_4f136f69.iso" ;; - "el" | "el-"* ) url="el-gr_${l11}_54eaabb2.iso" ;; - "gb" | "en-gb" ) url="en-gb_${l11}_e2137661.iso" ;; - "en" | "en-"* ) - size=5125844992 - sum="157d8365a517c40afeb3106fdd74d0836e1025debbc343f2080e1a8687607f51" - url="en-us_${l11}_965cfb00.iso" ;; - "mx" | "es-mx" ) url="es-mx_${l11}_3310c094.iso" ;; - "es" | "es-"* ) url="es-es_${l11}_77392d61.iso" ;; - "et" | "et-"* ) url="et-ee_${l11}_2dbd4bfe.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${l11}_998f5df6.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${l11}_78732953.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${l11}_d66e386e.iso" ;; - "he" | "he-"* ) url="he-il_${l11}_fae050ec.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${l11}_e3594411.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${l11}_8fea6034.iso" ;; - "it" | "it-"* ) url="it-it_${l11}_1e8cabb6.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${l11}_e59ad418.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${l11}_b6b6eb18.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${l11}_145479e9.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${l11}_e0ebc53d.iso" ;; - "nb" | "nb-"* ) url="nb-no_${l11}_d41eeb48.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${l11}_e3063aab.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${l11}_e00807a1.iso" ;; - "br" | "pt-br" ) url="pt-br_${l11}_2bb6b75b.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${l11}_2f34bd6b.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${l11}_2eadb4df.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${l11}_f9af5773.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${l11}_03b916e7.iso" ;; - "sl" | "sl-"* ) url="sl-si_${l11}_310b3a76.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${l11}_3dfa5da5.iso" ;; - "sv" | "sv-"* ) url="sv-se_${l11}_191cf991.iso" ;; - "th" | "th-"* ) url="th-th_${l11}_47ce2c8a.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${l11}_27bdab81.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${l11}_b3f00872.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${l11}_6287d84d.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${l11}_cff9cd2d.iso" ;; - esac - ;; - "win11x64-iot" | "win11x64-enterprise-iot-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=5144817664 - sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" - url="en-us_windows_11_iot_enterprise_ltsc_2024_x64_dvd_f6b14814.iso" - ;; - "win10x64" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${c10}.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${c10}.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${c10}.iso" ;; - "da" | "da-"* ) url="da-dk_${c10}.iso" ;; - "de" | "de-"* ) url="de-de_${c10}.iso" ;; - "el" | "el-"* ) url="el-gr_${c10}.iso" ;; - "gb" | "en-gb" ) url="en-gb_${c10}.iso" ;; - "en" | "en-"* ) - size=7176140800 - sum="dda45d271061937657689b30944c792be97405fd5ca2110094049dc01a9201ec" - url="en-us_${c10}.iso" ;; - "mx" | "es-mx" ) url="es-mx_${c10}.iso" ;; - "es" | "es-"* ) url="es-es_${c10}.iso" ;; - "et" | "et-"* ) url="et-ee_${c10}.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${c10}.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${c10}.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${c10}.iso" ;; - "he" | "he-"* ) url="he-il_${c10}.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${c10}.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${c10}.iso" ;; - "it" | "it-"* ) url="it-it_${c10}.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${c10}.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${c10}.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${c10}.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${c10}.iso" ;; - "nb" | "nb-"* ) url="nb-no_${c10}.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${c10}.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${c10}.iso" ;; - "br" | "pt-br" ) url="pt-br_${c10}.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${c10}.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${c10}.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${c10}.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${c10}.iso" ;; - "sl" | "sl-"* ) url="sl-si_${c10}.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${c10}.iso" ;; - "sv" | "sv-"* ) url="sv-se_${c10}.iso" ;; - "th" | "th-"* ) url="th-th_${c10}.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${c10}.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${c10}.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${c10}.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${c10}.iso" ;; - esac - ;; - "win10x64-enterprise" | "win10x64-enterprise-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b10}_72d26609.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b10}_916cba75.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b10}_737b3dce.iso" ;; - "da" | "da-"* ) url="da-dk_${b10}_beb2874a.iso" ;; - "de" | "de-"* ) url="de-de_${b10}_e5656293.iso" ;; - "el" | "el-"* ) url="el-gr_${b10}_3dcced88.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b10}_4b87ccc8.iso" ;; - "en" | "en-"* ) - size=6985318400 - sum="cd224fff371bbce4ab2120a3ace8ed30dc5c48c87f766ff699eed3327d0db83e" - url="en-us_${b10}_66a185c7.iso" ;; - "mx" | "es-mx" ) url="es-mx_${b10}_c71c3a9b.iso" ;; - "es" | "es-"* ) url="es-es_${b10}_6a893bdb.iso" ;; - "et" | "et-"* ) url="et-ee_${b10}_e73ca294.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b10}_b4138a1f.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b10}_fa1fcfd1.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b10}_2582115c.iso" ;; - "he" | "he-"* ) url="he-il_${b10}_070da6e1.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b10}_7ab0b83d.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b10}_9ae1341c.iso" ;; - "it" | "it-"* ) url="it-it_${b10}_ed9771c1.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b10}_41fb6974.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b10}_8ee84458.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b10}_dde00c8b.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b10}_3c6ec670.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b10}_5c0830a7.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b10}_98c1911c.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b10}_21470c6f.iso" ;; - "br" | "pt-br" ) url="pt-br_${b10}_a8287ba4.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b10}_927e183d.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b10}_05768a51.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b10}_e0d31c6c.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b10}_a09d6210.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b10}_b6e9be37.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b10}_d3114222.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b10}_4fbbd5fa.iso" ;; - "th" | "th-"* ) url="th-th_${b10}_c820f914.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b10}_62d51ca5.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b10}_3d50cf88.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_2fab2287.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b10}_52bd0537.iso" ;; - esac - ;; - "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${l10}_60bc2a7a.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${l10}_b0887275.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${l10}_d624c653.iso" ;; - "da" | "da-"* ) url="da-dk_${l10}_6ec511bb.iso" ;; - "de" | "de-"* ) url="de-de_${l10}_71796d33.iso" ;; - "el" | "el-"* ) url="el-gr_${l10}_c83eab34.iso" ;; - "gb" | "en-gb" ) url="en-gb_${l10}_7fe51fe8.iso" ;; - "en" | "en-"* ) - size=4899461120 - sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" - url="en-us_${l10}_d289cf96.iso" ;; - "mx" | "es-mx" ) url="es-mx_${l10}_f6aaf384.iso" ;; - "es" | "es-"* ) url="es-es_${l10}_51d721ea.iso" ;; - "et" | "et-"* ) url="et-ee_${l10}_012a5c50.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${l10}_551582d9.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${l10}_2770e649.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${l10}_bda01eb0.iso" ;; - "he" | "he-"* ) url="he-il_${l10}_3a55ecd6.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${l10}_f5085b75.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${l10}_d541ddb3.iso" ;; - "it" | "it-"* ) url="it-it_${l10}_0c1aa034.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${l10}_ef58c6a1.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${l10}_6d26f398.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${l10}_9ffbbd5b.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${l10}_6c89d2e0.iso" ;; - "nb" | "nb-"* ) url="nb-no_${l10}_c65c51a5.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${l10}_88f53466.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${l10}_eff40776.iso" ;; - "br" | "pt-br" ) url="pt-br_${l10}_f318268e.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${l10}_f2e9b6a0.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${l10}_ae2284d6.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${l10}_5044a1e7.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${l10}_d6c64c5f.iso" ;; - "sl" | "sl-"* ) url="sl-si_${l10}_ec090386.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${l10}_2d2f8815.iso" ;; - "sv" | "sv-"* ) url="sv-se_${l10}_9a28bb6b.iso" ;; - "th" | "th-"* ) url="th-th_${l10}_b7ed34d6.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${l10}_e55b1896.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${l10}_816da3c3.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${l10}_80dba877.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${l10}_033b7312.iso" ;; - esac - ;; - "win10x64-iot" | "win10x64-enterprise-iot-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4851668992 - sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" - url="en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso" - ;; - "win81x64-enterprise" | "win81x64-enterprise-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_${w81}_6050360.iso" ;; - "bg" | "bg-"* ) url="bg_${w81}_6050367.iso" ;; - "cs" | "cs-"* ) url="cs_${w81}_6050393.iso" ;; - "da" | "da-"* ) url="da_${w81}_6050394.iso" ;; - "de" | "de-"* ) url="de_${w81}_6050501.iso" ;; - "el" | "el-"* ) url="el_${w81}_6050503.iso" ;; - "gb" | "en-gb" ) url="en-gb_${w81}_6054383.iso" ;; - "en" | "en-"* ) - size=4139163648 - sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" - url="en_${w81}_6054382.iso" ;; - "es" | "es-"* ) url="es_${w81}_6050578.iso" ;; - "et" | "et-"* ) url="et_${w81}_6054384.iso" ;; - "fi" | "fi-"* ) url="fi_${w81}_6050497.iso" ;; - "fr" | "fr-"* ) url="fr_${w81}_6050499.iso" ;; - "he" | "he-"* ) url="he_${w81}_6050504.iso" ;; - "hr" | "hr-"* ) url="hr_${w81}_6050391.iso" ;; - "hu" | "hu-"* ) url="hu_${w81}_6050505.iso" ;; - "it" | "it-"* ) url="it_${w81}_6050507.iso" ;; - "ja" | "ja-"* ) url="ja_${w81}_6050508.iso" ;; - "ko" | "ko-"* ) url="ko_${w81}_6050509.iso" ;; - "lt" | "lt-"* ) url="lt_${w81}_6050511.iso" ;; - "lv" | "lv-"* ) url="lv_${w81}_6050510.iso" ;; - "nb" | "nb-"* ) url="nb_${w81}_6050512.iso" ;; - "nl" | "nl-"* ) url="nl_${w81}_6054381.iso" ;; - "pl" | "pl-"* ) url="pl_${w81}_6050515.iso" ;; - "br" | "pt-br" ) url="pt_${w81}_6050521.iso" ;; - "pt" | "pt-"* ) url="pp_${w81}_6050526.iso" ;; - "ro" | "ro-"* ) url="ro_${w81}_6050534.iso" ;; - "ru" | "ru-"* ) url="ru_${w81}_6050542.iso" ;; - "sk" | "sk-"* ) url="sk_${w81}_6050562.iso" ;; - "sl" | "sl-"* ) url="sl_${w81}_6050570.iso" ;; - "sr" | "sr-"* ) url="sr-latn_${w81}_6050553.iso" ;; - "sv" | "sv-"* ) url="sv_${w81}_6050590.iso" ;; - "th" | "th-"* ) url="th_${w81}_6050602.iso" ;; - "tr" | "tr-"* ) url="tr_${w81}_6050609.iso" ;; - "uk" | "uk-"* ) url="uk_${w81}_6050618.iso" ;; - "zh-hk" ) url="hk_${w81}_6050380.iso" ;; - "zh-tw" ) url="tw_${w81}_6050387.iso" ;; - "zh" | "zh-"* ) url="cn_${w81}_6050374.iso" ;; - esac - ;; - "win2025" | "win2025-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_${w25}_4f54e1b0.iso" ;; - "de" | "de-"* ) url="de-de_${w25}_5282a882.iso" ;; - "en" | "en-"* ) - size=6013794304 - sum="854109e1f215a29fc3541188297a6ca97c8a8f0f8c4dd6236b78dfdf845bf75e" - url="en-us_${w25}_b7ec10f3.iso" ;; - "es" | "es-"* ) url="es-es_${w25}_c15f0ce2.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${w25}_bd6be507.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${w25}_e13eb8bf.iso" ;; - "it" | "it-"* ) url="it-it_${w25}_98437899.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${w25}_7a2e979b.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${w25}_85109737.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${w25}_5c3218f3.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${w25}_aa368cf8.iso" ;; - "br" | "pt-br" ) url="pt-br_${w25}_66107129.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${w25}_62bb3c31.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${w25}_2dfe1679.iso" ;; - "sv" | "sv-"* ) url="sv-se_${w25}_512bf117.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${w25}_a03fe256.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${w25}_6d2c01e3.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${w25}_1d93dd12.iso" ;; - esac - ;; - "win2022" | "win2022-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_${w22}.iso" ;; - "de" | "de-"* ) url="de-de_${w22}.iso" ;; - "en" | "en-"* ) - size=5973856256 - sum="61fa400b6e8f54e644529d024b18a578547147cdf815ea66c4b7961798717291" - url="en-us_${w22}.iso" ;; - "es" | "es-"* ) url="es-es_${w22}.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${w22}.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${w22}.iso" ;; - "it" | "it-"* ) url="it-it_${w22}.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${w22}.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${w22}.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${w22}.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${w22}.iso" ;; - "br" | "pt-br" ) url="pt-br_${w22}.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${w22}.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${w22}.iso" ;; - "sv" | "sv-"* ) url="sv-se_${w22}.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${w22}.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${w22}.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${w22}.iso" ;; - esac - ;; - "win2019" | "win2019-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_${w19}_3781c31c.iso" ;; - "de" | "de-"* ) url="de-de_${w19}_132f7aa4.iso" ;; - "en" | "en-"* ) - size=5651695616 - sum="ea247e5cf4df3e5829bfaaf45d899933a2a67b1c700a02ee8141287a8520261c" - url="en-us_${w19}_f9475476.iso" ;; - "es" | "es-"* ) url="es-es_${w19}_3ce0fd9e.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${w19}_f6f6acf6.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${w19}_1d834c46.iso" ;; - "it" | "it-"* ) url="it-it_${w19}_454267de.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${w19}_3899c3a3.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${w19}_84101c0a.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${w19}_f69d914e.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${w19}_a50263e1.iso" ;; - "br" | "pt-br" ) url="pt-br_${w19}_aee8c1c2.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${w19}_464373e8.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${w19}_e02b76ba.iso" ;; - "sv" | "sv-"* ) url="sv-se_${w19}_48c1aeff.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${w19}_b51af600.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${w19}_a4c80409.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${w19}_19d65722.iso" ;; - esac - ;; - "win2016" | "win2016-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_${w16}_11636699.iso" ;; - "de" | "de-"* ) url="de_${w16}_11636696.iso" ;; - "en" | "en-"* ) - size=6003804160 - sum="47919ce8b4993f531ca1fa3f85941f4a72b47ebaa4d3a321fecf83ca9d17e6b8" - url="en_${w16}_11636701.iso" ;; - "es" | "es-"* ) url="es_${w16}_11636712.iso" ;; - "fr" | "fr-"* ) url="fr_${w16}_11636729.iso" ;; - "hu" | "hu-"* ) url="hu_${w16}_11636720.iso" ;; - "it" | "it-"* ) url="it_${w16}_11636710.iso" ;; - "ja" | "ja-"* ) url="ja_${w16}_11645964.iso" ;; - "ko" | "ko-"* ) url="ko_${w16}_11636709.iso" ;; - "nl" | "nl-"* ) url="nl_${w16}_11636731.iso" ;; - "pl" | "pl-"* ) url="pl_${w16}_11636719.iso" ;; - "br" | "pt-br" ) url="pt_${w16}_11636697.iso" ;; - "pt" | "pt-"* ) url="pp_${w16}_11637454.iso" ;; - "ru" | "ru-"* ) url="ru_${w16}_11636694.iso" ;; - "sv" | "sv-"* ) url="sv_${w16}_11636706.iso" ;; - "tr" | "tr-"* ) url="tr_${w16}_11636725.iso" ;; - "zh-hk" | "zh-tw" ) url="ct_${w16}_11636717.iso" ;; - "zh" | "zh-"* ) url="cn_${w16}_11636695.iso" ;; - esac - ;; - "win2012r2" | "win2012r2-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_${w12}_6052752.iso" ;; - "de" | "de-"* ) url="de_${w12}_6052780.iso" ;; - "en" | "en-"* ) - size=5400115200 - sum="0e883ce28eb5c6f58a3a3007be978d43edb1035a4585506c1c4504c9e143408d" - url="en_${w12}_6052766.iso" ;; - "es" | "es-"* ) url="es_${w12}_6052831.iso" ;; - "fr" | "fr-"* ) url="fr_${w12}_6052772.iso" ;; - "hu" | "hu-"* ) url="hu_${w12}_6052786.iso" ;; - "it" | "it-"* ) url="it_${w12}_6052792.iso" ;; - "ja" | "ja-"* ) url="ja_${w12}_6052800.iso" ;; - "ko" | "ko-"* ) url="ko_${w12}_6052806.iso" ;; - "nl" | "nl-"* ) url="nl_${w12}_6052760.iso" ;; - "pl" | "pl-"* ) url="pl_${w12}_6052815.iso" ;; - "br" | "pt-br" ) url="pt_${w12}_6052819.iso" ;; - "pt" | "pt-"* ) url="pp_${w12}_6052823.iso" ;; - "ru" | "ru-"* ) url="ru_${w12}_6052827.iso" ;; - "sv" | "sv-"* ) url="sv_${w12}_6052835.iso" ;; - "tr" | "tr-"* ) url="tr_${w12}_6052838.iso" ;; - "zh-hk" ) url="hk_${w12}_6052739.iso" ;; - "zh-tw" ) url="tw_${w12}_6052746.iso" ;; - "zh" | "zh-"* ) url="cn_${w12}_6052729.iso" ;; - esac - ;; - "win2008r2" | "win2008r2-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_${w08}_617402.iso" ;; - "de" | "de-"* ) url="de_${w08}_617404.iso" ;; - "en" | "en-"* ) - size=3166720000 - sum="9b0cd5b11cc2e92badb74450f0cac03006d3c63a2ada36cb1eb95c1bf4b2608f" - url="en_${w08}_617403.iso" ;; - "es" | "es-"* ) url="es_${w08}_617410.iso" ;; - "fr" | "fr-"* ) url="fr_${w08}_617392.iso" ;; - "hu" | "hu-"* ) url="hu_${w08}_617415.iso" ;; - "it" | "it-"* ) url="it_${w08}_619596.iso" ;; - "ja" | "ja-"* ) url="ja_${w08}_631466.iso" ;; - "ko" | "ko-"* ) url="ko_${w08}_617409.iso" ;; - "nl" | "nl-"* ) url="nl_${w08}_617395.iso" ;; - "pl" | "pl-"* ) url="pl_${w08}_617397.iso" ;; - "br" | "pt-br" ) url="pt_${w08}_617394.iso" ;; - "pt" | "pt-"* ) url="pp_${w08}_617411.iso" ;; - "ru" | "ru-"* ) url="ru_${w08}_617421.iso" ;; - "sv" | "sv-"* ) url="sv_${w08}_617400.iso" ;; - "tr" | "tr-"* ) url="tr_${w08}_617416.iso" ;; - "zh-hk" ) url="hk_${w08}_617386.iso" ;; - "zh-tw" ) url="tw_${w08}_617405.iso" ;; - "zh" | "zh-"* ) url="cn_${w08}_617396.iso" ;; - esac - ;; - "win7x64" | "win7x64-enterprise" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_7_enterprise_with_sp1_x64_dvd_u_677643.iso" ;; - "bg" | "bg-"* ) url="bg_windows_7_enterprise_with_sp1_x64_dvd_u_677644.iso" ;; - "cs" | "cs-"* ) url="cs_windows_7_enterprise_with_sp1_x64_dvd_u_677646.iso" ;; - "da" | "da-"* ) url="da_windows_7_enterprise_with_sp1_x64_dvd_u_677648.iso" ;; - "de" | "de-"* ) url="de_windows_7_enterprise_with_sp1_x64_dvd_u_677649.iso" ;; - "el" | "el-"* ) url="el_windows_7_enterprise_with_sp1_x64_dvd_u_677650.iso" ;; - "en" | "en-"* ) - size=3182604288 - sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" - url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" ;; - "es" | "es-"* ) url="es_windows_7_enterprise_with_sp1_x64_dvd_u_677652.iso" ;; - "et" | "et-"* ) url="et_windows_7_enterprise_with_sp1_x64_dvd_u_677653.iso" ;; - "fi" | "fi-"* ) url="fi_windows_7_enterprise_with_sp1_x64_dvd_u_677655.iso" ;; - "fr" | "fr-"* ) url="fr_windows_7_enterprise_with_sp1_x64_dvd_u_677656.iso" ;; - "he" | "he-"* ) url="he_windows_7_enterprise_with_sp1_x64_dvd_u_677657.iso" ;; - "hr" | "hr-"* ) url="hr_windows_7_enterprise_with_sp1_x64_dvd_u_677658.iso" ;; - "hu" | "hu-"* ) url="hu_windows_7_enterprise_with_sp1_x64_dvd_u_677659.iso" ;; - "it" | "it-"* ) url="it_windows_7_enterprise_with_sp1_x64_dvd_u_677660.iso" ;; - "ja" | "ja-"* ) url="ja_windows_7_enterprise_with_sp1_x64_dvd_u_677662.iso" ;; - "ko" | "ko-"* ) url="ko_windows_7_enterprise_k_with_sp1_x64_dvd_u_677728.iso" ;; - "lt" | "lt-"* ) url="lt_windows_7_enterprise_with_sp1_x64_dvd_u_677663.iso" ;; - "lv" | "lv-"* ) url="lv_windows_7_enterprise_with_sp1_x64_dvd_u_677664.iso" ;; - "nb" | "nb-"* ) url="no_windows_7_enterprise_with_sp1_x64_dvd_u_677665.iso" ;; - "nl" | "nl-"* ) url="nl_windows_7_enterprise_with_sp1_x64_dvd_u_677666.iso" ;; - "pl" | "pl-"* ) url="pl_windows_7_enterprise_with_sp1_x64_dvd_u_677667.iso" ;; - "br" | "pt-br" ) url="pt_windows_7_enterprise_with_sp1_x64_dvd_u_677668.iso" ;; - "pt" | "pt-"* ) url="pp_windows_7_enterprise_with_sp1_x64_dvd_u_677669.iso" ;; - "ro" | "ro-"* ) url="ro_windows_7_enterprise_with_sp1_x64_dvd_u_677670.iso" ;; - "ru" | "ru-"* ) url="ru_windows_7_enterprise_with_sp1_x64_dvd_u_677671.iso" ;; - "sk" | "sk-"* ) url="sk_windows_7_enterprise_with_sp1_x64_dvd_u_677673.iso" ;; - "sl" | "sl-"* ) url="sl_windows_7_enterprise_with_sp1_x64_dvd_u_677674.iso" ;; - "sr" | "sr-"* ) url="sr_windows_7_enterprise_with_sp1_x64_dvd_u_677675.iso" ;; - "sv" | "sv-"* ) url="sv_windows_7_enterprise_with_sp1_x64_dvd_u_677676.iso" ;; - "th" | "th-"* ) url="th_windows_7_enterprise_with_sp1_x64_dvd_u_677678.iso" ;; - "tr" | "tr-"* ) url="tr_windows_7_enterprise_with_sp1_x64_dvd_u_677681.iso" ;; - "uk" | "uk-"* ) url="uk_windows_7_enterprise_with_sp1_x64_dvd_u_677683.iso" ;; - "zh-hk" ) url="hk_windows_7_enterprise_with_sp1_x64_dvd_u_677687.iso" ;; - "zh-tw" ) url="tw_windows_7_enterprise_with_sp1_x64_dvd_u_677689.iso" ;; - "zh" | "zh-"* ) url="cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso" ;; - esac - ;; - "win7x64-ultimate" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_7_ultimate_with_sp1_x64_dvd_u_677345.iso" ;; - "bg" | "bg-"* ) url="bg_windows_7_ultimate_with_sp1_x64_dvd_u_677363.iso" ;; - "cs" | "cs-"* ) url="cs_windows_7_ultimate_with_sp1_x64_dvd_u_677376.iso" ;; - "da" | "da-"* ) url="da_windows_7_ultimate_with_sp1_x64_dvd_u_677294.iso" ;; - "de" | "de-"* ) url="de_windows_7_ultimate_with_sp1_x64_dvd_u_677306.iso" ;; - "el" | "el-"* ) url="el_windows_7_ultimate_with_sp1_x64_dvd_u_677318.iso" ;; - "en" | "en-"* ) - size=3320903680 - sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" - url="en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso" ;; - "es" | "es-"* ) url="es_windows_7_ultimate_with_sp1_x64_dvd_u_677350.iso" ;; - "et" | "et-"* ) url="et_windows_7_ultimate_with_sp1_x64_dvd_u_677368.iso" ;; - "fi" | "fi-"* ) url="fi_windows_7_ultimate_with_sp1_x64_dvd_u_677378.iso" ;; - "fr" | "fr-"* ) url="fr_windows_7_ultimate_with_sp1_x64_dvd_u_677299.iso" ;; - "he" | "he-"* ) url="he_windows_7_ultimate_with_sp1_x64_dvd_u_677312.iso" ;; - "hr" | "hr-"* ) url="hr_windows_7_ultimate_with_sp1_x64_dvd_u_677324.iso" ;; - "hu" | "hu-"* ) url="hu_windows_7_ultimate_with_sp1_x64_dvd_u_677338.iso" ;; - "it" | "it-"* ) url="it_windows_7_ultimate_with_sp1_x64_dvd_u_677356.iso" ;; - "ja" | "ja-"* ) url="ja_windows_7_ultimate_with_sp1_x64_dvd_u_677372.iso" ;; - "ko" | "ko-"* ) url="ko_windows_7_ultimate_k_with_sp1_x64_dvd_u_677502.iso" ;; - "lt" | "lt-"* ) url="lt_windows_7_ultimate_with_sp1_x64_dvd_u_677379.iso" ;; - "lv" | "lv-"* ) url="lv_windows_7_ultimate_with_sp1_x64_dvd_u_677302.iso" ;; - "nb" | "nb-"* ) url="no_windows_7_ultimate_with_sp1_x64_dvd_u_677314.iso" ;; - "nl" | "nl-"* ) url="nl_windows_7_ultimate_with_sp1_x64_dvd_u_677325.iso" ;; - "pl" | "pl-"* ) url="pl_windows_7_ultimate_with_sp1_x64_dvd_u_677341.iso" ;; - "br" | "pt-br" ) url="pt_windows_7_ultimate_with_sp1_x64_dvd_u_677358.iso" ;; - "pt" | "pt-"* ) url="pp_windows_7_ultimate_with_sp1_x64_dvd_u_677373.iso" ;; - "ro" | "ro-"* ) url="ro_windows_7_ultimate_with_sp1_x64_dvd_u_677380.iso" ;; - "ru" | "ru-"* ) url="ru_windows_7_ultimate_with_sp1_x64_dvd_u_677391.iso" ;; - "sk" | "sk-"* ) url="sk_windows_7_ultimate_with_sp1_x64_dvd_u_677393.iso" ;; - "sl" | "sl-"* ) url="sl_windows_7_ultimate_with_sp1_x64_dvd_u_677396.iso" ;; - "sr" | "sr-"* ) url="sr_windows_7_ultimate_with_sp1_x64_dvd_u_677398.iso" ;; - "sv" | "sv-"* ) url="sv_windows_7_ultimate_with_sp1_x64_dvd_u_677400.iso" ;; - "th" | "th-"* ) url="th_windows_7_ultimate_with_sp1_x64_dvd_u_677402.iso" ;; - "tr" | "tr-"* ) url="tr_windows_7_ultimate_with_sp1_x64_dvd_u_677404.iso" ;; - "uk" | "uk-"* ) url="uk_windows_7_ultimate_with_sp1_x64_dvd_u_677406.iso" ;; - "zh-hk" ) url="hk_windows_7_ultimate_with_sp1_x64_dvd_u_677411.iso" ;; - "zh-tw" ) url="tw_windows_7_ultimate_with_sp1_x64_dvd_u_677414.iso" ;; - "zh" | "zh-"* ) url="cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso" ;; - esac - ;; - "win7x86" | "win7x86-enterprise" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_7_enterprise_with_sp1_x86_dvd_u_677691.iso" ;; - "bg" | "bg-"* ) url="bg_windows_7_enterprise_with_sp1_x86_dvd_u_677693.iso" ;; - "cs" | "cs-"* ) url="cs_windows_7_enterprise_with_sp1_x86_dvd_u_677695.iso" ;; - "da" | "da-"* ) url="da_windows_7_enterprise_with_sp1_x86_dvd_u_677698.iso" ;; - "de" | "de-"* ) url="de_windows_7_enterprise_with_sp1_x86_dvd_u_677702.iso" ;; - "el" | "el-"* ) url="el_windows_7_enterprise_with_sp1_x86_dvd_u_677706.iso" ;; - "en" | "en-"* ) - size=2434502656 - sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" - url="en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" ;; - "es" | "es-"* ) url="es_windows_7_enterprise_with_sp1_x86_dvd_u_677714.iso" ;; - "et" | "et-"* ) url="et_windows_7_enterprise_with_sp1_x86_dvd_u_677718.iso" ;; - "fi" | "fi-"* ) url="fi_windows_7_enterprise_with_sp1_x86_dvd_u_677722.iso" ;; - "fr" | "fr-"* ) url="fr_windows_7_enterprise_with_sp1_x86_dvd_u_677727.iso" ;; - "he" | "he-"* ) url="he_windows_7_enterprise_with_sp1_x86_dvd_u_677733.iso" ;; - "hr" | "hr-"* ) url="hr_windows_7_enterprise_with_sp1_x86_dvd_u_677739.iso" ;; - "hu" | "hu-"* ) url="hu_windows_7_enterprise_with_sp1_x86_dvd_u_677744.iso" ;; - "it" | "it-"* ) url="it_windows_7_enterprise_with_sp1_x86_dvd_u_677749.iso" ;; - "ja" | "ja-"* ) url="ja_windows_7_enterprise_with_sp1_x86_dvd_u_677757.iso" ;; - "ko" | "ko-"* ) url="ko_windows_7_enterprise_k_with_sp1_x86_dvd_u_677732.iso" ;; - "lt" | "lt-"* ) url="lt_windows_7_enterprise_with_sp1_x86_dvd_u_677764.iso" ;; - "lv" | "lv-"* ) url="lv_windows_7_enterprise_with_sp1_x86_dvd_u_677677.iso" ;; - "nb" | "nb-"* ) url="no_windows_7_enterprise_with_sp1_x86_dvd_u_677679.iso" ;; - "nl" | "nl-"* ) url="nl_windows_7_enterprise_with_sp1_x86_dvd_u_677682.iso" ;; - "pl" | "pl-"* ) url="pl_windows_7_enterprise_with_sp1_x86_dvd_u_677684.iso" ;; - "br" | "pt-br" ) url="pt_windows_7_enterprise_with_sp1_x86_dvd_u_677686.iso" ;; - "pt" | "pt-"* ) url="pp_windows_7_enterprise_with_sp1_x86_dvd_u_677688.iso" ;; - "ro" | "ro-"* ) url="ro_windows_7_enterprise_with_sp1_x86_dvd_u_677690.iso" ;; - "ru" | "ru-"* ) url="ru_windows_7_enterprise_with_sp1_x86_dvd_u_677692.iso" ;; - "sk" | "sk-"* ) url="sk_windows_7_enterprise_with_sp1_x86_dvd_u_677694.iso" ;; - "sl" | "sl-"* ) url="sl_windows_7_enterprise_with_sp1_x86_dvd_u_677696.iso" ;; - "sr" | "sr-"* ) url="sr_windows_7_enterprise_with_sp1_x86_dvd_u_677699.iso" ;; - "sv" | "sv-"* ) url="sv_windows_7_enterprise_with_sp1_x86_dvd_u_677701.iso" ;; - "th" | "th-"* ) url="th_windows_7_enterprise_with_sp1_x86_dvd_u_677705.iso" ;; - "tr" | "tr-"* ) url="tr_windows_7_enterprise_with_sp1_x86_dvd_u_677708.iso" ;; - "uk" | "uk-"* ) url="uk_windows_7_enterprise_with_sp1_x86_dvd_u_677712.iso" ;; - "zh-hk" ) url="hk_windows_7_enterprise_with_sp1_x86_dvd_u_677720.iso" ;; - "zh-tw" ) url="tw_windows_7_enterprise_with_sp1_x86_dvd_u_677723.iso" ;; - "zh" | "zh-"* ) url="cn_windows_7_enterprise_with_sp1_x86_dvd_u_677716.iso" ;; - esac - ;; - "win7x86-ultimate" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_7_ultimate_with_sp1_x86_dvd_u_677448.iso" ;; - "bg" | "bg-"* ) url="bg_windows_7_ultimate_with_sp1_x86_dvd_u_677450.iso" ;; - "cs" | "cs-"* ) url="cs_windows_7_ultimate_with_sp1_x86_dvd_u_677452.iso" ;; - "da" | "da-"* ) url="da_windows_7_ultimate_with_sp1_x86_dvd_u_677454.iso" ;; - "de" | "de-"* ) url="de_windows_7_ultimate_with_sp1_x86_dvd_u_677456.iso" ;; - "el" | "el-"* ) url="el_windows_7_ultimate_with_sp1_x86_dvd_u_677458.iso" ;; - "en" | "en-"* ) - size=2564476928 - sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" - url="en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso" ;; - "es" | "es-"* ) url="es_windows_7_ultimate_with_sp1_x86_dvd_u_677462.iso" ;; - "et" | "et-"* ) url="et_windows_7_ultimate_with_sp1_x86_dvd_u_677464.iso" ;; - "fi" | "fi-"* ) url="fi_windows_7_ultimate_with_sp1_x86_dvd_u_677466.iso" ;; - "fr" | "fr-"* ) url="fr_windows_7_ultimate_with_sp1_x86_dvd_u_677434.iso" ;; - "he" | "he-"* ) url="he_windows_7_ultimate_with_sp1_x86_dvd_u_677436.iso" ;; - "hr" | "hr-"* ) url="hr_windows_7_ultimate_with_sp1_x86_dvd_u_677438.iso" ;; - "hu" | "hu-"* ) url="hu_windows_7_ultimate_with_sp1_x86_dvd_u_677441.iso" ;; - "it" | "it-"* ) url="it_windows_7_ultimate_with_sp1_x86_dvd_u_677443.iso" ;; - "ja" | "ja-"* ) url="ja_windows_7_ultimate_with_sp1_x86_dvd_u_677445.iso" ;; - "ko" | "ko-"* ) url="ko_windows_7_ultimate_k_with_sp1_x86_dvd_u_677508.iso" ;; - "lt" | "lt-"* ) url="lt_windows_7_ultimate_with_sp1_x86_dvd_u_677447.iso" ;; - "lv" | "lv-"* ) url="lv_windows_7_ultimate_with_sp1_x86_dvd_u_677449.iso" ;; - "nb" | "nb-"* ) url="no_windows_7_ultimate_with_sp1_x86_dvd_u_677451.iso" ;; - "nl" | "nl-"* ) url="nl_windows_7_ultimate_with_sp1_x86_dvd_u_677453.iso" ;; - "pl" | "pl-"* ) url="pl_windows_7_ultimate_with_sp1_x86_dvd_u_677455.iso" ;; - "br" | "pt-br" ) url="pt_windows_7_ultimate_with_sp1_x86_dvd_u_677457.iso" ;; - "pt" | "pt-"* ) url="pp_windows_7_ultimate_with_sp1_x86_dvd_u_677459.iso" ;; - "ro" | "ro-"* ) url="ro_windows_7_ultimate_with_sp1_x86_dvd_u_677461.iso" ;; - "ru" | "ru-"* ) url="ru_windows_7_ultimate_with_sp1_x86_dvd_u_677463.iso" ;; - "sk" | "sk-"* ) url="sk_windows_7_ultimate_with_sp1_x86_dvd_u_677465.iso" ;; - "sl" | "sl-"* ) url="sl_windows_7_ultimate_with_sp1_x86_dvd_u_677467.iso" ;; - "sr" | "sr-"* ) url="sr_windows_7_ultimate_with_sp1_x86_dvd_u_677468.iso" ;; - "sv" | "sv-"* ) url="sv_windows_7_ultimate_with_sp1_x86_dvd_u_677482.iso" ;; - "th" | "th-"* ) url="th_windows_7_ultimate_with_sp1_x86_dvd_u_677483.iso" ;; - "tr" | "tr-"* ) url="tr_windows_7_ultimate_with_sp1_x86_dvd_u_677484.iso" ;; - "uk" | "uk-"* ) url="uk_windows_7_ultimate_with_sp1_x86_dvd_u_677485.iso" ;; - "zh-hk" ) url="hk_windows_7_ultimate_with_sp1_x86_dvd_u_677487.iso" ;; - "zh-tw" ) url="tw_windows_7_ultimate_with_sp1_x86_dvd_u_677488.iso" ;; - "zh" | "zh-"* ) url="cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso" ;; - esac - ;; - "winvistax64" | "winvistax64-enterprise" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_vista_enterprise_with_sp2_x64_dvd_x15-40408.iso" ;; - "bg" | "bg-"* ) url="bg_windows_vista_enterprise_with_sp2_x64_dvd_x15-40410.iso" ;; - "cs" | "cs-"* ) url="cs_windows_vista_enterprise_with_sp2_x64_dvd_x15-40412.iso" ;; - "da" | "da-"* ) url="da_windows_vista_enterprise_with_sp2_x64_dvd_x15-40416.iso" ;; - "de" | "de-"* ) url="de_windows_vista_enterprise_sp2_x64_dvd_342376.iso" ;; - "el" | "el-"* ) url="el_windows_vista_enterprise_with_sp2_x64_dvd_x15-40423.iso" ;; - "en" | "en-"* ) - size=3205953536 - sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" - url="en_windows_vista_enterprise_sp2_x64_dvd_342332.iso" ;; - "es" | "es-"* ) url="es_windows_vista_enterprise_sp2_x64_dvd_342415.iso" ;; - "et" | "et-"* ) url="et_windows_vista_enterprise_with_sp2_x64_dvd_x15-40437.iso" ;; - "fi" | "fi-"* ) url="fi_windows_vista_enterprise_with_sp2_x64_dvd_x15-40451.iso" ;; - "fr" | "fr-"* ) url="fr_windows_vista_enterprise_sp2_x64_dvd_342355.iso" ;; - "he" | "he-"* ) url="he_windows_vista_enterprise_with_sp2_x64_dvd_x15-40425.iso" ;; - "hr" | "hr-"* ) url="hr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40396.iso" ;; - "hu" | "hu-"* ) url="hu_windows_vista_enterprise_with_sp2_x64_dvd_x15-40427.iso" ;; - "it" | "it-"* ) url="it_windows_vista_enterprise_with_sp2_x64_dvd_x15-40429.iso" ;; - "ja" | "ja-"* ) url="ja_windows_vista_enterprise_sp2_x64_dvd_342393.iso" ;; - "ko" | "ko-"* ) url="ko_windows_vista_enterprise_k_with_sp2_x64_dvd_x15-40433.iso" ;; - "lt" | "lt-"* ) url="lt_windows_vista_enterprise_with_sp2_x64_dvd_x15-40394.iso" ;; - "lv" | "lv-"* ) url="lv_windows_vista_enterprise_with_sp2_x64_dvd_x15-40392.iso" ;; - "nb" | "nb-"* ) url="no_windows_vista_enterprise_with_sp2_x64_dvd_x15-40439.iso" ;; - "nl" | "nl-"* ) url="nl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40441.iso" ;; - "pl" | "pl-"* ) url="pl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40445.iso" ;; - "br" | "pt-br" ) url="pt_windows_vista_enterprise_with_sp2_x64_dvd_x15-40400.iso" ;; - "pt" | "pt-"* ) url="pp_windows_vista_enterprise_with_sp2_x64_dvd_x15-40443.iso" ;; - "ro" | "ro-"* ) url="ro_windows_vista_enterprise_with_sp2_x64_dvd_x15-40447.iso" ;; - "ru" | "ru-"* ) url="ru_windows_vista_enterprise_with_sp2_x64_dvd_x15-40455.iso" ;; - "sk" | "sk-"* ) url="sk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40453.iso" ;; - "sl" | "sl-"* ) url="sl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40435.iso" ;; - "sr" | "sr-"* ) url="sr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40406.iso" ;; - "sv" | "sv-"* ) url="sv_windows_vista_enterprise_with_sp2_x64_dvd_x15-40449.iso" ;; - "th" | "th-"* ) url="th_windows_vista_enterprise_with_sp2_x64_dvd_x15-40457.iso" ;; - "tr" | "tr-"* ) url="tr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40459.iso" ;; - "uk" | "uk-"* ) url="uk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40398.iso" ;; - "zh-hk" ) url="hk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40463.iso" ;; - "zh-tw" ) url="tw_windows_vista_enterprise_with_sp2_x64_dvd_x15-40461.iso" ;; - "zh" | "zh-"* ) url="cn_windows_vista_enterprise_with_sp2_x64_dvd_x15-40402.iso" ;; - esac - ;; - "winvistax64-ultimate" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_vista_with_sp2_x64_dvd_x15-36318.iso" ;; - "bg" | "bg-"* ) url="bg_windows_vista_with_sp2_x64_dvd_x15-36321.iso" ;; - "cs" | "cs-"* ) url="cs_windows_vista_with_sp2_x64_dvd_x15-36327.iso" ;; - "da" | "da-"* ) url="da_windows_vista_with_sp2_x64_dvd_x15-36329.iso" ;; - "de" | "de-"* ) url="de_windows_vista_sp2_x64_dvd_342287.iso" ;; - "el" | "el-"* ) url="el_windows_vista_with_sp2_x64_dvd_x15-36343.iso" ;; - "en" | "en-"* ) - size=3861460992 - sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" - url="en_windows_vista_sp2_x64_dvd_342267.iso" ;; - "es" | "es-"* ) url="es_windows_vista_sp2_x64_dvd_342309.iso" ;; - "et" | "et-"* ) url="et_windows_vista_with_sp2_x64_dvd_x15-36335.iso" ;; - "fi" | "fi-"* ) url="fi_windows_vista_with_sp2_x64_dvd_x15-36337.iso" ;; - "fr" | "fr-"* ) url="fr_windows_vista_sp2_x64_dvd_342277.iso" ;; - "he" | "he-"* ) url="he_windows_vista_with_sp2_x64_dvd_x15-36344.iso" ;; - "hr" | "hr-"* ) url="hr_windows_vista_with_sp2_x64_dvd_x15-36325.iso" ;; - "hu" | "hu-"* ) url="hu_windows_vista_with_sp2_x64_dvd_x15-36346.iso" ;; - "it" | "it-"* ) url="it_windows_vista_with_sp2_x64_dvd_x15-36348.iso" ;; - "ja" | "ja-"* ) url="ja_windows_vista_sp2_x64_dvd_342298.iso" ;; - "ko" | "ko-"* ) url="ko_windows_vista_k_and_kn_with_sp2_x86_dvd_x15-36302.iso" ;; - "lt" | "lt-"* ) url="lt_windows_vista_with_sp2_x64_dvd_x15-36355.iso" ;; - "lv" | "lv-"* ) url="lv_windows_vista_with_sp2_x64_dvd_x15-36353.iso" ;; - "nb" | "nb-"* ) url="no_windows_vista_with_sp2_x64_dvd_x15-36357.iso" ;; - "nl" | "nl-"* ) url="nl_windows_vista_with_sp2_x64_dvd_x15-36331.iso" ;; - "pl" | "pl-"* ) url="pl_windows_vista_with_sp2_x64_dvd_x15-36359.iso" ;; - "br" | "pt-br" ) url="pt_windows_vista_with_sp2_x64_dvd_x15-36319.iso" ;; - "pt" | "pt-"* ) url="pp_windows_vista_with_sp2_x64_dvd_x15-36361.iso" ;; - "ro" | "ro-"* ) url="ro_windows_vista_with_sp2_x64_dvd_x15-36363.iso" ;; - "ru" | "ru-"* ) url="ru_windows_vista_with_sp2_x64_dvd_x15-36364.iso" ;; - "sk" | "sk-"* ) url="sk_windows_vista_with_sp2_x64_dvd_x15-36367.iso" ;; - "sl" | "sl-"* ) url="sl_windows_vista_with_sp2_x64_dvd_x15-36369.iso" ;; - "sr" | "sr-"* ) url="sr_windows_vista_with_sp2_x64_dvd_x15-36365.iso" ;; - "sv" | "sv-"* ) url="sv_windows_vista_with_sp2_x64_dvd_x15-36373.iso" ;; - "th" | "th-"* ) url="th_windows_vista_with_sp2_x64_dvd_x15-36374.iso" ;; - "tr" | "tr-"* ) url="tr_windows_vista_with_sp2_x64_dvd_x15-36375.iso" ;; - "uk" | "uk-"* ) url="uk_windows_vista_with_sp2_x64_dvd_x15-36376.iso" ;; - "zh-hk" ) url="hk_windows_vista_with_sp2_x64_dvd_x15-36324.iso" ;; - "zh-tw" ) url="tw_windows_vista_with_sp2_x64_dvd_x15-36323.iso" ;; - "zh" | "zh-"* ) url="cn_windows_vista_with_sp2_x64_dvd_x15-36322.iso" ;; - esac - ;; - "winvistax86" | "winvistax86-enterprise" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_vista_enterprise_with_sp2_x86_dvd_x15-40263.iso" ;; - "bg" | "bg-"* ) url="bg_windows_vista_enterprise_with_sp2_x86_dvd_x15-40265.iso" ;; - "cs" | "cs-"* ) url="cs_windows_vista_enterprise_with_sp2_x86_dvd_x15-40267.iso" ;; - "da" | "da-"* ) url="da_windows_vista_enterprise_with_sp2_x86_dvd_x15-40271.iso" ;; - "de" | "de-"* ) url="de_windows_vista_enterprise_sp2_x86_dvd_342373.iso" ;; - "el" | "el-"* ) url="el_windows_vista_enterprise_with_sp2_x86_dvd_x15-40277.iso" ;; - "en" | "en-"* ) - size=2420981760 - sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" - url="en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" ;; - "es" | "es-"* ) url="es_windows_vista_enterprise_sp2_x86_dvd_342413.iso" ;; - "et" | "et-"* ) url="et_windows_vista_enterprise_with_sp2_x86_dvd_x15-40291.iso" ;; - "fi" | "fi-"* ) url="fi_windows_vista_enterprise_with_sp2_x86_dvd_x15-40305.iso" ;; - "fr" | "fr-"* ) url="fr_windows_vista_enterprise_sp2_x86_dvd_342352.iso" ;; - "he" | "he-"* ) url="he_windows_vista_enterprise_with_sp2_x86_dvd_x15-40279.iso" ;; - "hr" | "hr-"* ) url="hr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40251.iso" ;; - "hu" | "hu-"* ) url="hu_windows_vista_enterprise_with_sp2_x86_dvd_x15-40281.iso" ;; - "it" | "it-"* ) url="it_windows_vista_enterprise_with_sp2_x86_dvd_x15-40283.iso" ;; - "ja" | "ja-"* ) url="ja_windows_vista_enterprise_sp2_x86_dvd_342391.iso" ;; - "ko" | "ko-"* ) url="ko_windows_vista_enterprise_k_with_sp2_x86_dvd_x15-40287.iso" ;; - "lt" | "lt-"* ) url="lt_windows_vista_enterprise_with_sp2_x86_dvd_x15-40249.iso" ;; - "lv" | "lv-"* ) url="lv_windows_vista_enterprise_with_sp2_x86_dvd_x15-40247.iso" ;; - "nb" | "nb-"* ) url="no_windows_vista_enterprise_with_sp2_x86_dvd_x15-40293.iso" ;; - "nl" | "nl-"* ) url="nl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40295.iso" ;; - "pl" | "pl-"* ) url="pl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40299.iso" ;; - "br" | "pt-br" ) url="pt_windows_vista_enterprise_with_sp2_x86_dvd_x15-40255.iso" ;; - "pt" | "pt-"* ) url="pp_windows_vista_enterprise_with_sp2_x86_dvd_x15-40297.iso" ;; - "ro" | "ro-"* ) url="ro_windows_vista_enterprise_with_sp2_x86_dvd_x15-40301.iso" ;; - "ru" | "ru-"* ) url="ru_windows_vista_enterprise_with_sp2_x86_dvd_x15-40309.iso" ;; - "sk" | "sk-"* ) url="sk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40307.iso" ;; - "sl" | "sl-"* ) url="sl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40289.iso" ;; - "sr" | "sr-"* ) url="sr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40261.iso" ;; - "sv" | "sv-"* ) url="sv_windows_vista_enterprise_with_sp2_x86_dvd_x15-40303.iso" ;; - "th" | "th-"* ) url="th_windows_vista_enterprise_with_sp2_x86_dvd_x15-40311.iso" ;; - "tr" | "tr-"* ) url="tr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40313.iso" ;; - "uk" | "uk-"* ) url="uk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40253.iso" ;; - "zh-hk" ) url="hk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40317.iso" ;; - "zh-tw" ) url="tw_windows_vista_enterprise_with_sp2_x86_dvd_x15-40315.iso" ;; - "zh" | "zh-"* ) url="cn_windows_vista_enterprise_with_sp2_x86_dvd_x15-40257.iso" ;; - esac - ;; - "winvistax86-ultimate" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_vista_with_sp2_x86_dvd_x15-36282.iso" ;; - "bg" | "bg-"* ) url="bg_windows_vista_with_sp2_x86_dvd_x15-36284.iso" ;; - "hr" | "hr-"* ) url="hr_windows_vista_with_sp2_x86_dvd_x15-36288.iso" ;; - "cs" | "cs-"* ) url="cs_windows_vista_with_sp2_x86_dvd_x15-36289.iso" ;; - "da" | "da-"* ) url="da_windows_vista_with_sp2_x86_dvd_x15-36290.iso" ;; - "de" | "de-"* ) url="de_windows_vista_sp2_x86_dvd_342286.iso" ;; - "el" | "el-"* ) url="el_windows_vista_with_sp2_x86_dvd_x15-36297.iso" ;; - "en" | "en-"* ) - size=3243413504 - sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" - url="en_windows_vista_with_sp2_x86_dvd_342266.iso" ;; - "es" | "es-"* ) url="es_windows_vista_sp2_x86_dvd_342308.iso" ;; - "et" | "et-"* ) url="et_windows_vista_with_sp2_x86_dvd_x15-36293.iso" ;; - "fi" | "fi-"* ) url="fi_windows_vista_with_sp2_x86_dvd_x15-36294.iso" ;; - "fr" | "fr-"* ) url="fr_windows_vista_sp2_x86_dvd_342276.iso" ;; - "he" | "he-"* ) url="he_windows_vista_with_sp2_x86_dvd_x15-36298.iso" ;; - "hu" | "hu-"* ) url="hu_windows_vista_with_sp2_x86_dvd_x15-36299.iso" ;; - "it" | "it-"* ) url="it_windows_vista_with_sp2_x86_dvd_x15-36300.iso" ;; - "ja" | "ja-"* ) url="ja_windows_vista_sp2_x86_dvd_342296.iso" ;; - "ko" | "ko-"* ) url="ko_windows_vista_k_with_sp2_x64_dvd_x15-36350.iso" ;; - "lt" | "lt-"* ) url="lt_windows_vista_with_sp2_x86_dvd_x15-36304.iso" ;; - "lv" | "lv-"* ) url="lv_windows_vista_with_sp2_x86_dvd_x15-36303.iso" ;; - "nb" | "nb-"* ) url="no_windows_vista_with_sp2_x86_dvd_x15-36305.iso" ;; - "nl" | "nl-"* ) url="nl_windows_vista_with_sp2_x86_dvd_x15-36291.iso" ;; - "pl" | "pl-"* ) url="pl_windows_vista_with_sp2_x86_dvd_x15-36306.iso" ;; - "br" | "pt-br" ) url="pt_windows_vista_with_sp2_x86_dvd_x15-36283.iso" ;; - "pt" | "pt-"* ) url="pp_windows_vista_with_sp2_x86_dvd_x15-36307.iso" ;; - "ro" | "ro-"* ) url="ro_windows_vista_with_sp2_x86_dvd_x15-36308.iso" ;; - "ru" | "ru-"* ) url="ru_windows_vista_with_sp2_x86_dvd_x15-36309.iso" ;; - "sk" | "sk-"* ) url="sk_windows_vista_with_sp2_x86_dvd_x15-36311.iso" ;; - "sl" | "sl-"* ) url="sl_windows_vista_with_sp2_x86_dvd_x15-36312.iso" ;; - "sr" | "sr-"* ) url="sr_windows_vista_with_sp2_x86_dvd_x15-36310.iso" ;; - "sv" | "sv-"* ) url="sv_windows_vista_with_sp2_x86_dvd_x15-36314.iso" ;; - "th" | "th-"* ) url="th_windows_vista_with_sp2_x86_dvd_x15-36315.iso" ;; - "tr" | "tr-"* ) url="tr_windows_vista_with_sp2_x86_dvd_x15-36316.iso" ;; - "uk" | "uk-"* ) url="uk_windows_vista_with_sp2_x86_dvd_x15-36317.iso" ;; - "zh-hk" ) url="hk_windows_vista_with_sp2_x86_dvd_x15-36287.iso" ;; - "zh-tw" ) url="tw_windows_vista_with_sp2_x86_dvd_x15-36286.iso" ;; - "zh" | "zh-"* ) url="cn_windows_vista_with_sp2_x86_dvd_x15-36285.iso" ;; - esac - ;; - "winxpx86" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74065.iso" ;; - "cs" | "cs-"* ) url="cs_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73965.iso" ;; - "da" | "da-"* ) url="da_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73968.iso" ;; - "de" | "de-"* ) url="de_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73985.iso" ;; - "el" | "el-"* ) url="el_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73988.iso" ;; - "es" | "es-"* ) url="es_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74009.iso" ;; - "fi" | "fi-"* ) url="fi_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73979.iso" ;; - "fr" | "fr-"* ) url="fr_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73982.iso" ;; - "he" | "he-"* ) url="he_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74143.iso" ;; - "hu" | "hu-"* ) url="hu_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73991.iso" ;; - "it" | "it-"* ) url="it_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73994.iso" ;; - "ja" | "ja-"* ) url="ja_windows_xp_professional_with_service_pack_3_x86_dvd_vl_x14-74058.iso" ;; - "nb" | "nb-"* ) url="no_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74000.iso" ;; - "nl" | "nl-"* ) url="nl_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73971.iso" ;; - "pl" | "pl-"* ) url="pl_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74003.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74137.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74006.iso" ;; - "ru" | "ru-"* ) url="ru_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74146.iso" ;; - "sv" | "sv-"* ) url="sv_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74012.iso" ;; - "tr" | "tr-"* ) url="tr_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74085.iso" ;; - "zh-hk" ) url="zh-hk_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74075.iso" ;; - "zh-tw" ) url="zh-tw_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74140.iso" ;; - "zh" | "zh-"* ) url="zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso" ;; - esac - ;; - "winxpx64" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=628168704 - sum="b641514c2265ba6c0a9ddbcfa4a6daaac6539db8d1ce704366cdfe5a516e0495" - url="en_win_xp_pro_x64_with_sp2_vl_x13-41611.iso" - ;; - esac - - case "${ret,,}" in - "sum" ) echo "$sum" ;; - "size" ) echo "$size" ;; - *) [ -n "$url" ] && echo "$host/$url";; - esac - - return 0 -} - -getLink4() { - local id="$1" local lang="$2" local ret="$3" @@ -1960,12 +1107,66 @@ isESD() { return 1 } +isMG() { + + local id="$1" + local lang="$2" + + case "${id,,}" in + "win11${PLATFORM,,}" ) + return 0 + ;; + "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) + return 0 + ;; + "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) + return 0 + ;; + "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + return 0 + ;; + "win10${PLATFORM,,}" ) + return 0 + ;; + "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) + return 0 + ;; + "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + return 0 + ;; + "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) + return 0 + ;; + "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) + return 0 + ;; + "win2025" | "win2025-eval" | "win2022" | "win2022-eval" | "win2019" | "win2019-eval" ) + return 0 + ;; + "win2016" | "win2016-eval" | "win2012r2" | "win2012r2-eval" | "win2008r2" | "win2008r2-eval" ) + return 0 + ;; + "win7x64" | "win7x64-enterprise" | "win7x64-ultimate" | "win7x86" | "win7x86-enterprise" | "win7x86-ultimate" ) + return 0 + ;; + "winvistax64" | "winvistax64-enterprise" | "winvistax64-ultimate" | "winvistax86" | "winvistax86-enterprise" | "winvistax86-ultimate" ) + return 0 + ;; + "winxpx86" | "winxpx64" ) + return 0 + ;; + esac + + return 1 +} + validVersion() { local id="$1" local lang="$2" local url + isMG "$id" "$lang" && return 0 isESD "$id" "$lang" && return 0 isMido "$id" "$lang" && return 0 diff --git a/src/mido.sh b/src/mido.sh index 776f716..4804390 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -4,25 +4,26 @@ set -Eeuo pipefail handle_curl_error() { local error_code="$1" + local server_name="$2" case "$error_code" in 1) error "Unsupported protocol!" ;; 2) error "Failed to initialize curl!" ;; 3) error "The URL format is malformed!" ;; 5) error "Failed to resolve address of proxy host!" ;; - 6) error "Failed to resolve Microsoft servers! Is there an Internet connection?" ;; - 7) error "Failed to contact Microsoft servers! Is there an Internet connection or is the server down?" ;; - 8) error "Microsoft servers returned a malformed HTTP response!" ;; + 6) error "Failed to resolve $server_name servers! Is there an Internet connection?" ;; + 7) error "Failed to contact $server_name servers! Is there an Internet connection or is the server down?" ;; + 8) error "$server_name servers returned a malformed HTTP response!" ;; 16) error "A problem was detected in the HTTP2 framing layer!" ;; - 22) error "Microsoft servers returned a failing HTTP status code!" ;; + 22) error "$server_name servers returned a failing HTTP status code!" ;; 23) error "Failed at writing Windows media to disk! Out of disk space or permission error?" ;; 26) error "Failed to read Windows media from disk!" ;; 27) error "Ran out of memory during download!" ;; - 28) error "Connection timed out to Microsoft server!" ;; - 35) error "SSL connection error from Microsoft server!" ;; + 28) error "Connection timed out to $server_name server!" ;; + 35) error "SSL connection error from $server_name server!" ;; 36) error "Failed to continue earlier download!" ;; - 52) error "Received no data from the Microsoft server!" ;; - 63) error "Microsoft servers returned an unexpectedly large response!" ;; + 52) error "Received no data from the $server_name server!" ;; + 63) error "$server_name servers returned an unexpectedly large response!" ;; # POSIX defines exit statuses 1-125 as usable by us # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02 $((error_code <= 125))) @@ -100,7 +101,7 @@ download_windows() { # Remove "Accept" header that curl sends by default [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { - handle_curl_error $? + handle_curl_error "$?" "Microsoft" return $? } @@ -117,14 +118,14 @@ download_windows() { # Permit Session ID curl --silent --max-time 30 --output /dev/null --user-agent "$user_agent" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://vlscppe.microsoft.com/tags?org_id=y6jn8c31&session_id=$session_id" || { # This should only happen if there's been some change to how this API works - handle_curl_error $? + handle_curl_error "$?" "Microsoft" return $? } [[ "$DEBUG" == [Yy1]* ]] && echo -n "Getting language SKU ID: " sku_url="https://www.microsoft.com/software-download-connector/api/getskuinformationbyproductedition?profile=$profile&ProductEditionId=$product_edition_id&SKU=undefined&friendlyFileName=undefined&Locale=en-US&sessionID=$session_id" language_skuid_json=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "$sku_url") || { - handle_curl_error $? + handle_curl_error "$?" "Microsoft" return $? } @@ -229,7 +230,7 @@ download_windows_eval() { [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" iso_download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { - handle_curl_error $? + handle_curl_error "$?" "Microsoft" return $? } @@ -287,7 +288,7 @@ download_windows_eval() { iso_download_link=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link") || { # This should only happen if the Microsoft servers are down - handle_curl_error $? + handle_curl_error "$?" "Microsoft" return $? } @@ -428,6 +429,215 @@ getCatalog() { return 0 } +getMG() { + + local version="$1" + local lang="$2" + local desc="$3" + + local locale="" + local culture="" + local language="" + local user_agent="" + + user_agent=$(get_agent) + language=$(getLanguage "$lang" "desc") + culture=$(getLanguage "$lang" "culture") + + local msg="Requesting download link from massgrave.dev..." + info "$msg" && html "$msg" + + local pattern="" + local locale="${culture,,}" + local platform="${PLATFORM,,}" + local url="https://massgrave.dev/" + + if [[ "${PLATFORM,,}" != "arm64" ]]; then + + case "${version,,}" in + "win11${PLATFORM,,}" ) + url+="windows_11_links" + pattern="consumer" + ;; + "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) + url+="windows_11_links" + pattern="business" + ;; + "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) + url+="windows_ltsc_links" + pattern="11_enterprise_ltsc" + ;; + "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + url+="windows_ltsc_links" + pattern="11_iot" + ;; + "win10${PLATFORM,,}" ) + url+="windows_10_links" + pattern="consumer" + ;; + "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) + url+="windows_10_links" + pattern="business" + ;; + "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + url+="windows_ltsc_links" + pattern="10_enterprise_ltsc" + ;; + "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) + url+="windows_ltsc_links" + pattern="10_iot" + ;; + "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) + url+="windows_8.1_links" + pattern="8.1_enterprise" + locale=$(getLanguage "$lang" "code") + [[ "$locale" == "sr" ]] && locale="sr-latn" + ;; + "win2025" | "win2025-eval" ) + url+="windows_server_links" + pattern="server_2025" + ;; + "win2022" | "win2022-eval" ) + url+="windows_server_links" + pattern="server_2022" + ;; + "win2019" | "win2019-eval" ) + url+="windows_server_links" + pattern="server_2019" + ;; + "win2016" | "win2016-eval" ) + url+="windows_server_links" + pattern="server_2016" + locale=$(getLanguage "$lang" "code") + [[ "$locale" == "hk" ]] && locale="ct" + [[ "$locale" == "tw" ]] && locale="ct" + ;; + "win2012r2" | "win2012r2-eval" ) + url+="windows_server_links" + pattern="server_2012_r2" + locale=$(getLanguage "$lang" "code") + ;; + "win2008r2" | "win2008r2-eval" ) + url+="windows_server_links" + pattern="server_2008_r2" + locale=$(getLanguage "$lang" "code") + ;; + "win7x64" | "win7x64-enterprise" ) + url+="windows_7_links" + pattern="enterprise" + locale=$(getLanguage "$lang" "code") + ;; + "win7x64-ultimate" ) + url+="windows_7_links" + pattern="ultimate" + locale=$(getLanguage "$lang" "code") + ;; + "win7x86" | "win7x86-enterprise" ) + platform="x86" + url+="windows_7_links" + pattern="enterprise" + locale=$(getLanguage "$lang" "code") + ;; + "win7x86-ultimate" ) + platform="x86" + url+="windows_7_links" + pattern="ultimate" + locale=$(getLanguage "$lang" "code") + ;; + "winvistax64" | "winvistax64-enterprise" ) + url+="windows_vista_links" + pattern="enterprise" + locale=$(getLanguage "$lang" "code") + ;; + "winvistax64-ultimate" ) + url+="windows_vista_links" + pattern="sp2" + locale=$(getLanguage "$lang" "code") + ;; + "winvistax86" | "winvistax86-enterprise" ) + platform="x86" + url+="windows_vista_links" + pattern="enterprise" + locale=$(getLanguage "$lang" "code") + ;; + "winvistax86-ultimate" ) + platform="x86" + url+="windows_vista_links" + pattern="sp2" + locale=$(getLanguage "$lang" "code") + ;; + "winxpx86" ) + platform="x86" + url+="windows_xp_links" + pattern="xp" + locale=$(getLanguage "$lang" "code") + [[ "$locale" == "pt" ]] && locale="pt-br" + [[ "$locale" == "pp" ]] && locale="pt-pt" + [[ "$locale" == "cn" ]] && locale="zh-hans" + [[ "$locale" == "hk" ]] && locale="zh-hk" + [[ "$locale" == "tw" ]] && locale="zh-tw" + ;; + "winxpx64" ) + url+="windows_xp_links" + pattern="xp" + locale=$(getLanguage "$lang" "code") + ;; + esac + + else + + case "${version,,}" in + "win11${PLATFORM,,}" | "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) + url+="windows_arm_links" + pattern="11_business" + ;; + "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) + url+="windows_arm_links" + pattern="11_iot_enterprise_ltsc" + ;; + "win10${PLATFORM,,}" | "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) + url+="windows_arm_links" + pattern="Pro_10" + locale="$language" + [[ "$locale" == "Chinese" ]] && locale="ChnSimp" + [[ "$locale" == "Chinese HK" ]] && locale="ChnTrad" + [[ "$locale" == "Chinese TW" ]] && locale="ChnTrad" + ;; + "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + url+="windows_arm_links" + pattern="10_iot_enterprise_ltsc" + ;; + esac + + fi + + local body="" + + [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" + body=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { + handle_curl_error "$?" "Massgrave" + return $? + } + + local list="" + list=$(echo "$body" | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i '\.iso$') + + local result="" + result=$(echo "$list" | grep -i "${platform}" | grep "${pattern}" | grep -i -m 1 "${locale,,}_") + + if [ -z "$result" ]; then + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + error "No download in the $language language available for $desc!" + else + error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." + fi + return 1 + fi + + MG_URL="$result" + return 0 +} + getESD() { local dir="$1" @@ -712,6 +922,31 @@ downloadImage() { done + if isMG "$version" "$lang"; then + + if [[ "$tried" != "n" ]]; then + info "Failed to download $desc, will try a diferent method now..." + fi + + tried="y" + success="n" + + if getMG "$version" "$lang" "$desc"; then + success="y" + else + info "$msg" && html "$msg" && sleep "$delay" + getMG "$version" "$lang" "$desc" && success="y" + fi + + if [[ "$success" == "y" ]]; then + downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 + info "$msg" && html "$msg" && sleep "$delay" + downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 + rm -f "$iso" + fi + + fi + return 1 } From a4fdfbdf91de0cb4fbf5e2e4c5f4a29280738cf5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 26 Nov 2024 20:16:47 +0100 Subject: [PATCH 310/505] chore(deps): update qemux/qemu-docker docker tag to v6.10 (#929) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 80619ee..b4c062d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.09 / / +COPY --from=qemux/qemu-docker:6.10 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 9654a945fbd86db5a2f94f0bab1213b09e33e367 Mon Sep 17 00:00:00 2001 From: Kilian von Pflugk <github@jumoog.io> Date: Sun, 1 Dec 2024 16:07:23 +0000 Subject: [PATCH 311/505] docs: Add TUN device (#940) --- compose.yml | 1 + kubernetes.yml | 97 ++++++++++++++++++++++++++------------------------ readme.md | 3 +- 3 files changed, 53 insertions(+), 48 deletions(-) diff --git a/compose.yml b/compose.yml index 9d0134b..f305849 100644 --- a/compose.yml +++ b/compose.yml @@ -6,6 +6,7 @@ services: VERSION: "11" devices: - /dev/kvm + - /dev/net/tun cap_add: - NET_ADMIN ports: diff --git a/kubernetes.yml b/kubernetes.yml index efa668d..2de24a4 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -1,10 +1,11 @@ +--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: windows-pvc spec: accessModes: - - ReadWriteOnce + - ReadWriteOnce resources: requests: storage: 64Gi @@ -16,59 +17,61 @@ metadata: labels: name: windows spec: - terminationGracePeriodSeconds: 120 # the Kubernetes default is 30 seconds and it may be not enough containers: - - name: windows - image: dockurr/windows - ports: - - containerPort: 8006 - protocol: TCP - - containerPort: 3389 - protocol: TCP - - containerPort: 3389 - protocol: UDP - securityContext: - privileged: true - env: - - name: VERSION - value: "11" - - name: RAM_SIZE - value: "4G" - - name: CPU_CORES - value: "2" - - name: DISK_SIZE - value: "64G" - volumeMounts: - - mountPath: /storage - name: storage - - mountPath: /dev/kvm - name: dev-kvm + - name: windows + image: dockurr/windows + env: + - name: VERSION + value: "11" + - name: RAM_SIZE + value: "4G" + - name: CPU_CORES + value: "2" + - name: DISK_SIZE + value: "64G" + ports: + - containerPort: 8006 + - containerPort: 3389 + - containerPort: 3389 + protocol: UDP + securityContext: + capabilities: + add: + - NET_ADMIN + privileged: true + volumeMounts: + - mountPath: /storage + name: storage + - mountPath: /dev/kvm + name: dev-kvm + - mountPath: /dev/net/tun + name: dev-tun + terminationGracePeriodSeconds: 120 volumes: - - name: storage - persistentVolumeClaim: - claimName: windows-pvc - - name: dev-kvm - hostPath: - path: /dev/kvm + - name: storage + persistentVolumeClaim: + claimName: windows-pvc + - hostPath: + path: /dev/kvm + name: dev-kvm + - hostPath: + path: /dev/net/tun + type: CharDevice + name: dev-tun --- apiVersion: v1 kind: Service metadata: name: windows spec: - type: NodePort + ports: + - name: tcp-8006 + port: 8006 + - name: tcp-3389 + port: 3389 + - name: udp-3389 + port: 3389 + protocol: UDP selector: name: windows - ports: - - name: tcp-8006 - protocol: TCP - port: 8006 - targetPort: 8006 - - name: tcp-3389 - protocol: TCP - port: 3389 - targetPort: 3389 - - name: udp-3389 - protocol: UDP - port: 3389 - targetPort: 3389 + type: NodePort diff --git a/readme.md b/readme.md index f8f8b95..2416bdf 100644 --- a/readme.md +++ b/readme.md @@ -37,6 +37,7 @@ services: VERSION: "11" devices: - /dev/kvm + - /dev/net/tun cap_add: - NET_ADMIN ports: @@ -49,7 +50,7 @@ services: Via Docker CLI: ```bash -docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows +docker run -it --rm -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows ``` Via Kubernetes: From 1f0cdc9bd14a05ce93f974a39473241feec9f65b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 3 Dec 2024 12:12:47 +0100 Subject: [PATCH 312/505] build: Update qemu-docker to v6.11 (#946) --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index b4c062d..4a9c7a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.10 / / +COPY --from=qemux/qemu-docker:6.11 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" @@ -29,7 +29,6 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 From c82725ec615fd3ec9358239e75fbd39a4fc45d2d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 6 Dec 2024 11:19:42 +0100 Subject: [PATCH 313/505] docs: Readme (#958) --- readme.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 2416bdf..e63e2a9 100644 --- a/readme.md +++ b/readme.md @@ -177,7 +177,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I run a script after installation? - To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). Then bind that folder in your compose file like this: + To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). + + Then bind that folder in your compose file like this: ```yaml volumes: From 6825b6a45a50513e44599cb42ce223991ad96b33 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:43:37 +0100 Subject: [PATCH 314/505] fix: Update download links (#980) --- Dockerfile | 4 ++-- src/define.sh | 7 +++++-- src/mido.sh | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4a9c7a3..3f6da48 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.11 / / +COPY --from=qemux/qemu-docker:6.12 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" @@ -29,7 +29,7 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.44-0/virtio-win-1.9.44.tar.xz /drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} diff --git a/src/define.sh b/src/define.sh index ef93d41..a245248 100644 --- a/src/define.sh +++ b/src/define.sh @@ -502,7 +502,10 @@ fromFile() { local file="${1,,}" local arch="${PLATFORM,,}" - case "${file// /_}" in + file="${file//-/_}" + file="${file// /_}" + + case "$file" in *"_x64_"* | *"_x64."*) arch="x64" ;; @@ -517,7 +520,7 @@ fromFile() { local add="" [[ "$arch" != "x64" ]] && add="$arch" - case "${file// /_}" in + case "$file" in "win7"* | "win_7"* | *"windows7"* | *"windows_7"* ) id="win7${arch}" ;; diff --git a/src/mido.sh b/src/mido.sh index 4804390..e03c9f5 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -620,10 +620,11 @@ getMG() { } local list="" - list=$(echo "$body" | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i '\.iso$') + list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(text(), '.iso')]" - 2>/dev/null) local result="" result=$(echo "$list" | grep -i "${platform}" | grep "${pattern}" | grep -i -m 1 "${locale,,}_") + result=$(echo "$result" | sed -r 's/.*href="([^"]+).*/\1/g') if [ -z "$result" ]; then if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then From 57193b0f59f8ccb1037fda6b0b5bebc6f7be7ca0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 20 Dec 2024 18:32:26 +0100 Subject: [PATCH 315/505] fix: Follow download redirects (#981) --- src/mido.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/mido.sh b/src/mido.sh index e03c9f5..12c7709 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -635,6 +635,21 @@ getMG() { return 1 fi + local domain="buzzheavier.com" + + if [[ "$result" = *"$domain"* ]]; then + result=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$result" --head --proto =https --tlsv1.2 --http1.1 -- "$result/download") || { + handle_curl_error "$?" "$domain" + return $? + } + result=$(echo "$result" | grep -i -m 1 "hx-redirect:") + if [ -z "$result" ]; then + error "Failed to extract redirect location! Please report this at $SUPPORT/issues." + return 1 + fi + result="https://${domain}${result:13}" + fi + MG_URL="$result" return 0 } From 1081855571c1d45e3bb4cf512ab2c087e82816be Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 6 Jan 2025 19:26:45 +0100 Subject: [PATCH 316/505] feat: Update download links (#996) --- src/mido.sh | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index 12c7709..7c6112b 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -613,7 +613,7 @@ getMG() { local body="" - [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" + [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing product page: ${url}" body=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { handle_curl_error "$?" "Massgrave" return $? @@ -625,8 +625,9 @@ getMG() { local result="" result=$(echo "$list" | grep -i "${platform}" | grep "${pattern}" | grep -i -m 1 "${locale,,}_") result=$(echo "$result" | sed -r 's/.*href="([^"]+).*/\1/g') + local page="$result" - if [ -z "$result" ]; then + if [ -z "$page" ]; then if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $desc!" else @@ -635,22 +636,33 @@ getMG() { return 1 fi - local domain="buzzheavier.com" + [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${page}" + result=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --head --proto =https --tlsv1.2 --http1.1 -- "$page") || { + handle_curl_error "$?" "Massgrave" + return $? + } - if [[ "$result" = *"$domain"* ]]; then - result=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$result" --head --proto =https --tlsv1.2 --http1.1 -- "$result/download") || { - handle_curl_error "$?" "$domain" + if [[ "${result,,}" == *"content-type: text"* ]]; then + body=$(curl --silent --max-time 30 --user-agent "$user_agent" --referer "$url" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$page") || { + handle_curl_error "$?" "Massgrave" return $? } - result=$(echo "$result" | grep -i -m 1 "hx-redirect:") - if [ -z "$result" ]; then - error "Failed to extract redirect location! Please report this at $SUPPORT/issues." + + list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(@href, '.iso')]" - 2>/dev/null) + list=$(echo "$list" | sed -r 's/.*href="([^"]+).*/\1/g') + page=$(echo "$list" | sed 's/&amp;/\&/g;') + + if [ -z "$page" ]; then + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + error "No download in the $language language available for $desc!" + else + error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." + fi return 1 fi - result="https://${domain}${result:13}" fi - MG_URL="$result" + MG_URL="$page" return 0 } From 28f6e9c76b932124bb4ad3c7ff7d77cff4f45d3a Mon Sep 17 00:00:00 2001 From: James Nguyen <143449216+james-nguyen-ai@users.noreply.github.com> Date: Wed, 8 Jan 2025 06:38:51 -0800 Subject: [PATCH 317/505] feat: Allow symlinks in shared folder (#1001) --- src/samba.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/samba.sh b/src/samba.sh index 3137d05..7ef3d5a 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -71,6 +71,9 @@ addShare() { echo " guest account = nobody" echo " map to guest = Bad User" echo " server min protocol = NT1" + echo " follow symlinks = yes" + echo " wide links = yes" + echo " unix extensions = no" echo "" echo " # disable printing services" echo " load printers = no" From d9c7983bb5c203ec60cebc00fbfd50117f2d3d01 Mon Sep 17 00:00:00 2001 From: ncheng89 <48044818+ncheng89@users.noreply.github.com> Date: Wed, 8 Jan 2025 22:55:17 +0800 Subject: [PATCH 318/505] feat: Support more shared directories (#987) * Support more shared directories Control the sharing of more directories through environment variables instead of hard-coding more shared directories --- src/samba.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/samba.sh b/src/samba.sh index 7ef3d5a..e2c12c9 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -92,6 +92,13 @@ addShare "$share" "Data" "Shared" || error "Failed to create shared folder!" [ -d "/data2" ] && addShare "/data2" "Data2" "Shared" [ -d "/data3" ] && addShare "/data3" "Data3" "Shared" +IFS=',' read -r -a dirs <<< "${SHARES:-}" +for dir in "${dirs[@]}"; do + [ ! -d "$dir" ] && continue + dir_name=$(basename "$dir") + addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" +done + if ! smbd; then error "Samba daemon failed to start!" smbd -i --debug-stdout || true From bca8cb6817ae5a68004b90250a42327f31fffe25 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 Jan 2025 23:45:30 +0100 Subject: [PATCH 319/505] build: Update qemu-docker to v6.13 (#1010) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3f6da48..b3eedfb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.12 / / +COPY --from=qemux/qemu-docker:6.13 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From d86731dc2499705d080266901ad4eed017ef5266 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Feb 2025 02:12:20 +0100 Subject: [PATCH 320/505] chore(deps): update qemux/qemu-docker docker tag to v6.14 (#1024) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b3eedfb..ad2c890 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.13 / / +COPY --from=qemux/qemu-docker:6.14 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From c0f5cca574c4319c65c87557c068e434d100e120 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 10 Feb 2025 00:26:49 +0100 Subject: [PATCH 321/505] docs: Add restart policy (#1028) --- readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.md b/readme.md index e63e2a9..f14237d 100644 --- a/readme.md +++ b/readme.md @@ -44,6 +44,7 @@ services: - 8006:8006 - 3389:3389/tcp - 3389:3389/udp + restart: always stop_grace_period: 2m ``` From faa7c58366c53fab1aff9b648c87fc2de5b34955 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 15 Feb 2025 04:49:24 +0100 Subject: [PATCH 322/505] fix: Download links (#1035) --- Dockerfile | 2 +- src/define.sh | 76 +------------- src/install.sh | 7 +- src/mido.sh | 270 +------------------------------------------------ 4 files changed, 11 insertions(+), 344 deletions(-) diff --git a/Dockerfile b/Dockerfile index ad2c890..afab12b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.14 / / +COPY --from=qemux/qemu-docker:6.15 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/define.sh b/src/define.sh index a245248..32ce96b 100644 --- a/src/define.sh +++ b/src/define.sh @@ -5,6 +5,7 @@ set -Eeuo pipefail : "${HEIGHT:=""}" : "${VERIFY:=""}" : "${REGION:=""}" +: "${EDITION:=""}" : "${MANUAL:=""}" : "${REMOVE:=""}" : "${VERSION:=""}" @@ -1110,66 +1111,12 @@ isESD() { return 1 } -isMG() { - - local id="$1" - local lang="$2" - - case "${id,,}" in - "win11${PLATFORM,,}" ) - return 0 - ;; - "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) - return 0 - ;; - "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) - return 0 - ;; - "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) - return 0 - ;; - "win10${PLATFORM,,}" ) - return 0 - ;; - "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) - return 0 - ;; - "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - return 0 - ;; - "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) - return 0 - ;; - "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) - return 0 - ;; - "win2025" | "win2025-eval" | "win2022" | "win2022-eval" | "win2019" | "win2019-eval" ) - return 0 - ;; - "win2016" | "win2016-eval" | "win2012r2" | "win2012r2-eval" | "win2008r2" | "win2008r2-eval" ) - return 0 - ;; - "win7x64" | "win7x64-enterprise" | "win7x64-ultimate" | "win7x86" | "win7x86-enterprise" | "win7x86-ultimate" ) - return 0 - ;; - "winvistax64" | "winvistax64-enterprise" | "winvistax64-ultimate" | "winvistax86" | "winvistax86-enterprise" | "winvistax86-ultimate" ) - return 0 - ;; - "winxpx86" | "winxpx64" ) - return 0 - ;; - esac - - return 1 -} - validVersion() { local id="$1" local lang="$2" local url - isMG "$id" "$lang" && return 0 isESD "$id" "$lang" && return 0 isMido "$id" "$lang" && return 0 @@ -1207,27 +1154,6 @@ addFolder() { return 0 } -migrateFiles() { - - local base="$1" - local version="$2" - local file="" - - [ -f "$base" ] && return 0 - - [[ "${version,,}" == "tiny10" ]] && file="tiny10_x64_23h2.iso" - [[ "${version,,}" == "tiny11" ]] && file="tiny11_2311_x64.iso" - [[ "${version,,}" == "core11" ]] && file="tiny11_core_x64_beta_1.iso" - [[ "${version,,}" == "winxpx86" ]] && file="en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" - [[ "${version,,}" == "winvistax64" ]] && file="en_windows_vista_sp2_x64_dvd_342267.iso" - [[ "${version,,}" == "win7x64" ]] && file="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" - - [ ! -f "$STORAGE/$file" ] && return 0 - mv -f "$STORAGE/$file" "$base" || return 1 - - return 0 -} - prepareInstall() { local dir="$2" diff --git a/src/install.sh b/src/install.sh index e22b99e..fcbf8ef 100644 --- a/src/install.sh +++ b/src/install.sh @@ -76,8 +76,6 @@ startInstall() { BOOT="$STORAGE/$file" - ! migrateFiles "$BOOT" "$VERSION" && error "Migration failed!" && exit 57 - fi skipInstall "$BOOT" && return 1 @@ -668,6 +666,11 @@ updateXML() { sed -z "s/<AdministratorPassword>...............<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" fi + if [ -n "$EDITION" ]; then + [[ "${EDITION^^}" == "CORE" ]] && EDITION="STANDARDCORE" + sed -i "s/SERVERSTANDARD<\/Value>/SERVER${EDITION^^}<\/Value>/g" "$asset" + fi + return 0 } diff --git a/src/mido.sh b/src/mido.sh index 7c6112b..4f81618 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -242,10 +242,10 @@ download_windows_eval() { [[ "$DEBUG" == [Yy1]* ]] && echo "Getting download link.." - if [[ "$enterprise_type" == "iot" ]]; then - filter="https://go.microsoft.com/fwlink/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" - else - filter="https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" + filter="https://go.microsoft.com/fwlink/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country,,}" + + if ! echo "$iso_download_page_html" | grep -io "$filter" > /dev/null; then + filter="https://go.microsoft.com/fwlink/p/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country,,}" fi iso_download_links=$(echo "$iso_download_page_html" | grep -io "$filter") || { @@ -429,243 +429,6 @@ getCatalog() { return 0 } -getMG() { - - local version="$1" - local lang="$2" - local desc="$3" - - local locale="" - local culture="" - local language="" - local user_agent="" - - user_agent=$(get_agent) - language=$(getLanguage "$lang" "desc") - culture=$(getLanguage "$lang" "culture") - - local msg="Requesting download link from massgrave.dev..." - info "$msg" && html "$msg" - - local pattern="" - local locale="${culture,,}" - local platform="${PLATFORM,,}" - local url="https://massgrave.dev/" - - if [[ "${PLATFORM,,}" != "arm64" ]]; then - - case "${version,,}" in - "win11${PLATFORM,,}" ) - url+="windows_11_links" - pattern="consumer" - ;; - "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) - url+="windows_11_links" - pattern="business" - ;; - "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) - url+="windows_ltsc_links" - pattern="11_enterprise_ltsc" - ;; - "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) - url+="windows_ltsc_links" - pattern="11_iot" - ;; - "win10${PLATFORM,,}" ) - url+="windows_10_links" - pattern="consumer" - ;; - "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) - url+="windows_10_links" - pattern="business" - ;; - "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - url+="windows_ltsc_links" - pattern="10_enterprise_ltsc" - ;; - "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) - url+="windows_ltsc_links" - pattern="10_iot" - ;; - "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) - url+="windows_8.1_links" - pattern="8.1_enterprise" - locale=$(getLanguage "$lang" "code") - [[ "$locale" == "sr" ]] && locale="sr-latn" - ;; - "win2025" | "win2025-eval" ) - url+="windows_server_links" - pattern="server_2025" - ;; - "win2022" | "win2022-eval" ) - url+="windows_server_links" - pattern="server_2022" - ;; - "win2019" | "win2019-eval" ) - url+="windows_server_links" - pattern="server_2019" - ;; - "win2016" | "win2016-eval" ) - url+="windows_server_links" - pattern="server_2016" - locale=$(getLanguage "$lang" "code") - [[ "$locale" == "hk" ]] && locale="ct" - [[ "$locale" == "tw" ]] && locale="ct" - ;; - "win2012r2" | "win2012r2-eval" ) - url+="windows_server_links" - pattern="server_2012_r2" - locale=$(getLanguage "$lang" "code") - ;; - "win2008r2" | "win2008r2-eval" ) - url+="windows_server_links" - pattern="server_2008_r2" - locale=$(getLanguage "$lang" "code") - ;; - "win7x64" | "win7x64-enterprise" ) - url+="windows_7_links" - pattern="enterprise" - locale=$(getLanguage "$lang" "code") - ;; - "win7x64-ultimate" ) - url+="windows_7_links" - pattern="ultimate" - locale=$(getLanguage "$lang" "code") - ;; - "win7x86" | "win7x86-enterprise" ) - platform="x86" - url+="windows_7_links" - pattern="enterprise" - locale=$(getLanguage "$lang" "code") - ;; - "win7x86-ultimate" ) - platform="x86" - url+="windows_7_links" - pattern="ultimate" - locale=$(getLanguage "$lang" "code") - ;; - "winvistax64" | "winvistax64-enterprise" ) - url+="windows_vista_links" - pattern="enterprise" - locale=$(getLanguage "$lang" "code") - ;; - "winvistax64-ultimate" ) - url+="windows_vista_links" - pattern="sp2" - locale=$(getLanguage "$lang" "code") - ;; - "winvistax86" | "winvistax86-enterprise" ) - platform="x86" - url+="windows_vista_links" - pattern="enterprise" - locale=$(getLanguage "$lang" "code") - ;; - "winvistax86-ultimate" ) - platform="x86" - url+="windows_vista_links" - pattern="sp2" - locale=$(getLanguage "$lang" "code") - ;; - "winxpx86" ) - platform="x86" - url+="windows_xp_links" - pattern="xp" - locale=$(getLanguage "$lang" "code") - [[ "$locale" == "pt" ]] && locale="pt-br" - [[ "$locale" == "pp" ]] && locale="pt-pt" - [[ "$locale" == "cn" ]] && locale="zh-hans" - [[ "$locale" == "hk" ]] && locale="zh-hk" - [[ "$locale" == "tw" ]] && locale="zh-tw" - ;; - "winxpx64" ) - url+="windows_xp_links" - pattern="xp" - locale=$(getLanguage "$lang" "code") - ;; - esac - - else - - case "${version,,}" in - "win11${PLATFORM,,}" | "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) - url+="windows_arm_links" - pattern="11_business" - ;; - "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) - url+="windows_arm_links" - pattern="11_iot_enterprise_ltsc" - ;; - "win10${PLATFORM,,}" | "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) - url+="windows_arm_links" - pattern="Pro_10" - locale="$language" - [[ "$locale" == "Chinese" ]] && locale="ChnSimp" - [[ "$locale" == "Chinese HK" ]] && locale="ChnTrad" - [[ "$locale" == "Chinese TW" ]] && locale="ChnTrad" - ;; - "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - url+="windows_arm_links" - pattern="10_iot_enterprise_ltsc" - ;; - esac - - fi - - local body="" - - [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing product page: ${url}" - body=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { - handle_curl_error "$?" "Massgrave" - return $? - } - - local list="" - list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(text(), '.iso')]" - 2>/dev/null) - - local result="" - result=$(echo "$list" | grep -i "${platform}" | grep "${pattern}" | grep -i -m 1 "${locale,,}_") - result=$(echo "$result" | sed -r 's/.*href="([^"]+).*/\1/g') - local page="$result" - - if [ -z "$page" ]; then - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then - error "No download in the $language language available for $desc!" - else - error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." - fi - return 1 - fi - - [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${page}" - result=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --head --proto =https --tlsv1.2 --http1.1 -- "$page") || { - handle_curl_error "$?" "Massgrave" - return $? - } - - if [[ "${result,,}" == *"content-type: text"* ]]; then - body=$(curl --silent --max-time 30 --user-agent "$user_agent" --referer "$url" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$page") || { - handle_curl_error "$?" "Massgrave" - return $? - } - - list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(@href, '.iso')]" - 2>/dev/null) - list=$(echo "$list" | sed -r 's/.*href="([^"]+).*/\1/g') - page=$(echo "$list" | sed 's/&amp;/\&/g;') - - if [ -z "$page" ]; then - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then - error "No download in the $language language available for $desc!" - else - error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." - fi - return 1 - fi - fi - - MG_URL="$page" - return 0 -} - getESD() { local dir="$1" @@ -950,31 +713,6 @@ downloadImage() { done - if isMG "$version" "$lang"; then - - if [[ "$tried" != "n" ]]; then - info "Failed to download $desc, will try a diferent method now..." - fi - - tried="y" - success="n" - - if getMG "$version" "$lang" "$desc"; then - success="y" - else - info "$msg" && html "$msg" && sleep "$delay" - getMG "$version" "$lang" "$desc" && success="y" - fi - - if [[ "$success" == "y" ]]; then - downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 - info "$msg" && html "$msg" && sleep "$delay" - downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 - rm -f "$iso" - fi - - fi - return 1 } From e6d7495bace8cd7526a8768b3a49dd4c2bdcf473 Mon Sep 17 00:00:00 2001 From: krzysiuu1998 <54783272+krzysiuu1998@users.noreply.github.com> Date: Mon, 17 Feb 2025 09:07:25 +0100 Subject: [PATCH 323/505] fix: Update compose.yml (#1040) --- compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/compose.yml b/compose.yml index f305849..c6721b2 100644 --- a/compose.yml +++ b/compose.yml @@ -13,4 +13,5 @@ services: - 8006:8006 - 3389:3389/tcp - 3389:3389/udp + restart: always stop_grace_period: 2m From 61d7e0d3beb06e9ddf71ffb16fc00299f154f0b0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 17 Feb 2025 18:59:40 +0100 Subject: [PATCH 324/505] feat: Fallback to Windows 11 if version unknown (#1042) --- src/define.sh | 2 ++ src/install.sh | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/define.sh b/src/define.sh index 32ce96b..b4d040a 100644 --- a/src/define.sh +++ b/src/define.sh @@ -593,7 +593,9 @@ fromName() { *"windows 7"* ) id="win7${arch}" ;; *"windows 8"* ) id="win81${arch}" ;; *"windows 10"* ) id="win10${arch}" ;; + *"optimum 10"* ) id="win10${arch}" ;; *"windows 11"* ) id="win11${arch}" ;; + *"optimum 11"* ) id="win11${arch}" ;; *"windows vista"* ) id="winvista${arch}" ;; *"server 2025"* ) id="win2025${add}" ;; *"server 2022"* ) id="win2022${add}" ;; diff --git a/src/install.sh b/src/install.sh index fcbf8ef..7f10eec 100644 --- a/src/install.sh +++ b/src/install.sh @@ -680,8 +680,13 @@ addDriver() { local path="$2" local target="$3" local driver="$4" + local desc="" local folder="" + if [ -z "$id" ]; then + warn "no Windows version specified for \"$driver\" driver!" && return 0 + fi + case "${id,,}" in "win7x86"* ) folder="w7/x86" ;; "win7x64"* ) folder="w7/amd64" ;; @@ -701,7 +706,8 @@ addDriver() { esac if [ -z "$folder" ]; then - warn "no \"$driver\" driver found for \"$DETECTED\" !" && return 0 + desc=$(printVersion "$id" "$id") + warn "no \"$driver\" driver available for \"$desc\" !" && return 0 fi [ ! -d "$path/$driver/$folder" ] && return 0 @@ -734,6 +740,11 @@ addDrivers() { local msg="Adding drivers to image..." info "$msg" && html "$msg" + if [ -z "$version" ]; then + version="win11x64" + warn "Windows version unknown, falling back to Windows 11 drivers..." + fi + if ! bsdtar -xf /drivers.txz -C "$drivers"; then error "Failed to extract drivers from archive!" && return 1 fi From b57d34e11edb6ce306b29664b6adccc564aa8fcd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 22 Feb 2025 09:53:17 +0100 Subject: [PATCH 325/505] fix: Update download links (#1051) --- src/define.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/define.sh b/src/define.sh index b4d040a..0af6df7 100644 --- a/src/define.sh +++ b/src/define.sh @@ -695,16 +695,16 @@ getMido() { sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" ;; "win11x64-enterprise-eval" ) - size=6209064960 - sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c" + size=4295096320 + sum="dad633276073f14f3e0373ef7e787569e216d54942ce522b39451c8f2d38ad43" ;; "win11x64-enterprise-ltsc-eval" ) - size=4428627968 - sum="8abf91c9cd408368dc73aab3425d5e3c02dae74900742072eb5c750fc637c195" + size=5060020224 + sum="2cee70bd183df42b92a2e0da08cc2bb7a2a9ce3a3841955a012c0f77aeb3cb29" ;; "win11x64-enterprise-iot-eval" ) - size=4428627968 - sum="8abf91c9cd408368dc73aab3425d5e3c02dae74900742072eb5c750fc637c195" + size=5060020224 + sum="2cee70bd183df42b92a2e0da08cc2bb7a2a9ce3a3841955a012c0f77aeb3cb29" ;; "win10x64" ) size=6140975104 From d799079040b7e65dd64d055aaa80daa23f5b835c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 22 Feb 2025 10:02:48 +0100 Subject: [PATCH 326/505] docs: Readme (#1052) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index f14237d..4d37b40 100644 --- a/readme.md +++ b/readme.md @@ -98,8 +98,8 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | **Value** | **Version** | **Size** | |---|---|---| | `11` | Windows 11 Pro | 5.4 GB | - | `11l` | Windows 11 LTSC | 4.2 GB | - | `11e` | Windows 11 Enterprise | 5.8 GB | + | `11l` | Windows 11 LTSC | 4.7 GB | + | `11e` | Windows 11 Enterprise | 4.0 GB | |||| | `10` | Windows 10 Pro | 5.7 GB | | `10l` | Windows 10 LTSC | 4.6 GB | From 32b92cc03aad0aa0588716a6a3535f6cc04aec7d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 24 Feb 2025 04:15:49 +0100 Subject: [PATCH 327/505] fix: Update download links (#1053) --- Dockerfile | 2 +- src/define.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index afab12b..ae25a43 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.15 / / +COPY --from=qemux/qemu-docker:6.16 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/define.sh b/src/define.sh index 0af6df7..c2ce5b3 100644 --- a/src/define.sh +++ b/src/define.sh @@ -773,9 +773,9 @@ getLink1() { case "${id,,}" in "win11x64" | "win11x64-enterprise" | "win11x64-enterprise-eval" ) - size=5946128384 - sum="5bb1459034f50766ee480d895d751af73a4af30814240ae32ebc5633546a5af7" - url="11/en-us_windows_11_23h2_x64.iso" + size=5332989952 + sum="aa1ad990f930d907b7a34ea897abbb0dfbe47552ca8acc146f92e40381839e05" + url="11/en-us_windows_11_24h2_x64.iso" ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 From 06434c02f4bd0de122d4218c3986429bcb892fa9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 04:16:07 +0100 Subject: [PATCH 328/505] chore(deps): update qemux/qemu-docker docker tag to v6.16 (#1054) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 009c2c7deb93b11a7c3e9ff48ba0c9b0e41918fa Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 25 Feb 2025 06:05:42 +0100 Subject: [PATCH 329/505] build: Update qemu-docker to v6.17 (#1056) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ae25a43..4cbfad6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.16 / / +COPY --from=qemux/qemu-docker:6.17 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 63a9d10a27a1d61975c82cbcdaa52375b315f635 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 25 Feb 2025 15:15:48 +0100 Subject: [PATCH 330/505] feat: Make app name configurable (#1058) --- src/entry.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/entry.sh b/src/entry.sh index b037cdc..be6335a 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -1,10 +1,9 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${APP:="Windows"}" : "${BOOT_MODE:="windows"}" - -APP="Windows" -SUPPORT="https://github.com/dockur/windows" +: "${SUPPORT:="https://github.com/dockur/windows"}" cd /run From c9482fe3f0ded155e79b138ef9217a0f33b286a3 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 26 Feb 2025 22:55:28 +0100 Subject: [PATCH 331/505] build: Update qemu-docker to v6.18 (#1065) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4cbfad6..b794e82 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.17 / / +COPY --from=qemux/qemu:6.18 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 5ae6ecbe8562120bc7194fbc64e6a4f302bf0b4c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 26 Feb 2025 23:15:13 +0100 Subject: [PATCH 332/505] feat: Update download links (#1066) --- src/define.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index c2ce5b3..98a63c1 100644 --- a/src/define.sh +++ b/src/define.sh @@ -790,8 +790,8 @@ getLink1() { url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) - size=5623582720 - sum="57371545d752a79a8a8b163b209c7028915da661de83516e06ddae913290a855" + size=5535252480 + sum="557871965263d0fd0a1ea50b5d0d0d7cb04a279148ca905c1c675c9bc0d5486c" url="10/en-us_windows_10_22h2_x64.iso" ;; "win10x64-iot" | "win10x64-enterprise-iot-eval" ) From e16af78828b0f9cf72972d455a6a9d36d3366065 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 28 Feb 2025 04:07:57 +0100 Subject: [PATCH 333/505] feat: Check path to custom .iso (#1069) --- src/install.sh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index 7f10eec..c1ed86a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -200,10 +200,16 @@ abortInstall() { detectCustom() { local file base + local fname="custom.iso" + CUSTOM="" - file=$(find / -maxdepth 1 -type f -iname custom.iso | head -n 1) - [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso | head -n 1) + if [ -d "/$fname" ]; then + error "The file /$fname has an invalid path!" && return 1 + fi + + file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1) + [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$fname" | head -n 1) if [ ! -s "$file" ] && [[ "${VERSION,,}" != "http"* ]]; then base=$(basename "$VERSION") @@ -487,6 +493,10 @@ setXML() { local file="/custom.xml" + if [ -d "$file" ]; then + warn "The file $file has an invalid path!" + fi + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" From 2296e3dbfa7b529b22d3559fbefda554ef163ac6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 1 Mar 2025 14:00:16 +0100 Subject: [PATCH 334/505] docs: Clarify environment variables (#1072) --- readme.md | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/readme.md b/readme.md index 4d37b40..b357415 100644 --- a/readme.md +++ b/readme.md @@ -146,7 +146,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I share files with the host? - Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. Double-click it and it will show a folder called `Data`, which can be bound to any folder on your host via the compose file: + Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. + + Double-click it and it will show a folder called `Data`, which can be bound to any folder on your host via the compose file: ```yaml volumes: @@ -160,7 +162,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I install a custom image? - In order to download an unsupported ISO image that is not selectable from the list above, specify the URL of that ISO in the `VERSION` environment variable, for example: + In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable: ```yaml environment: @@ -174,7 +176,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas - /home/user/example.iso:/custom.iso ``` - Replace the example path `/home/user/example.iso` with the filename of your desired ISO file, the value of `VERSION` will be ignored in this case. + Replace the example path `/home/user/example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. ### How do I run a script after installation? @@ -214,9 +216,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I configure the username and password? - By default, a user called `Docker` is created during the installation, with an empty password. + By default, a user called `Docker` (with an empty password) is created during installation. - If you want to use different credentials, you can change them in your compose file: + If you want to use different credentials, you can configure them (only BEFORE installation) in your compose file: ```yaml environment: @@ -226,7 +228,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I select the Windows language? - By default, the English version of Windows will be downloaded. But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: + By default, the English version of Windows will be downloaded. + + But before installation you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: ```yaml environment: @@ -237,7 +241,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I select the keyboard layout? - If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: + If you want to use a keyboard layout or locale that is not the default for your selected language, before installation you can add `KEYBOARD` and `REGION` variables like this: ```yaml environment: @@ -245,10 +249,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas KEYBOARD: "en-US" ``` -> [!NOTE] -> Changing these values will have no effect after the installation has been performed already. Use the control panel inside Windows in that case. -> - ### How do I connect using RDP? The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. @@ -298,7 +298,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas After configuring the container for [macvlan](#how-do-i-assign-an-individual-ip-address-to-the-container), it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC. - To enable this mode, add the following lines to your compose file: + To enable this mode, in which the container and Windows will have separate IP addresses, add the following lines to your compose file: ```yaml environment: @@ -309,9 +309,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas - 'c *:* rwm' ``` -> [!NOTE] -> In this mode, the container and Windows will each have their own separate IPs. - ### How do I add multiple disks? To create additional disks, modify your compose file like this: @@ -348,8 +345,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas - /dev/bus/usb ``` -> [!IMPORTANT] -> If the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. + If the device is a USB disk drive, please wait until after the installation is fully completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. ### How do I verify if my system supports KVM? From d5b891f4fb196fa86bf24c88ab6ce979ecf5691f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 3 Mar 2025 12:33:38 +0100 Subject: [PATCH 335/505] build: Update qemu-docker to v6.19 (#1076) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b794e82..c535474 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:6.18 / / +COPY --from=qemux/qemu:6.19 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 974d087466ce7626955dbebfa1bc16a5948e60e5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 3 Mar 2025 12:34:10 +0100 Subject: [PATCH 336/505] docs: Readme (#1077) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index b357415..14fa7ef 100644 --- a/readme.md +++ b/readme.md @@ -189,7 +189,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas - /home/user/example:/oem ``` - The example folder `/home/user/example` will be copied to `C:\OEM` during installation and the containing `install.bat` will be executed during the last step. + The example folder `/home/user/example` will be copied to `C:\OEM` and the containing `install.bat` will be executed during the last step of the automatic installation. ### How do I perform a manual installation? From 22d318a9b414d9f588047d4281b7ac26e5686112 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 4 Mar 2025 15:57:44 +0100 Subject: [PATCH 337/505] fix: Samba permissions (#1082) --- Dockerfile | 2 +- src/samba.sh | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c535474..3cafbd5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:6.19 / / +COPY --from=qemux/qemu:6.20 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/samba.sh b/src/samba.sh index e2c12c9..bdf232b 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -99,6 +99,10 @@ for dir in "${dirs[@]}"; do addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" done +# Fix Samba permissions +[ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock +[ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores + if ! smbd; then error "Samba daemon failed to start!" smbd -i --debug-stdout || true From 3cf95f2a0eca0e82ca7f64d0ccba955d4f53b6a7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 5 Mar 2025 05:32:25 +0100 Subject: [PATCH 338/505] feat: Remove migrations (#1083) --- src/install.sh | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/src/install.sh b/src/install.sh index c1ed86a..953653e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1012,40 +1012,6 @@ bootWindows() { return 0 fi - # Migrations - - [[ "${PLATFORM,,}" != "x64" ]] && return 0 - - if [ -f "$STORAGE/windows.old" ]; then - MACHINE=$(<"$STORAGE/windows.old") - [ -z "$MACHINE" ] && MACHINE="q35" - BOOT_MODE="windows_legacy" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" - return 0 - fi - - local creation="1.10" - local minimal="2.14" - - if [ -f "$STORAGE/windows.ver" ]; then - creation=$(<"$STORAGE/windows.ver") - [[ "${creation}" != *"."* ]] && creation="$minimal" - fi - - # Force secure boot on installs created prior to v2.14 - if (( $(echo "$creation < $minimal" | bc -l) )); then - if [[ "${BOOT_MODE,,}" == "windows" ]]; then - BOOT_MODE="windows_secure" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" - if [ -f "$STORAGE/windows.rom" ] && [ ! -f "$STORAGE/$BOOT_MODE.rom" ]; then - mv -f "$STORAGE/windows.rom" "$STORAGE/$BOOT_MODE.rom" - fi - if [ -f "$STORAGE/windows.vars" ] && [ ! -f "$STORAGE/$BOOT_MODE.vars" ]; then - mv -f "$STORAGE/windows.vars" "$STORAGE/$BOOT_MODE.vars" - fi - fi - fi - return 0 } From 8be35e16d7f7351bf0f53c61f8bb181a45566476 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 5 Mar 2025 06:19:25 +0100 Subject: [PATCH 339/505] fix: Remove broken links (#1084) --- src/define.sh | 13 +------------ src/install.sh | 8 ++++---- src/mido.sh | 49 +------------------------------------------------ 3 files changed, 6 insertions(+), 64 deletions(-) diff --git a/src/define.sh b/src/define.sh index 98a63c1..1be1d9e 100644 --- a/src/define.sh +++ b/src/define.sh @@ -59,7 +59,7 @@ parseVersion() { VERSION="win81x64" ;; "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" ) - VERSION="win81x64-enterprise-eval" + VERSION="win81x64-enterprise" ;; "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" ) VERSION="win7x64" @@ -665,9 +665,6 @@ switchEdition() { "win10${PLATFORM,,}-enterprise-eval" ) DETECTED="win10${PLATFORM,,}-enterprise" ;; - "win81${PLATFORM,,}-enterprise-eval" ) - DETECTED="win81${PLATFORM,,}-enterprise" - ;; "win2025-eval" ) DETECTED="win2025" ;; "win2022-eval" ) DETECTED="win2022" ;; "win2019-eval" ) DETECTED="win2019" ;; @@ -718,10 +715,6 @@ getMido() { size=4898582528 sum="e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5" ;; - "win81x64-enterprise-eval" ) - size=3961473024 - sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" - ;; "win2025-eval" ) size=5307996160 sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" @@ -742,10 +735,6 @@ getMido() { size=4542291968 sum="6612b5b1f53e845aacdf96e974bb119a3d9b4dcb5b82e65804ab7e534dc7b4d5" ;; - "win2008r2" ) - size=3166840832 - sum="30832ad76ccfa4ce48ccb936edefe02079d42fb1da32201bf9e3a880c8ed6312" - ;; esac case "${ret,,}" in diff --git a/src/install.sh b/src/install.sh index 953653e..2a322be 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1006,10 +1006,10 @@ bootWindows() { if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") - if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && MACHINE=$(<"$STORAGE/windows.old") - fi - return 0 + fi + + if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then + [[ "${PLATFORM,,}" == "x64" ]] && MACHINE=$(<"$STORAGE/windows.old") fi return 0 diff --git a/src/mido.sh b/src/mido.sh index 4f81618..19d1257 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -310,7 +310,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -338,56 +338,9 @@ getWindows() { "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) - ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac - if [[ "${PLATFORM,,}" != "x64" ]]; then - MIDO_URL="" - return 1 - fi - - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then - MIDO_URL="" - return 1 - fi - - case "${version,,}" in - "win81${PLATFORM,,}-enterprise"* ) - MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" - return 0 - ;; - "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) - MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENT_IOT_LTSC_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2025-eval" ) - MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2022-eval" ) - MIDO_URL="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2019-eval" ) - MIDO_URL="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" - return 0 - ;; - "win2016-eval" ) - MIDO_URL="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO" - return 0 - ;; - "win2012r2-eval" ) - MIDO_URL="https://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO" - return 0 - ;; - "win2008r2" ) - MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" - return 0 - ;; - esac - MIDO_URL="" return 1 } From 57ab7eb84f84b60c7a6a968deeaefc1149602484 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 5 Mar 2025 06:51:35 +0100 Subject: [PATCH 340/505] fix: Update download links (#1085) --- src/define.sh | 13 ++++++++++++- src/mido.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index 1be1d9e..98a63c1 100644 --- a/src/define.sh +++ b/src/define.sh @@ -59,7 +59,7 @@ parseVersion() { VERSION="win81x64" ;; "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" ) - VERSION="win81x64-enterprise" + VERSION="win81x64-enterprise-eval" ;; "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" ) VERSION="win7x64" @@ -665,6 +665,9 @@ switchEdition() { "win10${PLATFORM,,}-enterprise-eval" ) DETECTED="win10${PLATFORM,,}-enterprise" ;; + "win81${PLATFORM,,}-enterprise-eval" ) + DETECTED="win81${PLATFORM,,}-enterprise" + ;; "win2025-eval" ) DETECTED="win2025" ;; "win2022-eval" ) DETECTED="win2022" ;; "win2019-eval" ) DETECTED="win2019" ;; @@ -715,6 +718,10 @@ getMido() { size=4898582528 sum="e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5" ;; + "win81x64-enterprise-eval" ) + size=3961473024 + sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" + ;; "win2025-eval" ) size=5307996160 sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" @@ -735,6 +742,10 @@ getMido() { size=4542291968 sum="6612b5b1f53e845aacdf96e974bb119a3d9b4dcb5b82e65804ab7e534dc7b4d5" ;; + "win2008r2" ) + size=3166840832 + sum="30832ad76ccfa4ce48ccb936edefe02079d42fb1da32201bf9e3a880c8ed6312" + ;; esac case "${ret,,}" in diff --git a/src/mido.sh b/src/mido.sh index 19d1257..4f81618 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -310,7 +310,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -338,9 +338,56 @@ getWindows() { "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; + "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) + ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac + if [[ "${PLATFORM,,}" != "x64" ]]; then + MIDO_URL="" + return 1 + fi + + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + MIDO_URL="" + return 1 + fi + + case "${version,,}" in + "win81${PLATFORM,,}-enterprise"* ) + MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" + return 0 + ;; + "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENT_IOT_LTSC_EVAL_x64FRE_en-us.iso" + return 0 + ;; + "win2025-eval" ) + MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" + return 0 + ;; + "win2022-eval" ) + MIDO_URL="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" + return 0 + ;; + "win2019-eval" ) + MIDO_URL="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" + return 0 + ;; + "win2016-eval" ) + MIDO_URL="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO" + return 0 + ;; + "win2012r2-eval" ) + MIDO_URL="https://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO" + return 0 + ;; + "win2008r2" ) + MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" + return 0 + ;; + esac + MIDO_URL="" return 1 } From f7a086a8d4f915d4a55b2d220a9bb29e260b6ee9 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 5 Mar 2025 09:24:05 +0100 Subject: [PATCH 341/505] feat: Additional download mirrors (#1086) --- assets/win7x64-enterprise-eval.xml | 283 +++++++++++++++++++++++++++++ src/define.sh | 35 +++- src/mido.sh | 53 +----- 3 files changed, 314 insertions(+), 57 deletions(-) create mode 100644 assets/win7x64-enterprise-eval.xml diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml new file mode 100644 index 0000000..fdfd002 --- /dev/null +++ b/assets/win7x64-enterprise-eval.xml @@ -0,0 +1,283 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + <TypeID>0x27</TypeID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows 7 Enterprise</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/src/define.sh b/src/define.sh index 98a63c1..1af0585 100644 --- a/src/define.sh +++ b/src/define.sh @@ -63,7 +63,7 @@ parseVersion() { ;; "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" ) VERSION="win7x64" - [ -z "$DETECTED" ] && DETECTED="win7x64-enterprise" + [ -z "$DETECTED" ] && DETECTED="win7x64-enterprise-eval" ;; "7u" | "win7u" | "windows7u" | "windows 7u" ) VERSION="win7x64-ultimate" @@ -624,6 +624,7 @@ getVersion() { *" home"* ) id="$id-home" ;; *" starter"* ) id="$id-starter" ;; *" ultimate"* ) id="$id-ultimate" ;; + *" enterprise evaluation"* ) id="$id-enterprise-eval" ;; *" enterprise"* ) id="$id-enterprise" ;; esac ;; @@ -668,6 +669,9 @@ switchEdition() { "win81${PLATFORM,,}-enterprise-eval" ) DETECTED="win81${PLATFORM,,}-enterprise" ;; + "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise-eval" ) + DETECTED="win7${PLATFORM,,}-enterprise" + ;; "win2025-eval" ) DETECTED="win2025" ;; "win2022-eval" ) DETECTED="win2022" ;; "win2019-eval" ) DETECTED="win2019" ;; @@ -684,6 +688,7 @@ getMido() { local id="$1" local lang="$2" local ret="$3" + local url="" local sum="" local size="" @@ -697,14 +702,12 @@ getMido() { "win11x64-enterprise-eval" ) size=4295096320 sum="dad633276073f14f3e0373ef7e787569e216d54942ce522b39451c8f2d38ad43" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENTENTERPRISEEVAL_OEMRET_A64FRE_en-us.iso" ;; - "win11x64-enterprise-ltsc-eval" ) - size=5060020224 - sum="2cee70bd183df42b92a2e0da08cc2bb7a2a9ce3a3841955a012c0f77aeb3cb29" - ;; - "win11x64-enterprise-iot-eval" ) + "win11x64-enterprise-iot-eval" | "win11x64-enterprise-ltsc-eval" ) size=5060020224 sum="2cee70bd183df42b92a2e0da08cc2bb7a2a9ce3a3841955a012c0f77aeb3cb29" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENT_IOT_LTSC_EVAL_x64FRE_en-us.iso" ;; "win10x64" ) size=6140975104 @@ -713,45 +716,59 @@ getMido() { "win10x64-enterprise-eval" ) size=5550497792 sum="ef7312733a9f5d7d51cfa04ac497671995674ca5e1058d5164d6028f0938d668" + url="https://software-static.download.prss.microsoft.com/dbazure/988969d5-f34g-4e03-ac9d-1f9786c66750/19045.2006.220908-0225.22h2_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso" ;; "win10x64-enterprise-ltsc-eval" ) size=4898582528 sum="e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5" + url="https://software-download.microsoft.com/download/pr/19044.1288.211006-0501.21h2_release_svc_refresh_CLIENT_LTSC_EVAL_x64FRE_en-us.iso" ;; "win81x64-enterprise-eval" ) size=3961473024 sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" + url="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" + ;; + "win7x64" | "win7x64-enterprise-eval" ) + size=3121248256 + sum="2c16c73388a5c02a0ec4cd8b9e5c14ba28b7b45d13d0c9c7d44459feecc0385f" + url="http://care.dlservice.microsoft.com/dl/download/evalx/win7/x64/EN/7600.16385.090713-1255_x64fre_enterprise_en-us_EVAL_Eval_Enterprise-GRMCENXEVAL_EN_DVD.iso" ;; "win2025-eval" ) size=5307996160 sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" ;; "win2022-eval" ) size=5044094976 sum="3e4fa6d8507b554856fc9ca6079cc402df11a8b79344871669f0251535255325" + url="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" ;; "win2019-eval" ) size=5652088832 sum="6dae072e7f78f4ccab74a45341de0d6e2d45c39be25f1f5920a2ab4f51d7bcbb" + url="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" ;; "win2016-eval" ) size=6972221440 sum="1ce702a578a3cb1ac3d14873980838590f06d5b7101c5daaccbac9d73f1fb50f" + url="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO" ;; "win2012r2-eval" ) size=4542291968 sum="6612b5b1f53e845aacdf96e974bb119a3d9b4dcb5b82e65804ab7e534dc7b4d5" + url="https://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO" ;; "win2008r2" ) size=3166840832 sum="30832ad76ccfa4ce48ccb936edefe02079d42fb1da32201bf9e3a880c8ed6312" + url="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" ;; esac case "${ret,,}" in "sum" ) echo "$sum" ;; "size" ) echo "$size" ;; - *) echo "";; + *) echo "$url";; esac return 0 @@ -844,7 +861,7 @@ getLink1() { sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" url="server/2008r2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601-018.iso" ;; - "win7x64" | "win7x64-enterprise" ) + "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) size=3182604288 sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" url="7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" @@ -928,7 +945,7 @@ getLink2() { sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" url="Windows%20Server%202008%20R2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso" ;; - "win7x64" | "win7x64-enterprise" ) + "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) size=3182604288 sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" url="Windows%207/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" diff --git a/src/mido.sh b/src/mido.sh index 4f81618..7fed9c4 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -310,7 +310,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + "win2008r2" | "win7${PLATFORM,,}"* | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -338,58 +338,15 @@ getWindows() { "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) + "win7${PLATFORM,,}"* | "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac - if [[ "${PLATFORM,,}" != "x64" ]]; then - MIDO_URL="" - return 1 - fi + MIDO_URL=$(getMido "$version" "$lang" "") + [ -z "$MIDO_URL" ] && return 1 - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then - MIDO_URL="" - return 1 - fi - - case "${version,,}" in - "win81${PLATFORM,,}-enterprise"* ) - MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" - return 0 - ;; - "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) - MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENT_IOT_LTSC_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2025-eval" ) - MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2022-eval" ) - MIDO_URL="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2019-eval" ) - MIDO_URL="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" - return 0 - ;; - "win2016-eval" ) - MIDO_URL="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO" - return 0 - ;; - "win2012r2-eval" ) - MIDO_URL="https://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO" - return 0 - ;; - "win2008r2" ) - MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" - return 0 - ;; - esac - - MIDO_URL="" - return 1 + return 0 } getCatalog() { From 9cad3f09940c8913f1331bbb3fcd39e004844d00 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 5 Mar 2025 11:04:23 +0100 Subject: [PATCH 342/505] fix: Update Windows Server 2025 download link (#1088) --- readme.md | 2 +- src/define.sh | 6 +++--- src/mido.sh | 8 +++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/readme.md b/readme.md index 14fa7ef..ef9edfa 100644 --- a/readme.md +++ b/readme.md @@ -110,7 +110,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | `ve` | Windows Vista Enterprise | 3.0 GB | | `xp` | Windows XP Professional | 0.6 GB | |||| - | `2025` | Windows Server 2025 | 5.0 GB | + | `2025` | Windows Server 2025 | 5.6 GB | | `2022` | Windows Server 2022 | 4.7 GB | | `2019` | Windows Server 2019 | 5.3 GB | | `2016` | Windows Server 2016 | 6.5 GB | diff --git a/src/define.sh b/src/define.sh index 1af0585..8607ed2 100644 --- a/src/define.sh +++ b/src/define.sh @@ -734,9 +734,9 @@ getMido() { url="http://care.dlservice.microsoft.com/dl/download/evalx/win7/x64/EN/7600.16385.090713-1255_x64fre_enterprise_en-us_EVAL_Eval_Enterprise-GRMCENXEVAL_EN_DVD.iso" ;; "win2025-eval" ) - size=5307996160 - sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" - url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" + size=6014152704 + sum="d0ef4502e350e3c6c53c15b1b3020d38a5ded011bf04998e950720ac8579b23d" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1742.240906-0331.ge_release_svc_refresh_SERVER_EVAL_x64FRE_en-us.iso" ;; "win2022-eval" ) size=5044094976 diff --git a/src/mido.sh b/src/mido.sh index 7fed9c4..9e62f25 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -476,7 +476,9 @@ verifyFile() { local check="$4" if [ -n "$size" ] && [[ "$total" != "$size" ]] && [[ "$size" != "0" ]]; then - warn "The downloaded file has an unexpected size: $total bytes, while expected value was: $size bytes. Please report this at $SUPPORT/issues" + if [[ "$VERIFY" == [Yy1]* ]] || [[ "$DEBUG" == [Yy1]* ]]; then + warn "The downloaded file has a different size ( $total bytes) than expected ( $size bytes). Please report this at $SUPPORT/issues" + fi fi local hash="" @@ -499,7 +501,7 @@ verifyFile() { info "Succesfully verified ISO!" && return 0 fi - error "The downloaded file has an invalid $algo checksum: $hash , while expected value was: $check. Please report this at $SUPPORT/issues" + error "The downloaded file has an unknown $algo checksum: $hash , as the expected value was: $check. Please report this at $SUPPORT/issues" return 1 } @@ -558,7 +560,7 @@ downloadFile() { msg="Failed to download $url" (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 (( rc == 4 )) && error "$msg , network failure!" && return 1 - (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 + (( rc == 8 )) && error "$msg , server issued an error response! Please report this at $SUPPORT/issues." && return 1 error "$msg , reason: $rc" return 1 From b8105e9072ff599599a84f80cbc1ee5399c9c2e2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 6 Mar 2025 10:27:59 +0100 Subject: [PATCH 343/505] fix: Samba permissions (#1091) --- src/samba.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/src/samba.sh b/src/samba.sh index bdf232b..7105a89 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -102,6 +102,7 @@ done # Fix Samba permissions [ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock [ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores +[ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock if ! smbd; then error "Samba daemon failed to start!" From 186b2e21ce6c6bd7c6da51708016c451403e3d98 Mon Sep 17 00:00:00 2001 From: Francois Liot <francois@liot.org> Date: Fri, 7 Mar 2025 00:44:47 +0100 Subject: [PATCH 344/505] docs: Kubernetes deployment (#1092) --- kubernetes.yml | 131 +++++++++++++++++++++++++++++-------------------- 1 file changed, 79 insertions(+), 52 deletions(-) diff --git a/kubernetes.yml b/kubernetes.yml index 2de24a4..0b247df 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -10,68 +10,95 @@ spec: requests: storage: 64Gi --- -apiVersion: v1 -kind: Pod +apiVersion: apps/v1 +kind: Deployment metadata: name: windows labels: name: windows spec: - containers: - - name: windows - image: dockurr/windows - env: - - name: VERSION - value: "11" - - name: RAM_SIZE - value: "4G" - - name: CPU_CORES - value: "2" - - name: DISK_SIZE - value: "64G" - ports: - - containerPort: 8006 - - containerPort: 3389 - - containerPort: 3389 - protocol: UDP - securityContext: - capabilities: - add: - - NET_ADMIN - privileged: true - volumeMounts: - - mountPath: /storage - name: storage - - mountPath: /dev/kvm - name: dev-kvm - - mountPath: /dev/net/tun - name: dev-tun - terminationGracePeriodSeconds: 120 - volumes: - - name: storage - persistentVolumeClaim: - claimName: windows-pvc - - hostPath: - path: /dev/kvm - name: dev-kvm - - hostPath: - path: /dev/net/tun - type: CharDevice - name: dev-tun + replicas: 1 + selector: + matchLabels: + app: windows + template: + metadata: + labels: + app: windows + spec: + containers: + - name: windows + image: dockurr/windows + env: + - name: VERSION + value: "11" + - name: RAM_SIZE + value: "4G" + - name: CPU_CORES + value: "2" + - name: DISK_SIZE + value: "64G" + ports: + - containerPort: 8006 + name: http + protocol: TCP + - containerPort: 3389 + name: rdp + protocol: TCP + - containerPort: 3389 + name: udp + protocol: UDP + - containerPort: 5900 + name: vnc + protocol: TCP + securityContext: + capabilities: + add: + - NET_ADMIN + privileged: true + volumeMounts: + - mountPath: /storage + name: storage + - mountPath: /dev/kvm + name: dev-kvm + - mountPath: /dev/net/tun + name: dev-tun + terminationGracePeriodSeconds: 120 + volumes: + - name: storage + persistentVolumeClaim: + claimName: windows-pvc + - hostPath: + path: /dev/kvm + name: dev-kvm + - hostPath: + path: /dev/net/tun + type: CharDevice + name: dev-tun --- apiVersion: v1 kind: Service metadata: name: windows spec: + internalTrafficPolicy: Cluster ports: - - name: tcp-8006 - port: 8006 - - name: tcp-3389 - port: 3389 - - name: udp-3389 - port: 3389 - protocol: UDP + - name: http + port: 8006 + protocol: TCP + targetPort: 8006 + - name: rdp + port: 3389 + protocol: TCP + targetPort: 3389 + - name: udp + port: 3389 + protocol: UDP + targetPort: 3389 + - name: vnc + port: 5900 + protocol: TCP + targetPort: 5900 selector: - name: windows - type: NodePort + app: windows + type: ClusterIP From 5fac3fa33ec929d7fe83312c5232bcfc1cbcb340 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 11 Mar 2025 20:42:41 +0100 Subject: [PATCH 345/505] feat: Install driver during specialization phase (#1099) --- Dockerfile | 2 +- assets/win11x64-enterprise-eval.xml | 12 ++++++------ assets/win11x64-enterprise.xml | 13 ++++++------- assets/win11x64-iot.xml | 12 ++++++------ assets/win11x64-ltsc.xml | 12 ++++++------ assets/win11x64.xml | 12 ++++++------ assets/win2025-eval.xml | 12 ++++++------ assets/win2025.xml | 12 ++++++------ src/define.sh | 2 -- 9 files changed, 43 insertions(+), 46 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3cafbd5..826680d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,7 +29,7 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.44-0/virtio-win-1.9.44.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.45-0/virtio-win-1.9.45.tar.xz /drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index b8c3cbf..034fd6a 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -264,6 +264,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>26</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -443,16 +448,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index fc8562a..284e510 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -267,6 +267,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>26</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -446,16 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -463,4 +463,3 @@ </component> </settings> </unattend> - diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 0de7bb4..46c8bd7 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -267,6 +267,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>26</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -446,16 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 8e42eb6..4d56000 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -267,6 +267,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>26</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -446,16 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 3130bb4..fe14705 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -267,6 +267,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>26</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -446,16 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 9d90c77..ebeb7a5 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -159,6 +159,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -337,16 +342,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index 7e543a2..6ac67e4 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -162,6 +162,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -340,16 +345,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/src/define.sh b/src/define.sh index 8607ed2..89ce2cc 100644 --- a/src/define.sh +++ b/src/define.sh @@ -795,13 +795,11 @@ getLink1() { url="11/en-us_windows_11_24h2_x64.iso" ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" From 454cd8db680811eb7b4a78d4c7f10e077a00d3c6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 12 Mar 2025 12:02:31 +0100 Subject: [PATCH 346/505] docs: Use relative paths (#1102) --- compose.yml | 2 ++ kubernetes.yml | 4 ---- readme.md | 24 +++++++++++++----------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/compose.yml b/compose.yml index c6721b2..e5b6257 100644 --- a/compose.yml +++ b/compose.yml @@ -13,5 +13,7 @@ services: - 8006:8006 - 3389:3389/tcp - 3389:3389/udp + volumes: + - ./windows:/storage restart: always stop_grace_period: 2m diff --git a/kubernetes.yml b/kubernetes.yml index 0b247df..fa8eef0 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -32,10 +32,6 @@ spec: env: - name: VERSION value: "11" - - name: RAM_SIZE - value: "4G" - - name: CPU_CORES - value: "2" - name: DISK_SIZE value: "64G" ports: diff --git a/readme.md b/readme.md index ef9edfa..ec47ff1 100644 --- a/readme.md +++ b/readme.md @@ -44,6 +44,8 @@ services: - 8006:8006 - 3389:3389/tcp - 3389:3389/udp + volumes: + - ./windows:/storage restart: always stop_grace_period: 2m ``` @@ -51,7 +53,7 @@ services: Via Docker CLI: ```bash -docker run -it --rm -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows ``` Via Kubernetes: @@ -127,10 +129,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ```yaml volumes: - - /var/win:/storage + - ./windows:/storage ``` - Replace the example path `/var/win` with the desired storage folder. + Replace the example path `./windows` with the desired storage folder or named volume. ### How do I change the size of the disk? @@ -152,10 +154,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ```yaml volumes: - - /home/user/example:/data + - ./example:/data ``` - The example folder `/home/user/example` will be available as ` \\host.lan\Data`. + The example folder `./example` will be available as ` \\host.lan\Data`. > [!TIP] > You can map this path to a drive letter in Windows, for easier access. @@ -173,10 +175,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ```yaml volumes: - - /home/user/example.iso:/custom.iso + - ./example.iso:/custom.iso ``` - Replace the example path `/home/user/example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. + Replace the example path `./example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. ### How do I run a script after installation? @@ -186,10 +188,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ```yaml volumes: - - /home/user/example:/oem + - ./example:/oem ``` - The example folder `/home/user/example` will be copied to `C:\OEM` and the containing `install.bat` will be executed during the last step of the automatic installation. + The example folder `./example` will be copied to `C:\OEM` and the containing `install.bat` will be executed during the last step of the automatic installation. ### How do I perform a manual installation? @@ -318,8 +320,8 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas DISK2_SIZE: "32G" DISK3_SIZE: "64G" volumes: - - /home/example:/storage2 - - /mnt/data/example:/storage3 + - ./example2:/storage2 + - ./example3:/storage3 ``` ### How do I pass-through a disk? From 64ddb6d774ee0efe1bc492bd684af101fb44e3de Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Mar 2025 21:59:37 +0100 Subject: [PATCH 347/505] build: Update qemu-docker to v6.21 (#1107) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 826680d..70201a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:6.20 / / +COPY --from=qemux/qemu:6.21 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From b465f7864663d23c9c872b5f72fa8be158e2a332 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 13 Mar 2025 01:59:04 +0100 Subject: [PATCH 348/505] docs: Readme (#1108) --- readme.md | 83 +++++++++++++++++++++++++++---------------------------- 1 file changed, 41 insertions(+), 42 deletions(-) diff --git a/readme.md b/readme.md index ec47ff1..f50fc66 100644 --- a/readme.md +++ b/readme.md @@ -162,48 +162,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas > [!TIP] > You can map this path to a drive letter in Windows, for easier access. -### How do I install a custom image? - - In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable: - - ```yaml - environment: - VERSION: "https://example.com/win.iso" - ``` - - Alternatively, you can also skip the download and use a local file instead, by binding it in your compose file in this way: - - ```yaml - volumes: - - ./example.iso:/custom.iso - ``` - - Replace the example path `./example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. - -### How do I run a script after installation? - - To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). - - Then bind that folder in your compose file like this: - - ```yaml - volumes: - - ./example:/oem - ``` - - The example folder `./example` will be copied to `C:\OEM` and the containing `install.bat` will be executed during the last step of the automatic installation. - -### How do I perform a manual installation? - - It's best to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment. - - However, if you insist on performing the installation manually, add the following environment variable to your compose file: - - ```yaml - environment: - MANUAL: "Y" - ``` - ### How do I change the amount of CPU or RAM? By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM. @@ -250,6 +208,47 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas REGION: "en-US" KEYBOARD: "en-US" ``` +### How do I install a custom image? + + In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable: + + ```yaml + environment: + VERSION: "https://example.com/win.iso" + ``` + + Alternatively, you can also skip the download and use a local file instead, by binding it in your compose file in this way: + + ```yaml + volumes: + - ./example.iso:/custom.iso + ``` + + Replace the example path `./example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. + +### How do I run a script after installation? + + To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). + + Then bind that folder in your compose file like this: + + ```yaml + volumes: + - ./example:/oem + ``` + + The example folder `./example` will be copied to `C:\OEM` and the containing `install.bat` will be executed during the last step of the automatic installation. + +### How do I perform a manual installation? + + It's recommended to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment. + + However, if you insist on performing the installation manually on your own risk, add the following environment variable to your compose file: + + ```yaml + environment: + MANUAL: "Y" + ``` ### How do I connect using RDP? From 5ab42e940920cf12b5a3571b4d28ea3a884c1ad8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 13 Mar 2025 12:55:36 +0100 Subject: [PATCH 349/505] feat: Allow product key configuration (#1110) --- readme.md | 14 +++++++-- src/define.sh | 82 +++++++++++++++----------------------------------- src/install.sh | 5 +++ 3 files changed, 42 insertions(+), 59 deletions(-) diff --git a/readme.md b/readme.md index f50fc66..edb7f66 100644 --- a/readme.md +++ b/readme.md @@ -178,7 +178,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas By default, a user called `Docker` (with an empty password) is created during installation. - If you want to use different credentials, you can configure them (only BEFORE installation) in your compose file: + If you want to use different credentials, you can configure them in your compose file (only before installation): ```yaml environment: @@ -201,13 +201,23 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I select the keyboard layout? - If you want to use a keyboard layout or locale that is not the default for your selected language, before installation you can add `KEYBOARD` and `REGION` variables like this: + If you want to use a keyboard layout or locale that is not the default for your selected language, you can add `KEYBOARD` and `REGION` variables like this (before installation): ```yaml environment: REGION: "en-US" KEYBOARD: "en-US" ``` + +### How do I set the product key? + + By default, an evaluation version of Windows will be installed, but if you have product key you can add a `KEY` variable like this (before installation): + + ```yaml + environment: + KEY: "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" + ``` + ### How do I install a custom image? In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable: diff --git a/src/define.sh b/src/define.sh index 89ce2cc..04cdf82 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${KEY:=""}" : "${WIDTH:=""}" : "${HEIGHT:=""}" : "${VERIFY:=""}" @@ -1175,9 +1176,7 @@ prepareInstall() { local dir="$2" local desc="$3" - local arch="$4" - local key="$5" - local driver="$6" + local driver="$4" local drivers="/tmp/drivers" rm -rf "$drivers" @@ -1196,7 +1195,8 @@ prepareInstall() { error "Failed to extract drivers!" && return 1 fi - local target + local arch target + [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" [[ "${arch,,}" == "x86" ]] && target="$dir/I386" || target="$dir/AMD64" if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then @@ -1282,6 +1282,24 @@ prepareInstall() { [ -n "$PASSWORD" ] && password="$PASSWORD" [ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') + if [[ "${driver,,}" == "xp" ]]; then + if [[ "${arch,,}" == "x86" ]]; then + # Windows XP Professional x86 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + else + # Windows XP Professional x64 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + fi + else + if [[ "${arch,,}" == "x86" ]]; then + # Windows Server 2003 Standard x86 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" + else + # Windows Server 2003 Standard x64 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" + fi + fi + find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; { echo "[Data]" @@ -1319,7 +1337,7 @@ prepareInstall() { echo " FullName=\"$username\"" echo " ComputerName=\"*\"" echo " OrgName=\"Windows for Docker\"" - echo " ProductKey=$key" + echo " ProductKey=$KEY" echo "" echo "[Identification]" echo " JoinWorkgroup = WORKGROUP" @@ -1465,56 +1483,6 @@ prepareInstall() { return 0 } -prepare2k3() { - - local iso="$1" - local dir="$2" - local desc="$3" - local driver="2k3" - local arch key - - [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" - - if [[ "${arch,,}" == "x86" ]]; then - # Windows Server 2003 Standard x86 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" - else - # Windows Server 2003 Standard x64 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" - fi - - prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" || return 1 - - return 0 -} - -prepareXP() { - - local iso="$1" - local dir="$2" - local desc="$3" - local driver="xp" - local arch key - - [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" - - if [[ "${arch,,}" == "x86" ]]; then - # Windows XP Professional x86 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - else - # Windows XP Professional x64 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" - fi - - prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" || return 1 - - return 0 -} - prepareLegacy() { local iso="$1" @@ -1601,11 +1569,11 @@ setMachine() { "win2k"* ) ETFS="[BOOT]/Boot-NoEmul.img" ;; "winxp"* ) - if ! prepareXP "$iso" "$dir" "$desc"; then + if ! prepareInstall "$iso" "$dir" "$desc" "xp"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; "win2003"* ) - if ! prepare2k3 "$iso" "$dir" "$desc"; then + if ! prepareInstall "$iso" "$dir" "$desc" "2k3"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; esac diff --git a/src/install.sh b/src/install.sh index 2a322be..003b302 100644 --- a/src/install.sh +++ b/src/install.sh @@ -681,6 +681,11 @@ updateXML() { sed -i "s/SERVERSTANDARD<\/Value>/SERVER${EDITION^^}<\/Value>/g" "$asset" fi + if [ -n "$KEY" ]; then + sed -i '/<ProductKey>/,/<\/ProductKey>/d' "$asset" + sed -i "s/<\/UserData>/ <ProductKey>\n <Key>${KEY}<\/Key>\n <WillShowUI>OnError<\/WillShowUI>\n <\/ProductKey>\n <\/UserData>/g" "$asset" + fi + return 0 } From e58f21c33db5b0b615ab60ac4a702e6be9507d12 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Mar 2025 12:57:00 +0100 Subject: [PATCH 350/505] build: Update qemu-docker to v6.22 (#1113) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 70201a3..ae17da2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:6.21 / / +COPY --from=qemux/qemu:6.22 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 8ec6945b545826b826db59996d60ff3c11b70b7e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 14 Mar 2025 14:00:33 +0100 Subject: [PATCH 351/505] feat: Add Hyper-V Server 2019 (#1114) --- assets/win2019-hv.xml | 341 ++++++++++++++++++++++++++++++++++++++++++ readme.md | 13 +- src/define.sh | 29 +++- src/mido.sh | 5 +- 4 files changed, 380 insertions(+), 8 deletions(-) create mode 100644 assets/win2019-hv.xml diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml new file mode 100644 index 0000000..3ce3690 --- /dev/null +++ b/assets/win2019-hv.xml @@ -0,0 +1,341 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Hyper-V Server 2019 SERVERHYPERCORE</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/readme.md b/readme.md index edb7f66..9492054 100644 --- a/readme.md +++ b/readme.md @@ -211,11 +211,20 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I set the product key? - By default, an evaluation version of Windows will be installed, but if you have product key you can add a `KEY` variable like this (before installation): + By default, an evaluation version of Windows will be installed, but if you have a product key you can add a `KEY` variable like this (before installation): ```yaml environment: - KEY: "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" + KEY: "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" + ``` + +### How do I select the edition? + + Windows Server offers a minimalistic Core edition without a GUI. To select those non-standard editions, you can add a `EDITION` variable like this (before installation): + + ```yaml + environment: + EDITION: "core" ``` ### How do I install a custom image? diff --git a/src/define.sh b/src/define.sh index 04cdf82..1b70ad0 100644 --- a/src/define.sh +++ b/src/define.sh @@ -102,6 +102,9 @@ parseVersion() { "16" | "2016" | "win16" | "win2016" | "windows2016" | "windows 2016" ) VERSION="win2016-eval" ;; + "hv" | "hyperv" | "hyper v" | "hyper-v" | "19hv" | "2019hv" | "win2019hv") + VERSION="win2019-hv" + ;; "2012" | "2012r2" | "win2012" | "win2012r2" | "windows2012" | "windows 2012" ) VERSION="win2012r2-eval" ;; @@ -418,6 +421,7 @@ printVersion() { "win95"* ) desc="Windows 95" ;; "win2k"* ) desc="Windows 2000" ;; "winvista"* ) desc="Windows Vista" ;; + "win2019-hv"* ) desc="Hyper-V Server" ;; "win2003"* ) desc="Windows Server 2003" ;; "win2008"* ) desc="Windows Server 2008" ;; "win2012"* ) desc="Windows Server 2012" ;; @@ -462,6 +466,9 @@ printEdition() { *"-education" ) edition="Education" ;; + *"-hv" ) + edition="2019" + ;; *"-iot" | *"-iot-eval" ) edition="LTSC" ;; @@ -483,11 +490,12 @@ printEdition() { "winvista"* ) edition="Business" ;; - "win2025"* | "win2022"* | "win2019"* | "win2016"* ) - edition="Standard" - ;; - "win2012"* | "win2008"* | "win2003"* ) - edition="Standard" + "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* | "win2003"* ) + case "${EDITION^^}" in + *"DATACENTER"* ) edition="Datacenter" ;; + "CORE" | "STANDARDCORE" ) edition="Core" ;; + * ) edition="Standard" ;; + esac ;; esac @@ -550,6 +558,9 @@ fromFile() { "tiny10"* | "tiny_10"* ) id="tiny10" ;; + *"_serverhypercore_"* ) + id="win2019${add}-hv" + ;; *"server2025"* | *"server_2025"* ) id="win2025${add}" ;; @@ -605,6 +616,7 @@ fromName() { *"server 2012"* ) id="win2012r2${add}" ;; *"server 2008"* ) id="win2008r2${add}" ;; *"server 2003"* ) id="win2003r2${add}" ;; + *"hyper-v server"* ) id="win2019${add}" ;; esac echo "$id" @@ -648,6 +660,7 @@ getVersion() { "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* | "win2003"* ) case "${name,,}" in *" evaluation"* ) id="$id-eval" ;; + *"hyper-v server"* ) id="$id-hv" ;; esac ;; esac @@ -749,6 +762,11 @@ getMido() { sum="6dae072e7f78f4ccab74a45341de0d6e2d45c39be25f1f5920a2ab4f51d7bcbb" url="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" ;; + "win2019-hv" ) + size=3072712704 + sum="48e9b944518e5bbc80876a9a7ff99716f386f404f4be48dca47e16a66ae7872c" + url="https://software-download.microsoft.com/download/pr/17763.557.190612-0019.rs5_release_svc_refresh_SERVERHYPERCORE_OEM_x64FRE_en-us.ISO" + ;; "win2016-eval" ) size=6972221440 sum="1ce702a578a3cb1ac3d14873980838590f06d5b7101c5daaccbac9d73f1fb50f" @@ -1282,6 +1300,7 @@ prepareInstall() { [ -n "$PASSWORD" ] && password="$PASSWORD" [ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') + # These are not pirated keys, they come from the official MS documentation. if [[ "${driver,,}" == "xp" ]]; then if [[ "${arch,,}" == "x86" ]]; then # Windows XP Professional x86 generic key (no activation, trial-only) diff --git a/src/mido.sh b/src/mido.sh index 9e62f25..df6d147 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -208,6 +208,9 @@ download_windows_eval() { "win2022-eval" ) enterprise_type="server" windows_version="windows-server-2022" ;; + "win2019-hv" ) + enterprise_type="server" + windows_version="hyper-v-server-2019" ;; "win2019-eval" ) enterprise_type="server" windows_version="windows-server-2019" ;; @@ -335,7 +338,7 @@ getWindows() { "win11${PLATFORM,,}-enterprise"* | "win10${PLATFORM,,}-enterprise"* ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) + "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2019-hv" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; "win7${PLATFORM,,}"* | "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) From 777af02ed41701ab144cf9662c4cfb372f73b755 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 15 Mar 2025 14:25:11 +0100 Subject: [PATCH 352/505] fix: Format filesizes (#1116) --- Dockerfile | 2 +- readme.md | 4 ++++ src/install.sh | 18 +++++++++--------- src/mido.sh | 8 +++++--- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index ae17da2..5360ad1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:6.22 / / +COPY --from=qemux/qemu:7.00 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/readme.md b/readme.md index 9492054..880675d 100644 --- a/readme.md +++ b/readme.md @@ -396,6 +396,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas You can use [dockur/macos](https://github.com/dockur/macos) for that. It shares many of the same features, except for the automatic installation. +### How do I run a Linux desktop in a container? + + You can use [qemus/qemu](https://github.com/qemus/qemu) in that case. + ### Is this project legal? Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal. diff --git a/src/install.sh b/src/install.sh index 003b302..1ff6a0e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -250,12 +250,12 @@ extractESD() { mkdir -p "$dir" size=16106127360 - size_gb=$(( (size + 1073741823)/1073741824 )) + size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$dir" | tail -n 1) - space_gb=$(( (space + 1073741823)/1073741824 )) + space_gb=$(formatBytes "$space") if (( size > space )); then - error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 + error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1 fi local esdImageCount @@ -341,16 +341,16 @@ extractImage() { mkdir -p "$dir" size=$(stat -c%s "$iso") - size_gb=$(( (size + 1073741823)/1073741824 )) + size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$dir" | tail -n 1) - space_gb=$(( (space + 1073741823)/1073741824 )) + space_gb=$(formatBytes "$space") if ((size<100000000)); then error "Invalid ISO file: Size is smaller than 100 MB" && return 1 fi if (( size > space )); then - error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 + error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1 fi rm -rf "$dir" @@ -953,12 +953,12 @@ buildImage() { fi size=$(du -h -b --max-depth=0 "$dir" | cut -f1) - size_gb=$(( (size + 1073741823)/1073741824 )) + size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$TMP" | tail -n 1) - space_gb=$(( (space + 1073741823)/1073741824 )) + space_gb=$(formatBytes "$space") if (( size > space )); then - error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 + error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1 fi if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then diff --git a/src/mido.sh b/src/mido.sh index df6d147..bbaa5c2 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -516,14 +516,15 @@ downloadFile() { local size="$4" local lang="$5" local desc="$6" - local rc total progress domain dots space folder + local rc total total_gb progress domain dots space folder rm -f "$iso" if [ -n "$size" ] && [[ "$size" != "0" ]]; then folder=$(dirname -- "$iso") space=$(df --output=avail -B 1 "$folder" | tail -n 1) - (( size > space )) && error "Not enough free space left to download file!" && return 1 + total_gb=$(formatBytes "$space") + (( size > space )) && error "Not enough free space to download file, only $total_gb left!" && return 1 fi # Check if running with interactive TTY or redirected to docker log @@ -553,8 +554,9 @@ downloadFile() { if (( rc == 0 )) && [ -f "$iso" ]; then total=$(stat -c%s "$iso") + total_gb=$(formatBytes "$total") if [ "$total" -lt 100000000 ]; then - error "Invalid download link: $url (is only $total bytes?). Please report this at $SUPPORT/issues." && return 1 + error "Invalid download link: $url (is only $total_gb ?). Please report this at $SUPPORT/issues." && return 1 fi verifyFile "$iso" "$size" "$total" "$sum" || return 1 html "Download finished successfully..." && return 0 From 5501437caab291b93b28fac200e74b08bd45e2e8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 17 Mar 2025 16:46:38 +0100 Subject: [PATCH 353/505] feat: Switch to port 80 (#1121) --- Dockerfile | 3 +-- compose.yml | 2 +- kubernetes.yml | 2 +- readme.md | 4 ++-- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5360ad1..96077e2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,6 @@ RUN set -eu && \ apt-get --no-install-recommends -y install \ bc \ jq \ - curl \ 7zip \ wsdd \ samba \ @@ -38,7 +37,7 @@ ARG VERSION_ARG="0.00" RUN echo "$VERSION_ARG" > /run/version VOLUME /storage -EXPOSE 8006 3389 +EXPOSE 80 3389 ENV VERSION="11" ENV RAM_SIZE="4G" diff --git a/compose.yml b/compose.yml index e5b6257..eda192d 100644 --- a/compose.yml +++ b/compose.yml @@ -10,7 +10,7 @@ services: cap_add: - NET_ADMIN ports: - - 8006:8006 + - 8006:80 - 3389:3389/tcp - 3389:3389/udp volumes: diff --git a/kubernetes.yml b/kubernetes.yml index fa8eef0..5ed913f 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -82,7 +82,7 @@ spec: - name: http port: 8006 protocol: TCP - targetPort: 8006 + targetPort: 80 - name: rdp port: 3389 protocol: TCP diff --git a/readme.md b/readme.md index 880675d..2c93a25 100644 --- a/readme.md +++ b/readme.md @@ -41,7 +41,7 @@ services: cap_add: - NET_ADMIN ports: - - 8006:8006 + - 8006:80 - 3389:3389/tcp - 3389:3389/udp volumes: @@ -53,7 +53,7 @@ services: Via Docker CLI: ```bash -docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -p 8006:80 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows ``` Via Kubernetes: From 9ffc4647aab601067bf99fc69a292e5fb4c70ecd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 04:11:08 +0100 Subject: [PATCH 354/505] build: Update qemu-docker to v7.01 (#1122) --- Dockerfile | 5 ----- readme.md | 2 +- src/power.sh | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 96077e2..6824f84 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,16 +10,11 @@ ARG DEBCONF_NONINTERACTIVE_SEEN="true" RUN set -eu && \ apt-get update && \ apt-get --no-install-recommends -y install \ - bc \ - jq \ - 7zip \ wsdd \ samba \ - xz-utils \ wimtools \ dos2unix \ cabextract \ - genisoimage \ libxml2-utils \ libarchive-tools && \ apt-get clean && \ diff --git a/readme.md b/readme.md index 2c93a25..9a7485a 100644 --- a/readme.md +++ b/readme.md @@ -78,7 +78,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas Very simple! These are the steps: - - Start the container and connect to [port 8006](http://localhost:8006) using your web browser. + - Start the container and connect to [port 8006](http://127.0.0.1:8006/) using your web browser. - Sit back and relax while the magic happens, the whole installation will be performed fully automatic. diff --git a/src/power.sh b/src/power.sh index e7ceaff..4252dd8 100644 --- a/src/power.sh +++ b/src/power.sh @@ -35,7 +35,7 @@ boot() { grep -Fq "BOOTMGR is missing" "$QEMU_PTY" && fail="y" fi if [ -z "$fail" ]; then - info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." + info "Windows started succesfully, visit http://127.0.0.1:8006/ to view the screen..." return 0 fi fi From 156eaaa2da027d9bbe8c84de7b3ab7819fd133b7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Mar 2025 04:46:27 +0100 Subject: [PATCH 355/505] build: Update qemu-docker to v7.01 (#1123) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6824f84..0f99039 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.00 / / +COPY --from=qemux/qemu:7.01 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From c9abc7551ab871a6b4086356fc3cd05c5b403047 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 05:19:44 +0100 Subject: [PATCH 356/505] fix: Remove port 80 (#1124) --- Dockerfile | 2 +- compose.yml | 2 +- kubernetes.yml | 2 +- readme.md | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0f99039..808b127 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,7 @@ ARG VERSION_ARG="0.00" RUN echo "$VERSION_ARG" > /run/version VOLUME /storage -EXPOSE 80 3389 +EXPOSE 3389 8006 ENV VERSION="11" ENV RAM_SIZE="4G" diff --git a/compose.yml b/compose.yml index eda192d..e5b6257 100644 --- a/compose.yml +++ b/compose.yml @@ -10,7 +10,7 @@ services: cap_add: - NET_ADMIN ports: - - 8006:80 + - 8006:8006 - 3389:3389/tcp - 3389:3389/udp volumes: diff --git a/kubernetes.yml b/kubernetes.yml index 5ed913f..fa8eef0 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -82,7 +82,7 @@ spec: - name: http port: 8006 protocol: TCP - targetPort: 80 + targetPort: 8006 - name: rdp port: 3389 protocol: TCP diff --git a/readme.md b/readme.md index 9a7485a..f1fe389 100644 --- a/readme.md +++ b/readme.md @@ -41,7 +41,7 @@ services: cap_add: - NET_ADMIN ports: - - 8006:80 + - 8006:8006 - 3389:3389/tcp - 3389:3389/udp volumes: @@ -53,7 +53,7 @@ services: Via Docker CLI: ```bash -docker run -it --rm --name windows -p 8006:80 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows ``` Via Kubernetes: From d3358f7345de5f99cd332a6e08b37b83cce69be3 Mon Sep 17 00:00:00 2001 From: Riaan Nolan <riaan.nolan@gmail.com> Date: Tue, 18 Mar 2025 20:13:37 +1000 Subject: [PATCH 357/505] fear: Add devcontainer (#1125) --- .devcontainer.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .devcontainer.json diff --git a/.devcontainer.json b/.devcontainer.json new file mode 100644 index 0000000..6ca0179 --- /dev/null +++ b/.devcontainer.json @@ -0,0 +1,4 @@ +{ + "service": "windows", + "dockerComposeFile": "compose.yml" +} From a995ecc1742f7a6b57d72ccdd0060447e501fa18 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 11:17:27 +0100 Subject: [PATCH 358/505] feat: Add devcontainer (#1126) --- .devcontainer.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.devcontainer.json b/.devcontainer.json index 6ca0179..7c7b31f 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -1,4 +1,6 @@ { + "name": "windows", "service": "windows", + "forwardPorts": ["8006"], "dockerComposeFile": "compose.yml" } From c31c530f2b6337ed180731e54a00a42e81dfa69f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 14:02:31 +0100 Subject: [PATCH 359/505] docs: Github Codespaces (#1127) --- readme.md | 15 ++++++++++----- src/entry.sh | 3 ++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index f1fe389..07c7e3f 100644 --- a/readme.md +++ b/readme.md @@ -62,15 +62,20 @@ Via Kubernetes: kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml ``` +Via Github Codespaces: + +[`Click here to launch this container in the cloud!`](https://github.com/codespaces/new?skip_quickstart=true&machine=basicLinux32gb&repo=743140652&ref=master&devcontainer_path=.devcontainer.json) + ## Compatibility ⚙️ | **Product** | **Platform** | | |---|---|---| -| Docker Engine | Linux| ✅ | -| Docker Desktop | Linux | ❌ | -| Docker Desktop | macOS | ❌ | -| Docker Desktop | Windows 11 | ✅ | -| Docker Desktop | Windows 10 | ❌ | +| Docker Engine | Linux| ✅ | +| Docker Desktop | Linux | ❌ | +| Docker Desktop | macOS | ❌ | +| Docker Desktop | Windows 11 | ✅ | +| Docker Desktop | Windows 10 | ❌ | +| Github Codespaces | Cloud | ✅ | ## FAQ 💬 diff --git a/src/entry.sh b/src/entry.sh index be6335a..88d549f 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -7,9 +7,10 @@ set -Eeuo pipefail cd /run +. utils.sh # Load functions . reset.sh # Initialize system . define.sh # Define versions -. mido.sh # Download code +. mido.sh # Download Windows . install.sh # Run installation . disk.sh # Initialize disks . display.sh # Initialize graphics From 461be96ecd2b89d3a6b850c29dfe045d128461c2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 14:26:16 +0100 Subject: [PATCH 360/505] docs: Formatting (#1129) --- readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 07c7e3f..0c29966 100644 --- a/readme.md +++ b/readme.md @@ -26,7 +26,7 @@ Windows inside a Docker container. ## Usage 🐳 -Via Docker Compose: +##### Via Docker Compose: ```yaml services: @@ -50,19 +50,19 @@ services: stop_grace_period: 2m ``` -Via Docker CLI: +##### Via Docker CLI: ```bash docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows ``` -Via Kubernetes: +##### Via Kubernetes: ```shell kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml ``` -Via Github Codespaces: +##### Via Github Codespaces: [`Click here to launch this container in the cloud!`](https://github.com/codespaces/new?skip_quickstart=true&machine=basicLinux32gb&repo=743140652&ref=master&devcontainer_path=.devcontainer.json) From f454fa7b34f1cf16498d5afbbf4bd9973fc07e2a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 17:31:00 +0100 Subject: [PATCH 361/505] feat: Add entry to hosts file (#1131) --- assets/win10x64-enterprise-eval.xml | 5 +++++ assets/win10x64-enterprise.xml | 5 +++++ assets/win10x64-iot.xml | 5 +++++ assets/win10x64-ltsc.xml | 5 +++++ assets/win10x64.xml | 5 +++++ assets/win11x64-enterprise-eval.xml | 5 +++++ assets/win11x64-enterprise.xml | 5 +++++ assets/win11x64-iot.xml | 5 +++++ assets/win11x64-ltsc.xml | 5 +++++ assets/win11x64.xml | 5 +++++ assets/win2008r2-eval.xml | 5 +++++ assets/win2008r2.xml | 5 +++++ assets/win2012r2-eval.xml | 5 +++++ assets/win2012r2.xml | 5 +++++ assets/win2016-eval.xml | 5 +++++ assets/win2016.xml | 5 +++++ assets/win2019-eval.xml | 5 +++++ assets/win2019-hv.xml | 5 +++++ assets/win2019.xml | 5 +++++ assets/win2022-eval.xml | 5 +++++ assets/win2022.xml | 5 +++++ assets/win2025-eval.xml | 5 +++++ assets/win2025.xml | 5 +++++ assets/win7x64-enterprise-eval.xml | 5 +++++ assets/win7x64-enterprise.xml | 5 +++++ assets/win7x64-ultimate.xml | 5 +++++ assets/win7x64.xml | 5 +++++ assets/win7x86-enterprise.xml | 5 +++++ assets/win7x86-ultimate.xml | 5 +++++ assets/win7x86.xml | 5 +++++ assets/win81x64-enterprise-eval.xml | 5 +++++ assets/win81x64-enterprise.xml | 5 +++++ assets/win81x64.xml | 5 +++++ assets/winvistax64-enterprise.xml | 5 +++++ assets/winvistax64-ultimate.xml | 5 +++++ assets/winvistax64.xml | 5 +++++ assets/winvistax86-enterprise.xml | 5 +++++ assets/winvistax86-ultimate.xml | 5 +++++ assets/winvistax86.xml | 5 +++++ 39 files changed, 195 insertions(+) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index df17cbe..15cf47e 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -415,6 +415,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 5b60828..8523316 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -418,6 +418,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 9516684..fc80dc5 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -424,6 +424,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 108db1f..8cdc2de 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -421,6 +421,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 0b19f99..dbcbb51 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -418,6 +418,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 034fd6a..fcfa7b4 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -453,6 +453,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 284e510..173e091 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -456,6 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 46c8bd7..1c35d05 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -456,6 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 4d56000..e52ccc9 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -456,6 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index fe14705..e5442ef 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -456,6 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index ed35737..bd3d074 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -290,6 +290,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>19</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index bd75078..f1e87d6 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -293,6 +293,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>19</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index fcb7c32..b454f2a 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -308,6 +308,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index dea2c37..06c8030 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -311,6 +311,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 66fc244..5a3f668 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -328,6 +328,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016.xml b/assets/win2016.xml index 1336e3f..7300fed 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -331,6 +331,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index e9aebfd..6de9fd1 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -332,6 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index 3ce3690..0f7990d 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -332,6 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019.xml b/assets/win2019.xml index aa43463..e07ef29 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -335,6 +335,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 782752e..9059ab5 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -332,6 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022.xml b/assets/win2022.xml index 3b61f90..2cdfb86 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -335,6 +335,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index ebeb7a5..52303b5 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -347,6 +347,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index 6ac67e4..bef8e3f 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -350,6 +350,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml index fdfd002..4b7ce48 100644 --- a/assets/win7x64-enterprise-eval.xml +++ b/assets/win7x64-enterprise-eval.xml @@ -274,6 +274,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index 14c4060..f64a076 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index f3c1ae3..aa8117d 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index b9f2908..f0056e2 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index ef606e5..acf676f 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index f0748cd..c6beb01 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index c5cd323..74a9064 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 2fe8c73..7aee42a 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -293,6 +293,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index d6c72dc..d2d49fc 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -296,6 +296,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index e5e268e..d4b9d5c 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -303,6 +303,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 50527a0..04a3f5b 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index 14c627d..a391a96 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index f753ea3..a2fda33 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index d087355..2dc58fa 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index 417722e..b7d35cc 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 172e5dd..3bec2e6 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From a3a2b3fb095a080b9760e137edae47ff94a2ced3 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 19:27:37 +0100 Subject: [PATCH 362/505] fix: Samba for user-mode networking (#1132) --- src/define.sh | 6 ++++++ src/install.sh | 2 ++ src/samba.sh | 10 ++++++++++ 3 files changed, 18 insertions(+) diff --git a/src/define.sh b/src/define.sh index 1b70ad0..8515790 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1491,6 +1491,12 @@ prepareInstall() { echo "" echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")" echo "" + echo "Set oFSO = CreateObject(\"Scripting.FileSystemObject\")" + echo "Set oHosts = oFSO.GetFile(\"C:\Windows\System32\drivers\etc\hosts\")" + echo "Set fileAPPEND = oFSO.OpenTextFile(\"C:\Windows\System32\drivers\etc\hosts\", 8, true)" + echo "fileAPPEND.Write(\"${VM_NET_IP%.*}.1 host.lan\")" + echo "fileAPPEND.Close()" + echo "" } | unix2dos > "$dir/\$OEM\$/admin.vbs" { echo "[COMMANDS]" diff --git a/src/install.sh b/src/install.sh index 1ff6a0e..8a6dfa1 100644 --- a/src/install.sh +++ b/src/install.sh @@ -628,6 +628,8 @@ updateXML() { local language="$2" local culture region user admin pass keyboard + sed -i "s/ 20.20.20.1 / ${VM_NET_IP%.*}.1 /g" "$asset" + [ -z "$HEIGHT" ] && HEIGHT="720" [ -z "$WIDTH" ] && WIDTH="1280" diff --git a/src/samba.sh b/src/samba.sh index 7105a89..2d96326 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -14,6 +14,10 @@ if [[ "$DHCP" == [Yy1]* ]]; then interface="$VM_NET_DEV" fi +if [[ "${NETWORK,,}" == "user"* ]]; then + interface="127.0.0.1" +fi + addShare() { local dir="$1" local name="$2" @@ -107,8 +111,14 @@ done if ! smbd; then error "Samba daemon failed to start!" smbd -i --debug-stdout || true +else + if [[ "${NETWORK,,}" == "user"* ]]; then + NET_OPTS="${NET_OPTS/,hostfwd/,guestfwd=tcp:${VM_NET_IP%.*}.1:445-tcp:127.0.0.1:445,hostfwd}" + fi fi +[[ "${NETWORK,,}" == "user"* ]] && return 0 + if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then # Enable NetBIOS on Windows 7 and lower if ! nmbd; then From e5e71f67fa20046a29a5cb60a907f5353b37e54c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 19 Mar 2025 09:23:29 +0100 Subject: [PATCH 363/505] feat: Add devcontainer (#1134) --- .devcontainer.json | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.devcontainer.json b/.devcontainer.json index 7c7b31f..14d70b4 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -1,6 +1,6 @@ { "name": "windows", "service": "windows", - "forwardPorts": ["8006"], + "forwardPorts": [8006], "dockerComposeFile": "compose.yml" } diff --git a/Dockerfile b/Dockerfile index 808b127..8b9c70c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.01 / / +COPY --from=qemux/qemu:7.02 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 522d646fa38256ed6fe9ce459fd9241268db98e6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 19 Mar 2025 09:45:08 +0100 Subject: [PATCH 364/505] feat: Check if IP is specified (#1135) --- src/define.sh | 5 ++++- src/install.sh | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index 8515790..80d1dfe 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1300,6 +1300,9 @@ prepareInstall() { [ -n "$PASSWORD" ] && password="$PASSWORD" [ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') + local ip="20.20.20.1" + [ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1" + # These are not pirated keys, they come from the official MS documentation. if [[ "${driver,,}" == "xp" ]]; then if [[ "${arch,,}" == "x86" ]]; then @@ -1494,7 +1497,7 @@ prepareInstall() { echo "Set oFSO = CreateObject(\"Scripting.FileSystemObject\")" echo "Set oHosts = oFSO.GetFile(\"C:\Windows\System32\drivers\etc\hosts\")" echo "Set fileAPPEND = oFSO.OpenTextFile(\"C:\Windows\System32\drivers\etc\hosts\", 8, true)" - echo "fileAPPEND.Write(\"${VM_NET_IP%.*}.1 host.lan\")" + echo "fileAPPEND.Write(\"$ip host.lan\")" echo "fileAPPEND.Close()" echo "" } | unix2dos > "$dir/\$OEM\$/admin.vbs" diff --git a/src/install.sh b/src/install.sh index 8a6dfa1..a473e7b 100644 --- a/src/install.sh +++ b/src/install.sh @@ -628,7 +628,9 @@ updateXML() { local language="$2" local culture region user admin pass keyboard - sed -i "s/ 20.20.20.1 / ${VM_NET_IP%.*}.1 /g" "$asset" + if [ -n "${VM_NET_IP:-}" ]; then + sed -i "s/ 20.20.20.1 / ${VM_NET_IP%.*}.1 /g" "$asset" + fi [ -z "$HEIGHT" ] && HEIGHT="720" [ -z "$WIDTH" ] && WIDTH="1280" From b7ad0d3d88212ef525c145bd0fe669e0b12a1b0b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 19 Mar 2025 13:58:45 +0100 Subject: [PATCH 365/505] fix: File sharing in user-mode (#1136) --- src/samba.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 2d96326..cf45311 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -111,14 +111,8 @@ done if ! smbd; then error "Samba daemon failed to start!" smbd -i --debug-stdout || true -else - if [[ "${NETWORK,,}" == "user"* ]]; then - NET_OPTS="${NET_OPTS/,hostfwd/,guestfwd=tcp:${VM_NET_IP%.*}.1:445-tcp:127.0.0.1:445,hostfwd}" - fi fi -[[ "${NETWORK,,}" == "user"* ]] && return 0 - if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then # Enable NetBIOS on Windows 7 and lower if ! nmbd; then From 0c8943f5418c4161fe526b5cbec3a51fc5bd5c12 Mon Sep 17 00:00:00 2001 From: sequencerr <45060278+sequencerr@users.noreply.github.com> Date: Wed, 19 Mar 2025 23:42:24 +0100 Subject: [PATCH 366/505] fix: Prevent terminal control sequences (#1139) --- src/entry.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entry.sh b/src/entry.sh index 88d549f..6fc3b48 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -32,7 +32,7 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..." terminal ( sleep 30; boot ) & tail -fn +0 "$QEMU_LOG" 2>/dev/null & -cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & +cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | sed 's/\x1B\[[=0-9;]*[a-z]//gi' & wait $! || : sleep 1 & wait $! From 972240061e3c075e47bbf51bc24a3f85b4ca9987 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 00:41:09 +0100 Subject: [PATCH 367/505] fix: Rename bootmessage (#1140) --- src/entry.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/entry.sh b/src/entry.sh index 6fc3b48..d9c60e0 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -32,7 +32,8 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..." terminal ( sleep 30; boot ) & tail -fn +0 "$QEMU_LOG" 2>/dev/null & -cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | sed 's/\x1B\[[=0-9;]*[a-z]//gi' & +cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \ +sed -e 's/\x1B\[[=0-9;]*[a-z]//gi' -e 's/failed to load Boot/skipped Boot/g' & wait $! || : sleep 1 & wait $! From 5d734616aa11e6629dbc2d873086e7cc9d52889e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 01:19:05 +0100 Subject: [PATCH 368/505] fix: Disable output buffering (#1141) --- src/entry.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/entry.sh b/src/entry.sh index d9c60e0..0095773 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -33,8 +33,9 @@ terminal ( sleep 30; boot ) & tail -fn +0 "$QEMU_LOG" 2>/dev/null & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \ -sed -e 's/\x1B\[[=0-9;]*[a-z]//gi' -e 's/failed to load Boot/skipped Boot/g' & -wait $! || : +sed -u -e 's/\x1B\[[=0-9;]*[a-z]//gi' \ +-e 's/failed to load Boot/skipped Boot/g' \ +-e 's/0): Not Found/0)/g' & wait $! || : sleep 1 & wait $! [ ! -f "$QEMU_END" ] && finish 0 From e2be4f6d0c289b095ad517d058b1a7edaba75b62 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 11:09:40 +0100 Subject: [PATCH 369/505] feat: Platform variable (#1143) --- Dockerfile | 2 +- src/define.sh | 1 - src/entry.sh | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8b9c70c..393d4a1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.02 / / +COPY --from=qemux/qemu:7.03 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/define.sh b/src/define.sh index 80d1dfe..1fbfcda 100644 --- a/src/define.sh +++ b/src/define.sh @@ -17,7 +17,6 @@ set -Eeuo pipefail : "${PASSWORD:=""}" MIRRORS=3 -PLATFORM="x64" parseVersion() { diff --git a/src/entry.sh b/src/entry.sh index 0095773..17b2147 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -2,6 +2,7 @@ set -Eeuo pipefail : "${APP:="Windows"}" +: "${PLATFORM:="x64"}" : "${BOOT_MODE:="windows"}" : "${SUPPORT:="https://github.com/dockur/windows"}" From 839900f495d07a7bcf1d02a54bc37c51fcf87ce6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 17:42:43 +0100 Subject: [PATCH 370/505] fix: Detect image platform (#1146) --- src/install.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index a473e7b..c2d423a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -581,6 +581,11 @@ detectImage() { info "Detected: $desc" setXML "" && return 0 + if [[ "$DETECTED" == "win8x86"* ]] || [[ "$DETECTED" == "win81x86"* ]] \ + || [[ "$DETECTED" == "win10x86"* ]] || [[ "$DETECTED" == "win11x86"* ]]; then + error "The 32-bit version of $desc is not supported!" && return 1 + fi + msg="the answer file for $desc was not found ($DETECTED.xml)" local fallback="/run/assets/${DETECTED%%-*}.xml" @@ -726,7 +731,11 @@ addDriver() { if [ -z "$folder" ]; then desc=$(printVersion "$id" "$id") - warn "no \"$driver\" driver available for \"$desc\" !" && return 0 + if [[ "${id,,}" != *"x86"* ]]; then + warn "no \"$driver\" driver available for \"$desc\" !" && return 0 + else + warn "no \"$driver\" driver available for the 32-bit version of \"$desc\" !" && return 0 + fi fi [ ! -d "$path/$driver/$folder" ] && return 0 From 663a6b5da0886aac66d107f9c60142d965b37cfd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 20:03:51 +0100 Subject: [PATCH 371/505] docs: Add Podman (#1147) --- readme.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 0c29966..09186b1 100644 --- a/readme.md +++ b/readme.md @@ -70,11 +70,13 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | **Product** | **Platform** | | |---|---|---| -| Docker Engine | Linux| ✅ | -| Docker Desktop | Linux | ❌ | -| Docker Desktop | macOS | ❌ | +| Docker Engine | Linux | ✅ | +| Docker Desktop | Linux | ❌ | +| Docker Desktop | macOS | ❌ | | Docker Desktop | Windows 11 | ✅ | | Docker Desktop | Windows 10 | ❌ | +| Podman | Linux | ✅ | +| Podman Desktop | Linux | ✅ | | Github Codespaces | Cloud | ✅ | ## FAQ 💬 From 6f604dca8e86ea7312777cfe6c63e6ea2e7fcc10 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 20:11:13 +0100 Subject: [PATCH 372/505] fix: Check image platform (#1148) --- src/install.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index c2d423a..cc21f9a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -581,8 +581,7 @@ detectImage() { info "Detected: $desc" setXML "" && return 0 - if [[ "$DETECTED" == "win8x86"* ]] || [[ "$DETECTED" == "win81x86"* ]] \ - || [[ "$DETECTED" == "win10x86"* ]] || [[ "$DETECTED" == "win11x86"* ]]; then + if[[ "$DETECTED" == "win81x86"* ]] || [[ "$DETECTED" == "win10x86"* ]]; then error "The 32-bit version of $desc is not supported!" && return 1 fi From 6bf854fc123f336f0343f429eef6f8ab0b387c2f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 20:15:06 +0100 Subject: [PATCH 373/505] fix: Detect image platform (#1149) --- src/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index cc21f9a..57e39f7 100644 --- a/src/install.sh +++ b/src/install.sh @@ -581,7 +581,7 @@ detectImage() { info "Detected: $desc" setXML "" && return 0 - if[[ "$DETECTED" == "win81x86"* ]] || [[ "$DETECTED" == "win10x86"* ]]; then + if [[ "$DETECTED" == "win81x86"* ]] || [[ "$DETECTED" == "win10x86"* ]]; then error "The 32-bit version of $desc is not supported!" && return 1 fi From 7b31f538ba44e6a293c10c7d57ec1e6b85e73528 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 23:07:24 +0100 Subject: [PATCH 374/505] docs: Compatibility chart (#1151) --- readme.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/readme.md b/readme.md index 09186b1..40d4811 100644 --- a/readme.md +++ b/readme.md @@ -68,16 +68,14 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ## Compatibility ⚙️ -| **Product** | **Platform** | | -|---|---|---| -| Docker Engine | Linux | ✅ | -| Docker Desktop | Linux | ❌ | -| Docker Desktop | macOS | ❌ | -| Docker Desktop | Windows 11 | ✅ | -| Docker Desktop | Windows 10 | ❌ | -| Podman | Linux | ✅ | -| Podman Desktop | Linux | ✅ | -| Github Codespaces | Cloud | ✅ | +| **Product** | **Linux** | **Win11** | **Win10** | **macOS** | +|---|---|---|---|---| +| Docker CLI | ✅ | ✅ | ❌ | ❌ | +| Docker Desktop | ❌ | ✅ | ❌ | ❌ | +| Podman CLI | ✅ | ✅ | ❌ | ❌ | +| Podman Desktop | ✅ | ✅ | ❌ | ❌ | +| Kubernetes | ✅ | ✅ | ❌ | ❌ | +| Github Codespaces | ✅ | ✅ | ✅ | ✅ | ## FAQ 💬 From d570eca629484fb997445de0c60c41702dacb3c6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 23:21:55 +0100 Subject: [PATCH 375/505] docs: KVM information (#1152) --- readme.md | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/readme.md b/readme.md index 40d4811..0bb2c3f 100644 --- a/readme.md +++ b/readme.md @@ -66,17 +66,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas [`Click here to launch this container in the cloud!`](https://github.com/codespaces/new?skip_quickstart=true&machine=basicLinux32gb&repo=743140652&ref=master&devcontainer_path=.devcontainer.json) -## Compatibility ⚙️ - -| **Product** | **Linux** | **Win11** | **Win10** | **macOS** | -|---|---|---|---|---| -| Docker CLI | ✅ | ✅ | ❌ | ❌ | -| Docker Desktop | ❌ | ✅ | ❌ | ❌ | -| Podman CLI | ✅ | ✅ | ❌ | ❌ | -| Podman Desktop | ✅ | ✅ | ❌ | ❌ | -| Kubernetes | ✅ | ✅ | ❌ | ❌ | -| Github Codespaces | ✅ | ✅ | ✅ | ✅ | - ## FAQ 💬 ### How do I use it? @@ -374,9 +363,16 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I verify if my system supports KVM? - Only Linux and Windows 11 support KVM virtualization, macOS and Windows 10 do not unfortunately. - - You can run the following commands in Linux to check your system: + First check if your software is compatible using this chart: + + | **Product** | **Linux** | **Win11** | **Win10** | **macOS** | + |---|---|---|---|---| + | Docker CLI | ✅ | ✅ | ❌ | ❌ | + | Docker Desktop | ❌ | ✅ | ❌ | ❌ | + | Podman CLI | ✅ | ✅ | ❌ | ❌ | + | Podman Desktop | ✅ | ✅ | ❌ | ❌ | + + After that you can run the following commands in Linux to check your system: ```bash sudo apt install cpu-checker @@ -391,11 +387,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas - you are not using a cloud provider, as most of them do not allow nested virtualization for their VPS's. - If you do not receive any error from `kvm-ok` but the container still complains about KVM, please check whether: - - - you are not using "Docker Desktop for Linux" as it does not support KVM, instead make use of Docker Engine directly. - - - it could help to add `privileged: true` to your compose file (or `sudo` to your `docker run` command), to rule out any permission issue. + If you did not receive any error from `kvm-ok` but the container still complains about a missing KVM device, it could help to add `privileged: true` to your compose file (or `sudo` to your `docker` command) to rule out any permission issue. ### How do I run macOS in a container? From 9fd266a09d058761fd22d25bb4f9af90e7a05800 Mon Sep 17 00:00:00 2001 From: Lars The <lars18th@users.noreply.github.com> Date: Fri, 21 Mar 2025 20:57:15 +0100 Subject: [PATCH 376/505] fix: Disable Hyper-V role (#1155) --- assets/win2019-hv.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index 0f7990d..d07259d 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -159,6 +159,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>dism.exe /online /Disable-Feature /FeatureName:Microsoft-Hyper-V /NoRestart</Path> + <Description>Disable Hyper-V role</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> From 77a8e4d26e6957d92e2b317063e599b984ecbf63 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 22:13:13 +0100 Subject: [PATCH 377/505] build: Update qemu-docker to v7.04 (#1157) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 393d4a1..2a9a274 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.03 / / +COPY --from=qemux/qemu:7.04 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From a9e3ffa4132dd96e26f7d1c7408fa33694d6da16 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 24 Mar 2025 14:10:30 +0100 Subject: [PATCH 378/505] fix: Remove non-printable characters (#1160) --- Dockerfile | 2 +- src/install.sh | 13 +++++++++++-- src/mido.sh | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2a9a274..d731838 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.04 / / +COPY --from=qemux/qemu:7.05 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/install.sh b/src/install.sh index 57e39f7..2281d9e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -16,6 +16,7 @@ skipInstall() { if [ -f "$previous" ]; then previous=$(<"$previous") + previous="${previous//[![:print:]]/}" if [ -n "$previous" ]; then previous="$STORAGE/$previous" if [[ "${previous,,}" != "${iso,,}" ]]; then @@ -1014,19 +1015,27 @@ bootWindows() { if [ -f "$STORAGE/windows.args" ]; then ARGS=$(<"$STORAGE/windows.args") + ARGS="${ARGS//[![:print:]]/}" ARGUMENTS="$ARGS ${ARGUMENTS:-}" fi if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then - [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type") + if [ -z "${DISK_TYPE:-}" ]; then + DISK_TYPE=$(<"$STORAGE/windows.type") + DISK_TYPE="${DISK_TYPE//[![:print:]]/}" + fi fi if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") + BOOT_MODE="${BOOT_MODE//[![:print:]]/}" fi if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && MACHINE=$(<"$STORAGE/windows.old") + if [[ "${PLATFORM,,}" == "x64" ]]; then + MACHINE=$(<"$STORAGE/windows.old") + MACHINE="${MACHINE//[![:print:]]/}" + fi fi return 0 diff --git a/src/mido.sh b/src/mido.sh index bbaa5c2..37e075b 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -93,6 +93,7 @@ download_windows() { # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs session_id=$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random) + session_id="${session_id//[![:print:]]/}" # Get product edition ID for latest release of given Windows version # Product edition ID: This specifies both the Windows release (e.g. 22H2) and edition ("multi-edition" is default, either Home/Pro/Edu/etc., we select "Pro" in the answer files) in one number From db45817a7cc59f649eb4344daecae69671c502aa Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 25 Mar 2025 14:51:59 +0100 Subject: [PATCH 379/505] docs: Github Codespaces (#1165) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 0bb2c3f..8979628 100644 --- a/readme.md +++ b/readme.md @@ -64,7 +64,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ##### Via Github Codespaces: -[`Click here to launch this container in the cloud!`](https://github.com/codespaces/new?skip_quickstart=true&machine=basicLinux32gb&repo=743140652&ref=master&devcontainer_path=.devcontainer.json) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?repo=743140652&machine=basicLinux32gb) ## FAQ 💬 From 96fbb26d6f10b5bafd3cc346588154ac83754b49 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 26 Mar 2025 08:33:24 +0100 Subject: [PATCH 380/505] fix: Warn on invalid path (#1168) --- src/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index 2281d9e..217403e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -206,7 +206,7 @@ detectCustom() { CUSTOM="" if [ -d "/$fname" ]; then - error "The file /$fname has an invalid path!" && return 1 + error "The file /$fname does not exist, please check that you mapped it to a valid path!" && return 1 fi file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1) @@ -495,7 +495,7 @@ setXML() { local file="/custom.xml" if [ -d "$file" ]; then - warn "The file $file has an invalid path!" + warn "The file $file does not exist, please check that you mapped it to a valid path!" fi [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" From c081ec26935928c0bd37fa7dcf6d3d94b2abbf22 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 26 Mar 2025 14:45:37 +0100 Subject: [PATCH 381/505] feat: Additional download mirrors (#1170) --- src/define.sh | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index 1fbfcda..aafd4de 100644 --- a/src/define.sh +++ b/src/define.sh @@ -887,7 +887,7 @@ getLink1() { sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1" url="7/en_windows_7_with_sp1_x64.iso" ;; - "win7x86" | "win7x86-enterprise" ) + "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) size=2434502656 sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" @@ -971,7 +971,7 @@ getLink2() { sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="Windows%207/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso" ;; - "win7x86" | "win7x86-enterprise" ) + "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) size=2434502656 sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" @@ -1055,11 +1055,36 @@ getLink3() { sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" url="tiny-10-23-h2/tiny10%20x64%2023h2.iso" ;; + "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) + size=3182604288 + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651_202006/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" + ;; + "win7x64-ultimate" ) + size=3320903680 + sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" + url="win7-ult-sp1-english/Win7_Ult_SP1_English_x64.iso" + ;; + "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) + size=2434502656 + sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" + url="en_windows_7_enterprise_with_sp1_x86_dvd_u_677710_202006/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + ;; + "win7x86-ultimate" ) + size=2564476928 + sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" + url="win7-ult-sp1-english/Win7_Ult_SP1_English_x32.iso" + ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" url="XPPRO_SP3_ENU/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" ;; + "winxpx64" ) + size=614166528 + sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" + url="windows-xp-all-sp-msdn-iso-files-en-de-ru-tr-x86-x64/en_win_xp_sp1_pro_x64_vl.iso" + ;; esac case "${ret,,}" in From ffcb4834523569449d3ea6f821acd84d914da90b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 26 Mar 2025 19:55:08 +0100 Subject: [PATCH 382/505] fix: Update download links (#1172) --- Dockerfile | 2 +- src/define.sh | 5 ----- src/install.sh | 4 ++-- src/mido.sh | 4 ++-- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index d731838..93c3d50 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.05 / / +COPY --from=qemux/qemu:7.06 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/define.sh b/src/define.sh index aafd4de..33dabe7 100644 --- a/src/define.sh +++ b/src/define.sh @@ -741,11 +741,6 @@ getMido() { sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" url="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" ;; - "win7x64" | "win7x64-enterprise-eval" ) - size=3121248256 - sum="2c16c73388a5c02a0ec4cd8b9e5c14ba28b7b45d13d0c9c7d44459feecc0385f" - url="http://care.dlservice.microsoft.com/dl/download/evalx/win7/x64/EN/7600.16385.090713-1255_x64fre_enterprise_en-us_EVAL_Eval_Enterprise-GRMCENXEVAL_EN_DVD.iso" - ;; "win2025-eval" ) size=6014152704 sum="d0ef4502e350e3c6c53c15b1b3020d38a5ded011bf04998e950720ac8579b23d" diff --git a/src/install.sh b/src/install.sh index 217403e..981e625 100644 --- a/src/install.sh +++ b/src/install.sh @@ -206,7 +206,7 @@ detectCustom() { CUSTOM="" if [ -d "/$fname" ]; then - error "The file /$fname does not exist, please check that you mapped it to a valid path!" && return 1 + error "The file /$fname does not exist, please make sure that you mapped it to a valid path!" && return 1 fi file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1) @@ -495,7 +495,7 @@ setXML() { local file="/custom.xml" if [ -d "$file" ]; then - warn "The file $file does not exist, please check that you mapped it to a valid path!" + warn "The file $file does not exist, please make sure that you mapped it to a valid path!" fi [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" diff --git a/src/mido.sh b/src/mido.sh index 37e075b..a11e8aa 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -314,7 +314,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win2008r2" | "win7${PLATFORM,,}"* | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + "win2008r2" | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -342,7 +342,7 @@ getWindows() { "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2019-hv" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win7${PLATFORM,,}"* | "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) + "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac From 90df2d88e36356bb1460a5d84061c1214b5d7d49 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 27 Mar 2025 01:51:12 +0100 Subject: [PATCH 383/505] docs: Github Codespaces (#1173) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 8979628..8c3884e 100644 --- a/readme.md +++ b/readme.md @@ -64,7 +64,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ##### Via Github Codespaces: -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?repo=743140652&machine=basicLinux32gb) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/dockur/windows) ## FAQ 💬 From 81e9fff270a9304750ce42d4b90755304d57dd16 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 28 Mar 2025 20:33:37 +0100 Subject: [PATCH 384/505] build: Update to qemu-docker v7.07 (#1176) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 93c3d50..a483657 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.06 / / +COPY --from=qemux/qemu:7.07 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 71c9586fb45de1518e148945e28e34a5f7485f31 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 3 Apr 2025 01:45:49 +0200 Subject: [PATCH 385/505] fix: Ignore missing custom .iso after install (#1180) --- src/install.sh | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/install.sh b/src/install.sh index 981e625..9c42bd7 100644 --- a/src/install.sh +++ b/src/install.sh @@ -10,6 +10,7 @@ EFISYS="efi/microsoft/boot/efisys_noprompt.bin" skipInstall() { local iso="$1" + local method="" local magic byte local boot="$STORAGE/windows.boot" local previous="$STORAGE/windows.base" @@ -18,14 +19,22 @@ skipInstall() { previous=$(<"$previous") previous="${previous//[![:print:]]/}" if [ -n "$previous" ]; then - previous="$STORAGE/$previous" - if [[ "${previous,,}" != "${iso,,}" ]]; then + if [[ "${STORAGE,,}/${previous,,}" != "${iso,,}" ]]; then if [ -f "$boot" ] && hasDisk; then - info "Detected that the version was changed, but ignoring this because Windows is already installed." - info "Please start with an empty /storage folder, if you want to install a different version of Windows." + if [[ "${iso,,}" == "${STORAGE,,}/windows."* ]]; then + method="your custom .iso file" + else + if [[ "${previous,,}" != "windows."* ]]; then + method="the VERSION variable" + fi + fi + if [ -n "$method" ]; then + info "Detected that $method was changed, but ignoring this because Windows is already installed." + info "Please start with an empty /storage folder, if you want to install a different version of Windows." + fi return 0 fi - [ -f "$previous" ] && rm -f "$previous" + rm -f "$STORAGE/$previous" return 1 fi fi @@ -200,13 +209,19 @@ abortInstall() { detectCustom() { - local file base + local dir file base local fname="custom.iso" + local boot="$STORAGE/windows.boot" CUSTOM="" - if [ -d "/$fname" ]; then - error "The file /$fname does not exist, please make sure that you mapped it to a valid path!" && return 1 + dir=$(find / -maxdepth 1 -type d -iname "$fname" | head -n 1) + [ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" | head -n 1) + + if [ -d "$dir" ]; then + if ! hasDisk || [ ! -f "$boot" ]; then + error "The bind $dir maps to a file that does not exist!" && return 1 + fi fi file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1) @@ -495,7 +510,7 @@ setXML() { local file="/custom.xml" if [ -d "$file" ]; then - warn "The file $file does not exist, please make sure that you mapped it to a valid path!" + error "The bind $file maps to a file that does not exist!" && exit 67 fi [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" From 6c3ef15ffd2e2fea527fd803ddbf63440add689f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 3 Apr 2025 02:03:46 +0200 Subject: [PATCH 386/505] docs: Manual installation (#1181) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 8c3884e..ea7efa2 100644 --- a/readme.md +++ b/readme.md @@ -256,7 +256,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas It's recommended to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment. - However, if you insist on performing the installation manually on your own risk, add the following environment variable to your compose file: + However, if you insist on performing the installation manually at your own risk, add the following environment variable to your compose file: ```yaml environment: From 70a92d350313a9c67498c6e049c3022783fe9c0b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 3 Apr 2025 02:06:22 +0200 Subject: [PATCH 387/505] docs: Product key (#1182) --- readme.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/readme.md b/readme.md index ea7efa2..6d1ad16 100644 --- a/readme.md +++ b/readme.md @@ -203,15 +203,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas KEYBOARD: "en-US" ``` -### How do I set the product key? - - By default, an evaluation version of Windows will be installed, but if you have a product key you can add a `KEY` variable like this (before installation): - - ```yaml - environment: - KEY: "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" - ``` - ### How do I select the edition? Windows Server offers a minimalistic Core edition without a GUI. To select those non-standard editions, you can add a `EDITION` variable like this (before installation): From aa16eeba6cd6aeb560208cd0f403c2df0e1c6cd7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 3 Apr 2025 10:28:44 +0200 Subject: [PATCH 388/505] docs: Disk pass-through (#1183) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 6d1ad16..f3ce933 100644 --- a/readme.md +++ b/readme.md @@ -329,12 +329,12 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I pass-through a disk? - It is possible to pass-through disk devices directly by adding them to your compose file in this way: + It is possible to pass-through disk devices or partitions directly by adding them to your compose file in this way: ```yaml devices: - /dev/sdb:/disk1 - - /dev/sdc:/disk2 + - /dev/sdc1:/disk2 ``` Use `/disk1` if you want it to become your main drive (which will be formatted during installation), and use `/disk2` and higher to add them as secondary drives (which will stay untouched). From de4bda71e235e3be53a89b75bc5360e9aa2ce6af Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 4 Apr 2025 01:29:45 +0200 Subject: [PATCH 389/505] build: Update qemu-docker to v7.08 (#1185) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a483657..67f6139 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.07 / / +COPY --from=qemux/qemu:7.08 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From fa40d30e5def55c01692662e00e9bae90b536a12 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 6 Apr 2025 00:42:46 +0200 Subject: [PATCH 390/505] feat: Add Windows 2000 support (#1188) --- Dockerfile | 5 +- readme.md | 43 ++++----- src/define.sh | 248 ++++++++++++++++++++++++++++++------------------- src/install.sh | 83 ++++++++++++++--- src/mido.sh | 15 +++ 5 files changed, 263 insertions(+), 131 deletions(-) diff --git a/Dockerfile b/Dockerfile index 67f6139..047cb2e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.08 / / +COPY --from=qemux/qemu:7.09 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" @@ -16,7 +16,8 @@ RUN set -eu && \ dos2unix \ cabextract \ libxml2-utils \ - libarchive-tools && \ + libarchive-tools \ + netcat-openbsd && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/readme.md b/readme.md index f3ce933..dbbd035 100644 --- a/readme.md +++ b/readme.md @@ -91,28 +91,29 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas Select from the values below: - | **Value** | **Version** | **Size** | + | **Value** | **Version** | **Size** | |---|---|---| - | `11` | Windows 11 Pro | 5.4 GB | - | `11l` | Windows 11 LTSC | 4.7 GB | - | `11e` | Windows 11 Enterprise | 4.0 GB | + | `11` | Windows 11 Pro | 5.4 GB | + | `11l` | Windows 11 LTSC | 4.7 GB | + | `11e` | Windows 11 Enterprise | 4.0 GB | |||| - | `10` | Windows 10 Pro | 5.7 GB | - | `10l` | Windows 10 LTSC | 4.6 GB | - | `10e` | Windows 10 Enterprise | 5.2 GB | + | `10` | Windows 10 Pro | 5.7 GB | + | `10l` | Windows 10 LTSC | 4.6 GB | + | `10e` | Windows 10 Enterprise | 5.2 GB | |||| - | `8e` | Windows 8.1 Enterprise | 3.7 GB | - | `7e` | Windows 7 Enterprise | 3.0 GB | - | `ve` | Windows Vista Enterprise | 3.0 GB | - | `xp` | Windows XP Professional | 0.6 GB | - |||| - | `2025` | Windows Server 2025 | 5.6 GB | - | `2022` | Windows Server 2022 | 4.7 GB | - | `2019` | Windows Server 2019 | 5.3 GB | - | `2016` | Windows Server 2016 | 6.5 GB | - | `2012` | Windows Server 2012 | 4.3 GB | - | `2008` | Windows Server 2008 | 3.0 GB | - | `2003` | Windows Server 2003 | 0.6 GB | + | `8e` | Windows 8.1 Enterprise | 3.7 GB | + | `7e` | Windows 7 Enterprise | 3.0 GB | + | `ve` | Windows Vista Enterprise | 3.0 GB | + | `xp` | Windows XP Professional | 0.6 GB | + | `2k` | Windows 2000 Professional | 0.4 GB | + |||| + | `2025` | Windows Server 2025 | 5.6 GB | + | `2022` | Windows Server 2022 | 4.7 GB | + | `2019` | Windows Server 2019 | 5.3 GB | + | `2016` | Windows Server 2016 | 6.5 GB | + | `2012` | Windows Server 2012 | 4.3 GB | + | `2008` | Windows Server 2008 | 3.0 GB | + | `2003` | Windows Server 2003 | 0.6 GB | > [!TIP] > To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). @@ -170,7 +171,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I configure the username and password? - By default, a user called `Docker` (with an empty password) is created during installation. + By default, a user called `Docker` is created during installation and its password is `admin`. If you want to use different credentials, you can configure them in your compose file (only before installation): @@ -258,7 +259,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. - So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `Docker` and by leaving the password empty. + So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `Docker` and password `admin`. There is a RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. diff --git a/src/define.sh b/src/define.sh index 33dabe7..e2a3c1a 100644 --- a/src/define.sh +++ b/src/define.sh @@ -89,6 +89,9 @@ parseVersion() { "xp64" | "xpx64" | "5x64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" ) VERSION="winxpx64" ;; + "2k" | "2000" | "win2k" | "win2000" | "windows2k" | "windows2000" ) + VERSION="win2kx86" + ;; "25" | "2025" | "win25" | "win2025" | "windows2025" | "windows 2025" ) VERSION="win2025-eval" ;; @@ -101,7 +104,7 @@ parseVersion() { "16" | "2016" | "win16" | "win2016" | "windows2016" | "windows 2016" ) VERSION="win2016-eval" ;; - "hv" | "hyperv" | "hyper v" | "hyper-v" | "19hv" | "2019hv" | "win2019hv") + "hv" | "hyperv" | "hyper v" | "hyper-v" | "19hv" | "2019hv" | "win2019hv" ) VERSION="win2019-hv" ;; "2012" | "2012r2" | "win2012" | "win2012r2" | "windows2012" | "windows 2012" ) @@ -912,6 +915,11 @@ getLink1() { sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" url="xp/professional/en_win_xp_pro_x64_vl.iso" ;; + "win2kx86" ) + size=331701982 + sum="a93251b31f92316411bb48458a695d9051b13cdeba714c46f105012fdda45bf3" + url="2000/5.00.2195.6717_x86fre_client-professional_retail_en-us.7z" + ;; esac case "${ret,,}" in @@ -1080,6 +1088,10 @@ getLink3() { sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" url="windows-xp-all-sp-msdn-iso-files-en-de-ru-tr-x86-x64/en_win_xp_sp1_pro_x64_vl.iso" ;; + "win2kx86" ) + size=386859008 + sum="e3816f6e80b66ff686ead03eeafffe9daf020a5e4717b8bd4736b7c51733ba22" + url="MicrosoftWindows2000BuildCollection/5.00.2195.6717_x86fre_client-professional_retail_en-us-ZRMPFPP_EN.iso" esac case "${ret,,}" in @@ -1216,89 +1228,104 @@ prepareInstall() { local driver="$4" local drivers="/tmp/drivers" - rm -rf "$drivers" - mkdir -p "$drivers" - ETFS="[BOOT]/Boot-NoEmul.img" if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then error "Failed to locate file \"$ETFS\" in $desc ISO image!" && return 1 fi - local msg="Adding drivers to image..." - info "$msg" && html "$msg" - - if ! bsdtar -xf /drivers.txz -C "$drivers"; then - error "Failed to extract drivers!" && return 1 - fi - local arch target [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" [[ "${arch,,}" == "x86" ]] && target="$dir/I386" || target="$dir/AMD64" - if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then - error "Failed to locate required storage drivers!" && return 1 + if [ ! -d "$target" ]; then + error "Failed to locate directory \"$target\" in $desc ISO image!" && return 1 fi - cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" || return 1 + if [[ "${driver,,}" == "xp" ]] || [[ "${driver,,}" == "2k3" ]]; then - mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 - cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 - cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 - cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + local msg="Adding drivers to image..." + info "$msg" && html "$msg" + + rm -rf "$drivers" + mkdir -p "$drivers" + + if ! bsdtar -xf /drivers.txz -C "$drivers"; then + error "Failed to extract drivers!" && return 1 + fi + + if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then + error "Failed to locate required storage drivers!" && return 1 + fi + + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" || return 1 + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + + if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then + error "Failed to locate required network drivers!" && return 1 + fi + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + + if [ ! -f "$target/TXTSETUP.SIF" ]; then + error "The file TXTSETUP.SIF could not be found!" && return 1 + fi + + sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" + + if [ ! -d "$drivers/sata/xp/$arch" ]; then + error "Failed to locate required SATA drivers!" && return 1 + fi + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 + cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 + cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1 + + sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" + + rm -rf "$drivers" - if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then - error "Failed to locate required network drivers!" && return 1 fi - mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 - - if [ ! -f "$target/TXTSETUP.SIF" ]; then - error "The file TXTSETUP.SIF could not be found!" && return 1 - fi - - sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" - - if [ ! -d "$drivers/sata/xp/$arch" ]; then - error "Failed to locate required SATA drivers!" && return 1 - fi - - mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 - cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 - cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1 - - sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" - - rm -rf "$drivers" - local pid file setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1) - pid=$(<"$setup") - pid="${pid:(-4)}" - pid="${pid:0:3}" - if [[ "$pid" == "270" ]]; then - warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." + if [ -n "$setup" ]; then + + pid=$(<"$setup") + pid="${pid:(-4)}" + pid="${pid:0:3}" + + if [[ "$pid" == "270" ]]; then + warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." + fi + fi + mkdir -p "$dir/\$OEM\$" + if ! addFolder "$dir"; then error "Failed to add OEM folder to image!" && return 1 fi @@ -1313,33 +1340,48 @@ prepareInstall() { XHEX=$(printf '%x\n' "$WIDTH") YHEX=$(printf '%x\n' "$HEIGHT") - local username="Docker" - local password="*" + local username="" + local password="" - [ -n "$PASSWORD" ] && password="$PASSWORD" [ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') + [ -z "$username" ] && username="Docker" + + [ -n "$PASSWORD" ] && password=$(echo "$PASSWORD" | sed 's/"//g') + [ -z "$password" ] && password="admin" local ip="20.20.20.1" [ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1" # These are not pirated keys, they come from the official MS documentation. - if [[ "${driver,,}" == "xp" ]]; then - if [[ "${arch,,}" == "x86" ]]; then - # Windows XP Professional x86 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - else - # Windows XP Professional x64 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" - fi - else - if [[ "${arch,,}" == "x86" ]]; then - # Windows Server 2003 Standard x86 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" - else - # Windows Server 2003 Standard x64 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" - fi - fi + case "${driver,,}" in + "xp" ) + + if [[ "${arch,,}" == "x86" ]]; then + # Windows XP Professional x86 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + else + # Windows XP Professional x64 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + fi ;; + + "2k3" ) + + if [[ "${arch,,}" == "x86" ]]; then + # Windows Server 2003 Standard x86 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" + else + # Windows Server 2003 Standard x64 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" + fi ;; + + "2k" ) + + # Windows 2000 Professional x86 generic key + KEY="G74HG-XXQTJ-RTX64-QKP3F-HKHXP" ;; + + * ) error "Unknown version: \"$driver\"" && return 1 ;; + + esac find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; @@ -1378,7 +1420,7 @@ prepareInstall() { echo " FullName=\"$username\"" echo " ComputerName=\"*\"" echo " OrgName=\"Windows for Docker\"" - echo " ProductKey=$KEY" + echo " ProductID=$KEY" echo "" echo "[Identification]" echo " JoinWorkgroup = WORKGROUP" @@ -1437,12 +1479,14 @@ prepareInstall() { echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]" echo "\"HideFileExt\"=dword:00000000" echo "" + echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]" + echo "\"NoWelcomeScreen\"=\"1\"" + echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" - echo "\"DefaultUserName\"=\"$username\"" - echo "\"DefaultDomainName\"=\"Dockur\"" - echo "\"AltDefaultUserName\"=\"$username\"" - echo "\"AltDefaultDomainName\"=\"Dockur\"" echo "\"AutoAdminLogon\"=\"1\"" + echo "\"DefaultUserName\"=\"$username\"" + echo "\"DefaultPassword\"=\"$password\"" + echo "\"DefaultDomainName\"=\"Dockur\"" echo "" echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000]" echo "\"DefaultSettings.BitsPerPel\"=dword:00000020" @@ -1513,11 +1557,13 @@ prepareInstall() { echo "" echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")" echo "" - echo "Set oFSO = CreateObject(\"Scripting.FileSystemObject\")" - echo "Set oHosts = oFSO.GetFile(\"C:\Windows\System32\drivers\etc\hosts\")" - echo "Set fileAPPEND = oFSO.OpenTextFile(\"C:\Windows\System32\drivers\etc\hosts\", 8, true)" - echo "fileAPPEND.Write(\"$ip host.lan\")" - echo "fileAPPEND.Close()" + echo "With (CreateObject(\"Scripting.FileSystemObject\"))" + echo " SysRoot = WshShell.ExpandEnvironmentStrings(\"%SystemRoot%\")" + echo " Set oFile = .OpenTextFile(SysRoot & \"\system32\drivers\etc\hosts\", 8, true)" + echo " oFile.Write(\"$ip host.lan\")" + echo " oFile.Close()" + echo " Set oFile = Nothing" + echo "End With" echo "" } | unix2dos > "$dir/\$OEM\$/admin.vbs" @@ -1614,7 +1660,9 @@ setMachine() { "win9"* ) ETFS="[BOOT]/Boot-1.44M.img" ;; "win2k"* ) - ETFS="[BOOT]/Boot-NoEmul.img" ;; + if ! prepareInstall "$iso" "$dir" "$desc" "2k"; then + error "Failed to prepare $desc ISO!" && return 1 + fi ;; "winxp"* ) if ! prepareInstall "$iso" "$dir" "$desc" "xp"; then error "Failed to prepare $desc ISO!" && return 1 @@ -1626,10 +1674,20 @@ setMachine() { esac case "${id,,}" in - "win9"* | "win2k"* ) + "win9"* ) + USB="no" + VGA="cirrus" DISK_TYPE="auto" + ADAPTER="rtl8139" MACHINE="pc-i440fx-2.4" BOOT_MODE="windows_legacy" ;; + "win2k"* ) + VGA="cirrus" + MACHINE="pc" + USB="pci-ohci" + DISK_TYPE="auto" + ADAPTER="rtl8139" + BOOT_MODE="windows_legacy" ;; "winxp"* | "win2003"* ) DISK_TYPE="blk" BOOT_MODE="windows_legacy" ;; diff --git a/src/install.sh b/src/install.sh index 9c42bd7..4e2244c 100644 --- a/src/install.sh +++ b/src/install.sh @@ -28,7 +28,7 @@ skipInstall() { method="the VERSION variable" fi fi - if [ -n "$method" ]; then + if [ -n "$method" ]; then info "Detected that $method was changed, but ignoring this because Windows is already installed." info "Please start with an empty /storage folder, if you want to install a different version of Windows." fi @@ -128,6 +128,8 @@ finishInstall() { rm -f "$STORAGE/windows.old" rm -f "$STORAGE/windows.vga" + rm -f "$STORAGE/windows.net" + rm -f "$STORAGE/windows.usb" rm -f "$STORAGE/windows.args" rm -f "$STORAGE/windows.base" rm -f "$STORAGE/windows.boot" @@ -170,10 +172,22 @@ finishInstall() { echo "$ARGS" > "$STORAGE/windows.args" fi + if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio"* ]]; then + echo "$VGA" > "$STORAGE/windows.vga" + fi + + if [ -n "${USB:-}" ] && [[ "${USB:-}" != "qemu-xhci"* ]]; then + echo "$USB" > "$STORAGE/windows.usb" + fi + if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then echo "$DISK_TYPE" > "$STORAGE/windows.type" fi + if [ -n "${ADAPTER:-}" ] && [[ "${ADAPTER:-}" != "virtio-net-pci" ]]; then + echo "$ADAPTER" > "$STORAGE/windows.net" + fi + rm -rf "$TMP" return 0 } @@ -185,6 +199,7 @@ abortInstall() { local efi [[ "${iso,,}" == *".esd" ]] && exit 60 + [[ "${UNPACK:-}" == [Yy1]* ]] && exit 60 efi=$(find "$dir" -maxdepth 1 -type d -iname efi | head -n 1) @@ -336,7 +351,7 @@ extractImage() { local dir="$2" local version="$3" local desc="local ISO" - local size size_gb space space_gb + local file size size_gb space space_gb if [ -z "$CUSTOM" ]; then desc="downloaded ISO" @@ -375,7 +390,26 @@ extractImage() { error "Failed to extract ISO file: $iso" && return 1 fi - LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p') + if [[ "${UNPACK:-}" != [Yy1]* ]]; then + + LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p') + + else + + file=$(find "$dir" -maxdepth 1 -type f -iname "*.iso" | head -n 1) + + if [ -z "$file" ]; then + error "Failed to find any .iso file in archive!" && return 1 + fi + + if ! 7z x "$file" -o"$dir" > /dev/null; then + error "Failed to extract archive!" && return 1 + fi + + LABEL=$(isoinfo -d -i "$file" | sed -n 's/Volume id: //p') + rm -f "$file" + + fi return 0 } @@ -689,16 +723,18 @@ updateXML() { sed -i "s/<Username>Docker<\/Username>/<Username>$user<\/Username>/g" "$asset" fi - if [ -n "$PASSWORD" ]; then - pass=$(printf '%s' "${PASSWORD}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0) - admin=$(printf '%s' "${PASSWORD}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0) - sed -i "s/<Value>password<\/Value>/<Value>$admin<\/Value>/g" "$asset" - sed -i "s/<PlainText>true<\/PlainText>/<PlainText>false<\/PlainText>/g" "$asset" - sed -z "s/<Password>...........<Value \/>/<Password>\n <Value>$pass<\/Value>/g" -i "$asset" - sed -z "s/<Password>...............<Value \/>/<Password>\n <Value>$pass<\/Value>/g" -i "$asset" - sed -z "s/<AdministratorPassword>...........<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" - sed -z "s/<AdministratorPassword>...............<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" - fi + [ -n "$PASSWORD" ] && pass="$PASSWORD" + [ -z "$pass" ] && pass="admin" + + pw=$(printf '%s' "${pass}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0) + admin=$(printf '%s' "${pass}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0) + + sed -i "s/<Value>password<\/Value>/<Value>$admin<\/Value>/g" "$asset" + sed -i "s/<PlainText>true<\/PlainText>/<PlainText>false<\/PlainText>/g" "$asset" + sed -z "s/<Password>...........<Value \/>/<Password>\n <Value>$pw<\/Value>/g" -i "$asset" + sed -z "s/<Password>...............<Value \/>/<Password>\n <Value>$pw<\/Value>/g" -i "$asset" + sed -z "s/<AdministratorPassword>...........<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" + sed -z "s/<AdministratorPassword>...............<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" if [ -n "$EDITION" ]; then [[ "${EDITION^^}" == "CORE" ]] && EDITION="STANDARDCORE" @@ -1034,6 +1070,27 @@ bootWindows() { ARGUMENTS="$ARGS ${ARGUMENTS:-}" fi + if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then + if [ -z "${VGA:-}" ]; then + VGA=$(<"$STORAGE/windows.vga") + VGA="${VGA//[![:print:]]/}" + fi + fi + + if [ -s "$STORAGE/windows.usb" ] && [ -f "$STORAGE/windows.usb" ]; then + if [ -z "${USB:-}" ]; then + USB=$(<"$STORAGE/windows.usb") + USB="${USB//[![:print:]]/}" + fi + fi + + if [ -s "$STORAGE/windows.net" ] && [ -f "$STORAGE/windows.net" ]; then + if [ -z "${ADAPTER:-}" ]; then + ADAPTER=$(<"$STORAGE/windows.net") + ADAPTER="${ADAPTER//[![:print:]]/}" + fi + fi + if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then if [ -z "${DISK_TYPE:-}" ]; then DISK_TYPE=$(<"$STORAGE/windows.type") diff --git a/src/mido.sh b/src/mido.sh index a11e8aa..95e92ac 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -472,6 +472,18 @@ getESD() { return 0 } +isCompressed() { + + local file="$1" + + case "${file,,}" in + *".7z" | *".zip" | *".rar" | *".lzma" | *".bz" | *".bz2" ) + return 0 ;; + esac + + return 1 +} + verifyFile() { local iso="$1" @@ -560,6 +572,7 @@ downloadFile() { error "Invalid download link: $url (is only $total_gb ?). Please report this at $SUPPORT/issues." && return 1 fi verifyFile "$iso" "$size" "$total" "$sum" || return 1 + isCompressed "$url" && UNPACK="Y" html "Download finished successfully..." && return 0 fi @@ -584,12 +597,14 @@ downloadImage() { local msg="Will retry after $delay seconds..." if [[ "${version,,}" == "http"* ]]; then + base=$(basename "$iso") desc=$(fromFile "$base") downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 rm -f "$iso" + return 1 fi From d008b18d1d69d79cef3da2e766e8bcc19691c770 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 6 Apr 2025 08:36:54 +0200 Subject: [PATCH 391/505] feat: Don't display domain (#1190) --- src/install.sh | 3 +-- src/mido.sh | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/install.sh b/src/install.sh index 4e2244c..0ad4449 100644 --- a/src/install.sh +++ b/src/install.sh @@ -723,8 +723,7 @@ updateXML() { sed -i "s/<Username>Docker<\/Username>/<Username>$user<\/Username>/g" "$asset" fi - [ -n "$PASSWORD" ] && pass="$PASSWORD" - [ -z "$pass" ] && pass="admin" + [ -n "$PASSWORD" ] && pass="$PASSWORD" || pass="admin" pw=$(printf '%s' "${pass}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0) admin=$(printf '%s' "${pass}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0) diff --git a/src/mido.sh b/src/mido.sh index 95e92ac..1e4e630 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -529,6 +529,7 @@ downloadFile() { local size="$4" local lang="$5" local desc="$6" + local msg="Downloading $desc" local rc total total_gb progress domain dots space folder rm -f "$iso" @@ -547,8 +548,8 @@ downloadFile() { progress="--progress=dot:giga" fi - local msg="Downloading $desc" html "$msg..." + /run/progress.sh "$iso" "$size" "$msg ([P])..." & domain=$(echo "$url" | awk -F/ '{print $3}') dots=$(echo "$domain" | tr -cd '.' | wc -c) @@ -559,7 +560,6 @@ downloadFile() { fi info "$msg..." - /run/progress.sh "$iso" "$size" "$msg ([P])..." & { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --show-progress "$progress"; rc=$?; } || : From 995d5eaec1cd25ab1aa8b676c139646fed4be33a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 8 Apr 2025 08:12:53 +0200 Subject: [PATCH 392/505] build: Update qemu-docker to v7.10 (#1195) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 047cb2e..12b784f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.09 / / +COPY --from=qemux/qemu:7.10 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 67cd5db5bc1f41701a27cfe43ea70d3fce8af2bc Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 9 Apr 2025 08:20:38 +0200 Subject: [PATCH 393/505] fix: Avoid pipe to head on find (#1197) --- src/define.sh | 16 ++++++++-------- src/install.sh | 26 +++++++++++++------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/define.sh b/src/define.sh index e2a3c1a..c809806 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1215,7 +1215,7 @@ addFolder() { cp -Lr "$folder/." "$dest" || return 1 local file - file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) + file=$(find "$dest" -maxdepth 1 -type f -iname install.bat -print -quit) [ -f "$file" ] && unix2dos -q "$file" return 0 @@ -1310,7 +1310,7 @@ prepareInstall() { fi local pid file setup - setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1) + setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit) if [ -n "$setup" ]; then @@ -1606,20 +1606,20 @@ detectLegacy() { local dir="$1" local find find2 - find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) + find=$(find "$dir" -maxdepth 1 -type d -iname win95 -print -quit) [ -n "$find" ] && DETECTED="win95" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) + find=$(find "$dir" -maxdepth 1 -type d -iname win98 -print -quit) [ -n "$find" ] && DETECTED="win98" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) + find=$(find "$dir" -maxdepth 1 -type d -iname win9x -print -quit) [ -n "$find" ] && DETECTED="win9x" && return 0 - find=$(find "$dir" -maxdepth 1 -type f -iname cdrom_nt.5 | head -n 1) + find=$(find "$dir" -maxdepth 1 -type f -iname cdrom_nt.5 -print -quit) [ -n "$find" ] && DETECTED="win2k" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) - find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) + find=$(find "$dir" -maxdepth 1 -type d -iname win51 -print -quit) + find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm -print -quit) if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then [ -d "$dir/AMD64" ] && DETECTED="winxpx64" && return 0 diff --git a/src/install.sh b/src/install.sh index 0ad4449..1c973f3 100644 --- a/src/install.sh +++ b/src/install.sh @@ -201,7 +201,7 @@ abortInstall() { [[ "${iso,,}" == *".esd" ]] && exit 60 [[ "${UNPACK:-}" == [Yy1]* ]] && exit 60 - efi=$(find "$dir" -maxdepth 1 -type d -iname efi | head -n 1) + efi=$(find "$dir" -maxdepth 1 -type d -iname efi -print -quit) if [ -z "$efi" ]; then [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" @@ -230,8 +230,8 @@ detectCustom() { CUSTOM="" - dir=$(find / -maxdepth 1 -type d -iname "$fname" | head -n 1) - [ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" | head -n 1) + dir=$(find / -maxdepth 1 -type d -iname "$fname" -print -quit) + [ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" -print -quit) if [ -d "$dir" ]; then if ! hasDisk || [ ! -f "$boot" ]; then @@ -239,8 +239,8 @@ detectCustom() { fi fi - file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1) - [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$fname" | head -n 1) + file=$(find / -maxdepth 1 -type f -iname "$fname" -print -quit) + [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$fname" -print -quit) if [ ! -s "$file" ] && [[ "${VERSION,,}" != "http"* ]]; then base=$(basename "$VERSION") @@ -396,7 +396,7 @@ extractImage() { else - file=$(find "$dir" -maxdepth 1 -type f -iname "*.iso" | head -n 1) + file=$(find "$dir" -maxdepth 1 -type f -iname "*.iso" -print -quit) if [ -z "$file" ]; then error "Failed to find any .iso file in archive!" && return 1 @@ -591,14 +591,14 @@ detectImage() { fi local src wim info - src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) + src=$(find "$dir" -maxdepth 1 -type d -iname sources -print -quit) if [ ! -d "$src" ]; then warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - wim=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) - [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) + wim=$(find "$src" -maxdepth 1 -type f -iname install.wim -print -quit) + [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname install.esd -print -quit) if [ ! -f "$wim" ]; then warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1 @@ -892,14 +892,14 @@ updateImage() { rm -rf "$tmp" mkdir -p "$tmp" - src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) + src=$(find "$dir" -maxdepth 1 -type d -iname sources -print -quit) if [ ! -d "$src" ]; then error "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - wim=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) - [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) + wim=$(find "$src" -maxdepth 1 -type f -iname boot.wim -print -quit) + [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname boot.esd -print -quit) if [ ! -f "$wim" ]; then error "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 @@ -962,7 +962,7 @@ updateImage() { local find="$file" [[ "$MANUAL" == [Yy1]* ]] && find="$org" - path=$(find "$dir" -maxdepth 1 -type f -iname "$find" | head -n 1) + path=$(find "$dir" -maxdepth 1 -type f -iname "$find" -print -quit) if [ -f "$path" ]; then if [[ "$MANUAL" != [Yy1]* ]]; then From fda0d7fbf9d617cf7a5675122fb1c10310e5132e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 9 Apr 2025 09:33:42 +0200 Subject: [PATCH 394/505] feat: Check shared folder permissions (#1199) --- src/samba.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index cf45311..10960b3 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -24,10 +24,11 @@ addShare() { local comment="$3" mkdir -p "$dir" || return 1 + ls -A "$dir" >/dev/null 2>&1 || return 1 if [ -z "$(ls -A "$dir")" ]; then - chmod 777 "$dir" + chmod 777 "$dir" || return 1 { echo "--------------------------------------------------------" echo " $APP for Docker v$(</run/version)..." @@ -91,10 +92,17 @@ share="/data" [ ! -d "$share" ] && [ -d "/shared" ] && share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" -addShare "$share" "Data" "Shared" || error "Failed to create shared folder!" +if ! addShare "$share" "Data" "Shared"; then + error "Failed to add shared folder '$share'. Please check its permissions." && return 0 +fi -[ -d "/data2" ] && addShare "/data2" "Data2" "Shared" -[ -d "/data3" ] && addShare "/data3" "Data3" "Shared" +if [ -d "/data2" ]; then + addShare "/data2" "Data2" "Shared" || error "Failed to add shared folder '/data2'. Please check its permissions." +fi + +if [ -d "/data3" ]; then + addShare "/data3" "Data3" "Shared" || error "Failed to add shared folder '/data3'. Please check its permissions." +fi IFS=',' read -r -a dirs <<< "${SHARES:-}" for dir in "${dirs[@]}"; do From a1e68622e9e5a25dde63b0e0e218a42f24f986ec Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Apr 2025 12:46:21 +0200 Subject: [PATCH 395/505] fix: Disallow RDP login with blank password (#1202) --- assets/win10x64-enterprise-eval.xml | 5 ----- assets/win10x64-enterprise.xml | 5 ----- assets/win10x64-iot.xml | 5 ----- assets/win10x64-ltsc.xml | 5 ----- assets/win10x64.xml | 5 ----- assets/win11x64-enterprise-eval.xml | 5 ----- assets/win11x64-enterprise.xml | 5 ----- assets/win11x64-iot.xml | 5 ----- assets/win11x64-ltsc.xml | 5 ----- assets/win11x64.xml | 5 ----- assets/win2008r2-eval.xml | 5 ----- assets/win2008r2.xml | 5 ----- assets/win2012r2-eval.xml | 5 ----- assets/win2012r2.xml | 5 ----- assets/win2016-eval.xml | 5 ----- assets/win2016.xml | 5 ----- assets/win2019-eval.xml | 5 ----- assets/win2019-hv.xml | 5 ----- assets/win2019.xml | 5 ----- assets/win2022-eval.xml | 5 ----- assets/win2022.xml | 5 ----- assets/win2025-eval.xml | 5 ----- assets/win2025.xml | 5 ----- assets/win7x64-enterprise-eval.xml | 5 ----- assets/win7x64-enterprise.xml | 5 ----- assets/win7x64-ultimate.xml | 5 ----- assets/win7x64.xml | 5 ----- assets/win7x86-enterprise.xml | 5 ----- assets/win7x86-ultimate.xml | 5 ----- assets/win7x86.xml | 5 ----- assets/win81x64-enterprise-eval.xml | 5 ----- assets/win81x64-enterprise.xml | 5 ----- assets/win81x64.xml | 5 ----- assets/winvistax64-enterprise.xml | 5 ----- assets/winvistax64-ultimate.xml | 5 ----- assets/winvistax64.xml | 5 ----- assets/winvistax86-enterprise.xml | 5 ----- assets/winvistax86-ultimate.xml | 5 ----- assets/winvistax86.xml | 5 ----- src/define.sh | 3 --- 40 files changed, 198 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 15cf47e..f91811f 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -323,11 +323,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 8523316..dc0b0d7 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -326,11 +326,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index fc80dc5..08741af 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -332,11 +332,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 8cdc2de..e3823a9 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -329,11 +329,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index dbcbb51..969ffe3 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -326,11 +326,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index fcfa7b4..39caac3 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -351,11 +351,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 173e091..1c18bf7 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -354,11 +354,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 1c35d05..3ee4107 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -354,11 +354,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index e52ccc9..5bc5187 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -354,11 +354,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index e5442ef..f3fc68c 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -354,11 +354,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index bd3d074..84467bd 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -203,11 +203,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index f1e87d6..9ab119f 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -206,11 +206,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index b454f2a..84bf8be 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -236,11 +236,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index 06c8030..5eef789 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -239,11 +239,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 5a3f668..45c1d82 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -236,11 +236,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2016.xml b/assets/win2016.xml index 7300fed..019cd1c 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -239,11 +239,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 6de9fd1..e6db2d9 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -240,11 +240,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index d07259d..bb87975 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -245,11 +245,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2019.xml b/assets/win2019.xml index e07ef29..5051f9f 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -243,11 +243,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 9059ab5..a4ed208 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -240,11 +240,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2022.xml b/assets/win2022.xml index 2cdfb86..71c07c9 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -243,11 +243,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 52303b5..d86f152 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -250,11 +250,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2025.xml b/assets/win2025.xml index bef8e3f..d488ae2 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -253,11 +253,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml index 4b7ce48..85b69e4 100644 --- a/assets/win7x64-enterprise-eval.xml +++ b/assets/win7x64-enterprise-eval.xml @@ -197,11 +197,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index f64a076..84c873e 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index aa8117d..f17fb0e 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index f0056e2..be1f3a8 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index acf676f..e96e5a7 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index c6beb01..ce81d12 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index 74a9064..314c2ee 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 7aee42a..f3a61e9 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -221,11 +221,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index d2d49fc..bf927cc 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -224,11 +224,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index d4b9d5c..290e923 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -231,11 +231,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 04a3f5b..1e3709c 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index a391a96..cb1d1c1 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index a2fda33..729e568 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index 2dc58fa..66efdf3 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index b7d35cc..5231d50 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 3bec2e6..ef0ed47 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/src/define.sh b/src/define.sh index c809806..5e497f0 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1470,9 +1470,6 @@ prepareInstall() { echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List]" echo "\"3389:TCP\"=\"3389:TCP:*:Enabled:@xpsp2res.dll,-22009\"" echo "" - echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]" - echo "\"LimitBlankPasswordUse\"=dword:00000000" - echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]" echo "\"RunCount\"=dword:00000000" echo "" From 46a9295e204a8aaee0ab8dcebf83422d651136a4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Apr 2025 13:44:42 +0200 Subject: [PATCH 396/505] feat: Skip internet connection wizard on Windows 2000 (#1203) --- src/define.sh | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/define.sh b/src/define.sh index 5e497f0..e265142 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1315,11 +1315,19 @@ prepareInstall() { if [ -n "$setup" ]; then pid=$(<"$setup") - pid="${pid:(-4)}" - pid="${pid:0:3}" - if [[ "$pid" == "270" ]]; then - warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." + if [[ "$driver" == "2k" ]]; then + + echo "${pid:0:$((${#pid})) - 4}270" > "$setup" + + else + + pid="${pid:(-4)}" + + if [[ "${pid:0:3}" == "270" ]]; then + warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." + fi + fi fi @@ -1376,13 +1384,14 @@ prepareInstall() { "2k" ) - # Windows 2000 Professional x86 generic key - KEY="G74HG-XXQTJ-RTX64-QKP3F-HKHXP" ;; + KEY="" ;; * ) error "Unknown version: \"$driver\"" && return 1 ;; esac + [ -n "$KEY" ] && KEY="ProductID=$KEY" + find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; { echo "[Data]" @@ -1420,7 +1429,7 @@ prepareInstall() { echo " FullName=\"$username\"" echo " ComputerName=\"*\"" echo " OrgName=\"Windows for Docker\"" - echo " ProductID=$KEY" + echo " $KEY" echo "" echo "[Identification]" echo " JoinWorkgroup = WORKGROUP" @@ -1479,6 +1488,10 @@ prepareInstall() { echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]" echo "\"NoWelcomeScreen\"=\"1\"" echo "" + echo "[HKEY_CURRENT_USER\Software\Microsoft\Internet Connection Wizard]" + echo "\"Completed\"=\"1\"" + echo "\"Desktopchanged\"=\"1\"" + echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" echo "\"AutoAdminLogon\"=\"1\"" echo "\"DefaultUserName\"=\"$username\"" @@ -1502,11 +1515,18 @@ prepareInstall() { echo "" } | unix2dos > "$dir/\$OEM\$/install.reg" + if [[ "$driver" == "2k" ]]; then + { echo "[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Runonce]" + echo "\"^SetupICWDesktop\"=-" + echo "" + } | unix2dos >> "$dir/\$OEM\$/install.reg" + fi + if [[ "$driver" == "2k3" ]]; then { echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]" echo "@=dword:00000000" echo "" - echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]" + echo "[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]" echo "\"DontLaunchSecurityOOBE\"=dword:00000000" echo "" } | unix2dos >> "$dir/\$OEM\$/install.reg" From 2d065f092d95f49e46bee80305c0494287880336 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Apr 2025 20:12:37 +0200 Subject: [PATCH 397/505] feat: Support boot.iso files (#1204) --- readme.md | 2 +- src/install.sh | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index dbbd035..95b128e 100644 --- a/readme.md +++ b/readme.md @@ -226,7 +226,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ```yaml volumes: - - ./example.iso:/custom.iso + - ./example.iso:/boot.iso ``` Replace the example path `./example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. diff --git a/src/install.sh b/src/install.sh index 1c973f3..cb07df7 100644 --- a/src/install.sh +++ b/src/install.sh @@ -222,14 +222,12 @@ abortInstall() { return 1 } -detectCustom() { +findFile() { local dir file base - local fname="custom.iso" + local fname="$1" local boot="$STORAGE/windows.boot" - CUSTOM="" - dir=$(find / -maxdepth 1 -type d -iname "$fname" -print -quit) [ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" -print -quit) @@ -256,12 +254,25 @@ detectCustom() { [ -z "$size" ] || [[ "$size" == "0" ]] && return 0 ISO="$file" - CUSTOM="$ISO" + CUSTOM="$file" BOOT="$STORAGE/windows.$size.iso" return 0 } +detectCustom() { + + CUSTOM="" + + ! findFile "custom.iso" && return 1 + [ -n "$CUSTOM" ] && return 0 + + ! findFile "boot.iso" && return 1 + [ -n "$CUSTOM" ] && return 0 + + return 0 +} + extractESD() { local iso="$1" From a33a5f56dc0c6193bd3ad1175fc1639410228096 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Apr 2025 21:00:29 +0200 Subject: [PATCH 398/505] build: Update qemu-docker to v7.11 (#1205) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 12b784f..588612d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.10 / / +COPY --from=qemux/qemu:7.11 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 2bacbac1f9f48475540074527066bc5ea76b064d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 16 Apr 2025 12:00:38 +0200 Subject: [PATCH 399/505] docs: Add quotes around $PWD (#1206) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 95b128e..4189cc1 100644 --- a/readme.md +++ b/readme.md @@ -53,7 +53,7 @@ services: ##### Via Docker CLI: ```bash -docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 dockurr/windows ``` ##### Via Kubernetes: From 87f3fd119b00ef1c49c47e02958a5456abde4932 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Apr 2025 11:38:21 +0200 Subject: [PATCH 400/505] feat: Set user agent for downloads (#1209) --- src/mido.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index 1e4e630..f2f9a94 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -530,9 +530,10 @@ downloadFile() { local lang="$5" local desc="$6" local msg="Downloading $desc" - local rc total total_gb progress domain dots space folder + local rc total total_gb progress domain dots agent space folder rm -f "$iso" + agent=$(get_agent) if [ -n "$size" ] && [[ "$size" != "0" ]]; then folder=$(dirname -- "$iso") @@ -561,7 +562,7 @@ downloadFile() { info "$msg..." - { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --show-progress "$progress"; rc=$?; } || : + { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || : fKill "progress.sh" @@ -569,7 +570,7 @@ downloadFile() { total=$(stat -c%s "$iso") total_gb=$(formatBytes "$total") if [ "$total" -lt 100000000 ]; then - error "Invalid download link: $url (is only $total_gb ?). Please report this at $SUPPORT/issues." && return 1 + error "Invalid download link: $url (is only $total_gb ?). Please report this at $SUPPORT/issues" && return 1 fi verifyFile "$iso" "$size" "$total" "$sum" || return 1 isCompressed "$url" && UNPACK="Y" @@ -579,7 +580,7 @@ downloadFile() { msg="Failed to download $url" (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 (( rc == 4 )) && error "$msg , network failure!" && return 1 - (( rc == 8 )) && error "$msg , server issued an error response! Please report this at $SUPPORT/issues." && return 1 + (( rc == 8 )) && error "$msg , server issued an error response! Please report this at $SUPPORT/issues" && return 1 error "$msg , reason: $rc" return 1 From 366305a4b19bd69578a178f6966917b5c99e3ca0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Apr 2025 12:45:47 +0200 Subject: [PATCH 401/505] feat: Additional download mirrors (#1210) --- readme.md | 4 +- src/define.sh | 136 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 84 insertions(+), 56 deletions(-) diff --git a/readme.md b/readme.md index 4189cc1..f628066 100644 --- a/readme.md +++ b/readme.md @@ -102,8 +102,8 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | `10e` | Windows 10 Enterprise | 5.2 GB | |||| | `8e` | Windows 8.1 Enterprise | 3.7 GB | - | `7e` | Windows 7 Enterprise | 3.0 GB | - | `ve` | Windows Vista Enterprise | 3.0 GB | + | `7u` | Windows 7 Ultimate | 3.1 GB | + | `vu` | Windows Vista Ultimate | 3.0 GB | | `xp` | Windows XP Professional | 0.6 GB | | `2k` | Windows 2000 Professional | 0.4 GB | |||| diff --git a/src/define.sh b/src/define.sh index e265142..388b0ad 100644 --- a/src/define.sh +++ b/src/define.sh @@ -61,27 +61,45 @@ parseVersion() { "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" ) VERSION="win81x64-enterprise-eval" ;; - "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" ) + "7" | "win7" | "windows7" | "windows 7" ) VERSION="win7x64" - [ -z "$DETECTED" ] && DETECTED="win7x64-enterprise-eval" + [ -z "$DETECTED" ] && DETECTED="win7x64-ultimate" ;; "7u" | "win7u" | "windows7u" | "windows 7u" ) VERSION="win7x64-ultimate" ;; - "7x86" | "win7x86" | "windows7x86" | "win7x86-enterprise" ) + "7e" | "win7e" | "windows7e" | "windows 7e" ) + VERSION="win7x64-enterprise" + ;; + "7x86" | "win7x86" | "win732" | "windows7x86" ) VERSION="win7x86" - [ -z "$DETECTED" ] && DETECTED="win7x86-enterprise" + [ -z "$DETECTED" ] && DETECTED="win7x86-ultimate" ;; - "vista" | "ve" | "6" | "winvista" | "windowsvista" | "windows vista" ) + "7ux86" | "7u32" | "win7x86-ultimate" ) + VERSION="win7x86-ultimate" + ;; + "7ex86" | "7e32" | "win7x86-enterprise" ) + VERSION="win7x86-enterprise" + ;; + "vista" | "vs" | "6" | "winvista" | "windowsvista" | "windows vista" ) VERSION="winvistax64" - [ -z "$DETECTED" ] && DETECTED="winvistax64-enterprise" + [ -z "$DETECTED" ] && DETECTED="winvistax64-ultimate" ;; - "vistu" | "vu" | "6u" | "winvistu" | "windowsvistu" | "windows vistu" ) + "vistu" | "vu" | "6u" | "winvistu" ) VERSION="winvistax64-ultimate" ;; - "vistax86" | "vex86" | "6x86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) + "viste" | "ve" | "6e" | "winviste" ) + VERSION="winvistax64-enterprise" + ;; + "vistax86" | "vista32" | "6x86" | "winvistax86" | "windowsvistax86" ) VERSION="winvistax86" - [ -z "$DETECTED" ] && DETECTED="winvistax86-enterprise" + [ -z "$DETECTED" ] && DETECTED="winvistax86-ultimate" + ;; + "vux86" | "vu32" | "winvistax86-ultimate" ) + VERSION="winvistax86-ultimate" + ;; + "vex86" | "ve32" | "winvistax86-enterprise" ) + VERSION="winvistax86-enterprise" ;; "xp" | "xp32" | "xpx86" | "5" | "5x86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" ) VERSION="winxpx86" @@ -875,32 +893,32 @@ getLink1() { sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" url="server/2008r2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601-018.iso" ;; - "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) - size=3182604288 - sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" - url="7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" - ;; - "win7x64-ultimate" ) + "win7x64" | "win7x64-ultimate" ) size=3320836096 sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1" url="7/en_windows_7_with_sp1_x64.iso" ;; - "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) - size=2434502656 - sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" - url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + "win7x64-enterprise" | "win7x64-enterprise-eval" ) + size=3182604288 + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" ;; - "win7x86-ultimate" ) + "win7x86" | "win7x86-ultimate" ) size=2564411392 sum="99f3369c90160816be07093dbb0ac053e0a84e52d6ed1395c92ae208ccdf67e5" url="7/en_windows_7_with_sp1_x86.iso" ;; - "winvistax64-ultimate" ) + "win7x86-enterprise" | "win7x86-enterprise-eval" ) + size=2434502656 + sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" + url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + ;; + "winvistax64" | "winvistax64-ultimate" ) size=3861460992 sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="vista/en_windows_vista_sp2_x64_dvd_342267.iso" ;; - "winvistax86-ultimate" ) + "winvistax86" | "winvistax86-ultimate" ) size=3243413504 sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" @@ -964,46 +982,46 @@ getLink2() { sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" url="Windows%20Server%202008%20R2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso" ;; - "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) - size=3182604288 - sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" - url="Windows%207/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" - ;; - "win7x64-ultimate" ) + "win7x64" | "win7x64-ultimate" ) size=3320903680 sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="Windows%207/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso" ;; - "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) - size=2434502656 - sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" - url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + "win7x64-enterprise" | "win7x64-enterprise-eval" ) + size=3182604288 + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="Windows%207/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" ;; - "win7x86-ultimate" ) + "win7x86" | "win7x86-ultimate" ) size=2564476928 sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" url="Windows%207/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso" ;; - "winvistax64" | "winvistax64-enterprise" ) - size=3205953536 - sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" - url="Windows%20Vista/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso" + "win7x86-enterprise" | "win7x86-enterprise-eval" ) + size=2434502656 + sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" + url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" ;; - "winvistax64-ultimate" ) + "winvistax64" | "winvistax64-ultimate" ) size=3861460992 sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="Windows%20Vista/en_windows_vista_sp2_x64_dvd_342267.iso" ;; - "winvistax86" | "winvistax86-enterprise" ) - size=2420981760 - sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" - url="Windows%20Vista/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" + "winvistax64-enterprise" ) + size=3205953536 + sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" + url="Windows%20Vista/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso" ;; - "winvistax86-ultimate" ) + "winvistax86" | "winvistax86-ultimate" ) size=3243413504 sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="Windows%20Vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" ;; + "winvistax86-enterprise" ) + size=2420981760 + sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" + url="Windows%20Vista/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" + ;; "win2003r2" ) size=652367872 sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32" @@ -1058,25 +1076,35 @@ getLink3() { sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" url="tiny-10-23-h2/tiny10%20x64%2023h2.iso" ;; - "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) - size=3182604288 - sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" - url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651_202006/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" - ;; - "win7x64-ultimate" ) + "win7x64" | "win7x64-ultimate" ) size=3320903680 sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="win7-ult-sp1-english/Win7_Ult_SP1_English_x64.iso" ;; - "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) + "win7x64-enterprise" | "win7x64-enterprise-eval" ) + size=3182604288 + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651_202006/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" + ;; + "win7x86" | "win7x86-ultimate" ) + size=2564476928 + sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" + url="win7-ult-sp1-english/Win7_Ult_SP1_English_x32.iso" + ;; + "win7x86-enterprise" | "win7x86-enterprise-eval" ) size=2434502656 sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" url="en_windows_7_enterprise_with_sp1_x86_dvd_u_677710_202006/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" ;; - "win7x86-ultimate" ) - size=2564476928 - sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" - url="win7-ult-sp1-english/Win7_Ult_SP1_English_x32.iso" + "winvistax64" | "winvistax64-ultimate" ) + size=3861460992 + sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" + url="en_windows_vista_sp2_x64_dvd_342267_202010/en_windows_vista_sp2_x64_dvd_342267.iso" + ;; + "winvistax86" | "winvistax86-ultimate" ) + size=3243413504 + sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" + url="en_windows_vista_sp2_x86_dvd_342266/en_windows_vista_sp2_x86_dvd_342266.iso" ;; "winxpx86" ) size=617756672 From 338d857e56babec4f4fc92344f31043199549299 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Apr 2025 19:31:27 +0200 Subject: [PATCH 402/505] feat: Additional download mirrors (#1212) --- Dockerfile | 2 +- src/define.sh | 109 +++++++++++++++++++++++++++++++++++-------------- src/install.sh | 2 +- 3 files changed, 80 insertions(+), 33 deletions(-) diff --git a/Dockerfile b/Dockerfile index 588612d..3e580f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.45-0/virtio-win-1.9.45.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.45-0/virtio-win-1.9.45.tar.xz /var/drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} diff --git a/src/define.sh b/src/define.sh index 388b0ad..c978f84 100644 --- a/src/define.sh +++ b/src/define.sh @@ -16,7 +16,7 @@ set -Eeuo pipefail : "${USERNAME:=""}" : "${PASSWORD:=""}" -MIRRORS=3 +MIRRORS=4 parseVersion() { @@ -1050,6 +1050,49 @@ getLink2() { getLink3() { + local id="$1" + local lang="$2" + local ret="$3" + local url="" + local sum="" + local size="" + local host="https://nixsys.com/drivers" + + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + + case "${id,,}" in + "win7x64" | "win7x64-ultimate" ) + size=3319478272 + sum="3286963e1476082ba882a5058c205c264772bead9e99e15cd1cb255f04b72900" + url="WINDOWS764_EN_DVD.iso" + ;; + "win7x86" | "win7x86-ultimate" ) + size=2564784128 + sum="bd4c03c917d00a40222d92a6fab04981a7bd46140bda1888eb961a322e3c5d89" + url="WINDOWS732_EN_DVD.iso" + ;; + "winxpx86" ) + size=618065920 + sum="8177d0137dfe4e8296a85793f140806c9250a5992c8e0e50158c742767ad1182" + url="WinXPsp3.iso" + ;; + "win2kx86" ) + size=387424256 + sum="08b11c3897eb38d1e6566a17cec5cdf2b3c620444e160e3db200a7e223aabbd8" + url="Windows_2000_SP4.iso" + esac + + case "${ret,,}" in + "sum" ) echo "$sum" ;; + "size" ) echo "$size" ;; + *) [ -n "$url" ] && echo "$host/$url";; + esac + + return 0 +} + +getLink4() { + local id="$1" local lang="$2" local ret="$3" @@ -1251,6 +1294,7 @@ addFolder() { prepareInstall() { + local pid="" local dir="$2" local desc="$3" local driver="$4" @@ -1278,7 +1322,7 @@ prepareInstall() { rm -rf "$drivers" mkdir -p "$drivers" - if ! bsdtar -xf /drivers.txz -C "$drivers"; then + if ! bsdtar -xf /var/drivers.txz -C "$drivers"; then error "Failed to extract drivers!" && return 1 fi @@ -1337,27 +1381,32 @@ prepareInstall() { fi - local pid file setup + local setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit) if [ -n "$setup" ]; then pid=$(<"$setup") + pid="${pid%$'\r'}" + + case "$pid" in + *"000" | *"270" | *"OEM" ) ;; + * ) warn "unknown PID found in image: \"${pid:(-3)}\"" ;; + esac if [[ "$driver" == "2k" ]]; then - echo "${pid:0:$((${#pid})) - 4}270" > "$setup" + echo "${pid:0:$((${#pid})) - 3}270" > "$setup" else - pid="${pid:(-4)}" - - if [[ "${pid:0:3}" == "270" ]]; then + if [[ "$pid" != *"270" ]]; then + echo "${pid:0:$((${#pid})) - 3}000" > "$setup" + else warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." fi fi - fi mkdir -p "$dir/\$OEM\$" @@ -1388,35 +1437,33 @@ prepareInstall() { local ip="20.20.20.1" [ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1" - # These are not pirated keys, they come from the official MS documentation. - case "${driver,,}" in - "xp" ) + if [ -z "$KEY" ] && [[ "$pid" != *"270" ]]; then - if [[ "${arch,,}" == "x86" ]]; then - # Windows XP Professional x86 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - else - # Windows XP Professional x64 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" - fi ;; + # These are not pirated keys, they come from the official MS documentation. + case "${driver,,}" in + "xp" ) - "2k3" ) + if [[ "${arch,,}" == "x86" ]]; then + # Windows XP Professional x86 generic key (no activation, trial-only) + KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + else + # Windows XP Professional x64 generic key (no activation, trial-only) + KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + fi ;; - if [[ "${arch,,}" == "x86" ]]; then - # Windows Server 2003 Standard x86 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" - else - # Windows Server 2003 Standard x64 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" - fi ;; + "2k3" ) - "2k" ) + if [[ "${arch,,}" == "x86" ]]; then + # Windows Server 2003 Standard x86 generic key (no activation, trial-only) + KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" + else + # Windows Server 2003 Standard x64 generic key (no activation, trial-only) + KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" + fi ;; - KEY="" ;; + esac - * ) error "Unknown version: \"$driver\"" && return 1 ;; - - esac + fi [ -n "$KEY" ] && KEY="ProductID=$KEY" diff --git a/src/install.sh b/src/install.sh index cb07df7..5376cbc 100644 --- a/src/install.sh +++ b/src/install.sh @@ -834,7 +834,7 @@ addDrivers() { warn "Windows version unknown, falling back to Windows 11 drivers..." fi - if ! bsdtar -xf /drivers.txz -C "$drivers"; then + if ! bsdtar -xf /var/drivers.txz -C "$drivers"; then error "Failed to extract drivers from archive!" && return 1 fi From 196afb48ae65d18100853526d9b27e125ac69bcd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Apr 2025 20:32:57 +0200 Subject: [PATCH 403/505] feat: Additional download mirrors (#1213) --- src/define.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/define.sh b/src/define.sh index c978f84..4f09413 100644 --- a/src/define.sh +++ b/src/define.sh @@ -923,6 +923,11 @@ getLink1() { sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" ;; + "win2003r2" ) + size=731650535 + sum="6b64bbae7eb00fd000cc887ffdc9f224d00c557daad7f756cfa373950b880dc8" + url="server/2003r2/en_win_srv_2003_r2_standard_x64_with_sp2_cd1_cd2.zip" + ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" @@ -1149,6 +1154,11 @@ getLink4() { sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="en_windows_vista_sp2_x86_dvd_342266/en_windows_vista_sp2_x86_dvd_342266.iso" ;; + "win2003r2" ) + size=652367872 + sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32" + url="en_win_srv_2003_r2_standard_x64_with_sp2_cd1_x13-05757/en_win_srv_2003_r2_standard_x64_with_sp2_cd1_x13-05757.iso" + ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" From bfb9c4b172498f968c3108689be961d2fad3270d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 21 Apr 2025 01:23:31 +0200 Subject: [PATCH 404/505] feat: Additional download mirrors (#1214) --- src/define.sh | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/src/define.sh b/src/define.sh index 4f09413..233f43d 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1124,6 +1124,76 @@ getLink4() { sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" url="tiny-10-23-h2/tiny10%20x64%2023h2.iso" ;; + "win11x64" ) + size=5819484160 + sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" + url="windows-11-24h2-x64/Windows%2011%2024H2%20x64.iso" + ;; + "win11x64-enterprise" | "win11x64-enterprise-eval" ) + size=6209064960 + sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c" + url="Windows11Enterprise23H2x64/22631.2428.231001-0608.23H2_NI_RELEASE_SVC_REFRESH_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso" + ;; + "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + ;; + "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + ;; + "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) + size=6978310144 + sum="7847abd6f39abd02dc8089c4177d354f9eb66fa0ee2fe8ae20e596e675d1ab67" + url="Windows-10-22H2-July-2024-64-bit-DVD-English/en-us_windows_10_business_editions_version_22h2_updated_july_2024_x64_dvd_c004521a.iso" + ;; + "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + size=4851668992 + sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" + url="en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f_202411/en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso" + ;; + "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + size=4899461120 + sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" + url="en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96_202302/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso" + ;; + "win81x64" ) + size=4320526336 + sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" + url="en_windows_8.1_with_update_x64_dvd_6051480/en_windows_8.1_with_update_x64_dvd_6051480.iso" + ;; + "win81x64-enterprise" | "win81x64-enterprise-eval" ) + size=4139163648 + sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" + url="en_windows_8.1_enterprise_with_update_x64_dvd/en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso" + ;; + "win2022" | "win2022-eval" ) + size=5365624832 + sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db" + url="win-server-2022/2227-January_2024/en-us_windows_server_2022_updated_jan_2024_x64_dvd_2b7a0c9f.iso" + ;; + "win2019" | "win2019-eval" ) + size=5575774208 + sum="0067afe7fdc4e61f677bd8c35a209082aa917df9c117527fc4b2b52a447e89bb" + url="sw-dvd-9-win-server-std-core-2019-1809.18-64-bit-english-dc-std-mlf-x-22-74330/SW_DVD9_Win_Server_STD_CORE_2019_1809.18_64Bit_English_DC_STD_MLF_X22-74330.ISO" + ;; + "win2016" | "win2016-eval" ) + size=6006587392 + sum="af06e5483c786c023123e325cea4775050324d9e1366f46850b515ae43f764be" + url="en_windows_server_2016_updated_feb_2018_x64_dvd_11636692/en_windows_server_2016_updated_feb_2018_x64_dvd_11636692.iso" + ;; + "win2012r2" | "win2012r2-eval" ) + size=5397889024 + sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" + url="en_windows_server_2012_r2_with_update_x64_dvd_6052708_202006/en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso" + ;; + "win2008r2" | "win2008r2-eval" ) + size=3166584832 + sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" + url="en_windows_server_2008_r2_with_sp1_x64_dvd_617601_202006/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso" + ;; "win7x64" | "win7x64-ultimate" ) size=3320903680 sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" @@ -1149,11 +1219,21 @@ getLink4() { sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="en_windows_vista_sp2_x64_dvd_342267_202010/en_windows_vista_sp2_x64_dvd_342267.iso" ;; + "winvistax64-enterprise" ) + size=3205953536 + sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" + url="en_windows_vista_enterprise_sp2_x64_dvd_342332_202007/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso" + ;; "winvistax86" | "winvistax86-ultimate" ) size=3243413504 sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="en_windows_vista_sp2_x86_dvd_342266/en_windows_vista_sp2_x86_dvd_342266.iso" ;; + "winvistax86-enterprise" ) + size=2420981760 + sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" + url="en_windows_vista_enterprise_sp2_x86_dvd_342329_202007/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" + ;; "win2003r2" ) size=652367872 sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32" From 5814473fe1384a11710f0ca20f8c3feddf0edbc6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 22 Apr 2025 19:09:23 +0200 Subject: [PATCH 405/505] feat: Improve OS detection (#1219) --- src/define.sh | 205 +++++++++++++++++++++++++++++++------------------ src/install.sh | 2 +- 2 files changed, 130 insertions(+), 77 deletions(-) diff --git a/src/define.sh b/src/define.sh index 233f43d..bd41f80 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1385,6 +1385,7 @@ addFolder() { prepareInstall() { local pid="" + local file="" local dir="$2" local desc="$3" local driver="$4" @@ -1436,17 +1437,19 @@ prepareInstall() { cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 - if [ ! -f "$target/TXTSETUP.SIF" ]; then + file=$(find "$target" -maxdepth 1 -type f -iname TXTSETUP.SIF -print -quit) + + if [ -z "$file" ]; then error "The file TXTSETUP.SIF could not be found!" && return 1 fi - sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$file" + sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$file" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$file" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$file" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$file" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$file" if [ ! -d "$drivers/sata/xp/$arch" ]; then error "Failed to locate required SATA drivers!" && return 1 @@ -1456,49 +1459,104 @@ prepareInstall() { cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1 - sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$file" + sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$file" + sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$file" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$file" rm -rf "$drivers" fi - local setup + local key setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit) - if [ -n "$setup" ]; then + if [ -n "$setup" ] && [ -z "$KEY" ]; then pid=$(<"$setup") pid="${pid%$'\r'}" - case "$pid" in - *"000" | *"270" | *"OEM" ) ;; - * ) warn "unknown PID found in image: \"${pid:(-3)}\"" ;; - esac - if [[ "$driver" == "2k" ]]; then echo "${pid:0:$((${#pid})) - 3}270" > "$setup" else - if [[ "$pid" != *"270" ]]; then - echo "${pid:0:$((${#pid})) - 3}000" > "$setup" - else - warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." - fi + if [[ "$pid" == *"270" ]]; then + warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." + + else + + file=$(find "$target" -maxdepth 1 -type f -iname PID.INF -print -quit) + + if [ -n "$file" ]; then + + if [[ "$driver" == "2k3" ]]; then + + key=$(grep -i -A 2 "StagingKey" "$file" | tail -n 2 | head -n 1) + + else + + key="${pid:$((${#pid})) - 8:5}" + if [[ "${pid^^}" == *"OEM" ]]; then + key=$(grep -i -A 2 "$key" "$file" | tail -n 2 | head -n 1) + else + key=$(grep -i -m 1 -A 2 "$key" "$file" | tail -n 2 | head -n 1) + fi + key="${key#*= }" + + fi + + key="${key%$'\r'}" + [[ "${#key}" == "29" ]] && KEY="$key" + + fi + + if [ -z "$KEY" ]; then + + # These are NOT pirated keys, they come from official MS documentation. + + case "${driver,,}" in + "xp" ) + + if [[ "${arch,,}" == "x86" ]]; then + # Windows XP Professional x86 generic trial key (no activation) + KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + else + # Windows XP Professional x64 generic trial key (no activation) + KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + fi ;; + + "2k3" ) + + if [[ "${arch,,}" == "x86" ]]; then + # Windows Server 2003 Standard x86 generic trial key (no activation) + KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" + else + # Windows Server 2003 Standard x64 generic trial key (no activation) + KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" + fi ;; + + esac + + echo "${pid:0:$((${#pid})) - 3}000" > "$setup" + + fi + + fi fi + fi + [ -n "$KEY" ] && KEY="ProductID=$KEY" + mkdir -p "$dir/\$OEM\$" if ! addFolder "$dir"; then @@ -1527,36 +1585,6 @@ prepareInstall() { local ip="20.20.20.1" [ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1" - if [ -z "$KEY" ] && [[ "$pid" != *"270" ]]; then - - # These are not pirated keys, they come from the official MS documentation. - case "${driver,,}" in - "xp" ) - - if [[ "${arch,,}" == "x86" ]]; then - # Windows XP Professional x86 generic key (no activation, trial-only) - KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - else - # Windows XP Professional x64 generic key (no activation, trial-only) - KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" - fi ;; - - "2k3" ) - - if [[ "${arch,,}" == "x86" ]]; then - # Windows Server 2003 Standard x86 generic key (no activation, trial-only) - KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" - else - # Windows Server 2003 Standard x64 generic key (no activation, trial-only) - KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" - fi ;; - - esac - - fi - - [ -n "$KEY" ] && KEY="ProductID=$KEY" - find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; { echo "[Data]" @@ -1786,34 +1814,59 @@ prepareLegacy() { detectLegacy() { local dir="$1" - local find find2 + local find - find=$(find "$dir" -maxdepth 1 -type d -iname win95 -print -quit) + find=$(find "$dir" -maxdepth 1 -type d -iname WIN95 -print -quit) [ -n "$find" ] && DETECTED="win95" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win98 -print -quit) + find=$(find "$dir" -maxdepth 1 -type d -iname WIN98 -print -quit) [ -n "$find" ] && DETECTED="win98" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win9x -print -quit) + find=$(find "$dir" -maxdepth 1 -type d -iname WIN9X -print -quit) [ -n "$find" ] && DETECTED="win9x" && return 0 - find=$(find "$dir" -maxdepth 1 -type f -iname cdrom_nt.5 -print -quit) - [ -n "$find" ] && DETECTED="win2k" && return 0 + find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_W.40 -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_S.40 -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_TS.40 -print -quit) + [ -n "$find" ] && DETECTED="winnt4" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win51 -print -quit) - find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm -print -quit) + find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_NT.5 -print -quit) + + if [ -n "$find" ]; then + + find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IA.5 -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_ID.5 -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IP.5 -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IS.5 -print -quit) + [ -n "$find" ] && DETECTED="win2k" && return 0 - if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then - [ -d "$dir/AMD64" ] && DETECTED="winxpx64" && return 0 - DETECTED="winxpx86" && return 0 fi - if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then - DETECTED="win2003r2" && return 0 - fi + find=$(find "$dir" -maxdepth 1 -iname WIN51 -print -quit) + + if [ -n "$find" ]; then + + find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AP -print -quit) + [ -n "$find" ] && DETECTED="winxpx64" && return 0 + + find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IC -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IP -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm -print -quit) + [ -n "$find" ] && DETECTED="winxpx86" && return 0 + + find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IS -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IA -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IB -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51ID -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IL -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IS -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AA -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AD -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AS -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51MA -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51MD -print -quit) + [ -n "$find" ] && DETECTED="win2003r2" && return 0 - if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then - DETECTED="win2003r2" && return 0 fi return 1 diff --git a/src/install.sh b/src/install.sh index 5376cbc..e0be8f8 100644 --- a/src/install.sh +++ b/src/install.sh @@ -266,7 +266,7 @@ detectCustom() { ! findFile "custom.iso" && return 1 [ -n "$CUSTOM" ] && return 0 - + ! findFile "boot.iso" && return 1 [ -n "$CUSTOM" ] && return 0 From 56fa5288cd21bc40b1e01839b9eba5e6858c7da5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 23 Apr 2025 13:02:04 +0200 Subject: [PATCH 406/505] docs: Add input types (#1221) --- .github/ISSUE_TEMPLATE/1-issue.yml | 2 ++ .github/ISSUE_TEMPLATE/3-bug.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/1-issue.yml b/.github/ISSUE_TEMPLATE/1-issue.yml index 68f19b7..87860c9 100644 --- a/.github/ISSUE_TEMPLATE/1-issue.yml +++ b/.github/ISSUE_TEMPLATE/1-issue.yml @@ -21,6 +21,7 @@ body: attributes: label: Docker compose description: The compose file (or otherwise the `docker run` command used). + render: yaml validations: required: true - type: textarea @@ -28,6 +29,7 @@ body: attributes: label: Docker log description: The logfile of the container (as shown by `docker logs windows`). + render: shell validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/3-bug.yml b/.github/ISSUE_TEMPLATE/3-bug.yml index 131742c..f614f27 100644 --- a/.github/ISSUE_TEMPLATE/3-bug.yml +++ b/.github/ISSUE_TEMPLATE/3-bug.yml @@ -23,6 +23,7 @@ body: attributes: label: Docker compose description: The compose file (or otherwise the `docker run` command used). + render: yaml validations: required: true - type: textarea @@ -30,6 +31,7 @@ body: attributes: label: Docker log description: The logfile of the container (as shown by `docker logs windows`). + render: shell validations: required: true - type: textarea From 868c8af289a1012cd7c8bf2c9a2bba298eeb8dee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 06:50:22 +0200 Subject: [PATCH 407/505] chore(deps): update qemux/qemu docker tag to v7.12 (#1229) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3e580f9..f48df31 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.11 / / +COPY --from=qemux/qemu:7.12 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 50f6467deaef20bb34eaa314afa67619a4e60f34 Mon Sep 17 00:00:00 2001 From: Levvie - she/her <11600822+ItzLevvie@users.noreply.github.com> Date: Mon, 26 May 2025 23:52:50 +0100 Subject: [PATCH 408/505] fix: Spelling mistake of successfully (#1251) --- src/mido.sh | 2 +- src/power.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index f2f9a94..75e2e5e 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -514,7 +514,7 @@ verifyFile() { fi if [[ "$hash" == "$check" ]]; then - info "Succesfully verified ISO!" && return 0 + info "Successfully verified ISO!" && return 0 fi error "The downloaded file has an unknown $algo checksum: $hash , as the expected value was: $check. Please report this at $SUPPORT/issues" diff --git a/src/power.sh b/src/power.sh index 4252dd8..9ca5583 100644 --- a/src/power.sh +++ b/src/power.sh @@ -35,7 +35,7 @@ boot() { grep -Fq "BOOTMGR is missing" "$QEMU_PTY" && fail="y" fi if [ -z "$fail" ]; then - info "Windows started succesfully, visit http://127.0.0.1:8006/ to view the screen..." + info "Windows started successfully, visit http://127.0.0.1:8006/ to view the screen..." return 0 fi fi From 945e27f72c7db7381a7b5076aaa2bfaf6284befa Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 7 Jul 2025 13:31:22 +0200 Subject: [PATCH 409/505] build: Update VirtIO drivers to v1.9.47 (#1297) --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index f48df31..c9ad591 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,6 @@ ARG DEBCONF_NONINTERACTIVE_SEEN="true" RUN set -eu && \ apt-get update && \ apt-get --no-install-recommends -y install \ - wsdd \ samba \ wimtools \ dos2unix \ @@ -24,7 +23,8 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.45-0/virtio-win-1.9.45.tar.xz /var/drivers.txz +ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/refs/tags/v0.9/src/wsdd.py /usr/sbin/wsdd +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.47-0/virtio-win-1.9.47.tar.xz /var/drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} From 21f533ece8210657bb335e6b858eae7ee82cf04c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 27 Aug 2025 21:07:39 +0200 Subject: [PATCH 410/505] chore(deps): update actions/checkout action to v5 (#1334) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- .github/workflows/check.yml | 2 +- .github/workflows/hub.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8731ab4..c552d6b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,7 +32,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 - diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index b132f31..e347f8d 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -7,7 +7,7 @@ jobs: name: shellcheck runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: diff --git a/.github/workflows/hub.yml b/.github/workflows/hub.yml index 0e0bcd1..263e97c 100644 --- a/.github/workflows/hub.yml +++ b/.github/workflows/hub.yml @@ -12,7 +12,7 @@ jobs: dockerHubDescription: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Docker Hub Description uses: peter-evans/dockerhub-description@v4 From 032d7a31a4a02cdb7eeab29c68c9764449d3878a Mon Sep 17 00:00:00 2001 From: Jam Balaya <jambalaya.pyoncafe@outlook.jp> Date: Thu, 28 Aug 2025 04:11:40 +0900 Subject: [PATCH 411/505] build: Add `syntax` parser directive to Dockerfile (#1323) * build: Add `syntax` parser directive to Dockerfile --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index c9ad591..3a1ce53 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,5 @@ +# syntax=docker/dockerfile:1 + ARG VERSION_ARG="latest" FROM scratch AS build-amd64 From 5248397845afaba559ab7c5a9e09bac48d1a3a1c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 2 Sep 2025 14:32:52 +0200 Subject: [PATCH 412/505] docs: Remove Stars section from README (#1361) Removed the Stars section from the README. --- readme.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/readme.md b/readme.md index f628066..c777869 100644 --- a/readme.md +++ b/readme.md @@ -393,9 +393,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal. -## Stars 🌟 -[![Stars](https://starchart.cc/dockur/windows.svg?variant=adaptive)](https://starchart.cc/dockur/windows) - ## Disclaimer ⚖️ *The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation.* From 0b7e8f01becd950eb22c478c7220612b967336ed Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 3 Sep 2025 16:42:46 +0200 Subject: [PATCH 413/505] chore(deps): update hadolint/hadolint-action action to v3.2.0 (#1365) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index e347f8d..71c2d33 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -18,7 +18,7 @@ jobs: path: "assets" file-endings: ".xml" - name: Lint Dockerfile - uses: hadolint/hadolint-action@v3.1.0 + uses: hadolint/hadolint-action@v3.2.0 with: dockerfile: Dockerfile ignore: DL3006,DL3008 From 53b0c9ad027d2ef205b76eeb63cd866fb93b2eff Mon Sep 17 00:00:00 2001 From: Alexandre Beaujour <alexandre.beaujour@hotmail.fr> Date: Sat, 13 Sep 2025 13:43:45 +0200 Subject: [PATCH 414/505] docs: Clarify disk resizing (#1383) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index c777869..7f4fa38 100644 --- a/readme.md +++ b/readme.md @@ -139,7 +139,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ``` > [!TIP] -> This can also be used to resize the existing disk to a larger capacity without any data loss. +> This can also be used to resize the existing disk to a larger capacity without any data loss. However you will need to [manually extend the disk partition](https://learn.microsoft.com/en-us/windows-server/storage/disk-management/extend-a-basic-volume?tabs=disk-management) since the added disk space will appear as unallocated. ### How do I share files with the host? From da308b7e89ce3ddafcd6b8237ed77b199a3415e0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 13 Sep 2025 20:08:38 +0200 Subject: [PATCH 415/505] feat: Replace wsdd with wsddn for Web Service Discovery (#1385) --- Dockerfile | 3 ++- src/samba.sh | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3a1ce53..2eb04bd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,13 +19,14 @@ RUN set -eu && \ libxml2-utils \ libarchive-tools \ netcat-openbsd && \ + wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_amd64.deb" -O /tmp/wsddn.deb -q && \ + dpkg -i /tmp/wsddn.deb && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/refs/tags/v0.9/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.47-0/virtio-win-1.9.47.tar.xz /var/drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 diff --git a/src/samba.sh b/src/samba.sh index 10960b3..e5b4442 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -129,8 +129,7 @@ if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then fi else # Enable Web Service Discovery on Vista and up - wsdd -i "$interface" -p -n "$hostname" & - echo "$!" > /var/run/wsdd.pid + wsddn -i "$interface" -H "$hostname" --pid-file=/var/run/wsdd.pid >/dev/null & fi return 0 From 22235bf48ecd172b894e9843c601f8e32cca9160 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 14 Sep 2025 11:52:06 +0200 Subject: [PATCH 416/505] build: Disable automatic builds (#1386) Removed push trigger and paths to ignore from build workflow. --- .github/workflows/build.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c552d6b..27c6385 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,16 +2,6 @@ name: Build on: workflow_dispatch: - push: - branches: - - master - paths-ignore: - - '**/*.md' - - '**/*.yml' - - '.gitignore' - - '.dockerignore' - - '.github/**' - - '.github/workflows/**' concurrency: group: build From 2983b2b67747ebddb6c46f12bb2fe623ef8f5a1d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 14 Sep 2025 20:51:49 +0200 Subject: [PATCH 417/505] fix: Windows Enterprise download was broken (#1387) --- readme.md | 2 +- src/define.sh | 8 +++-- src/mido.sh | 89 ++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 70 insertions(+), 29 deletions(-) diff --git a/readme.md b/readme.md index 7f4fa38..b33a405 100644 --- a/readme.md +++ b/readme.md @@ -95,7 +95,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas |---|---|---| | `11` | Windows 11 Pro | 5.4 GB | | `11l` | Windows 11 LTSC | 4.7 GB | - | `11e` | Windows 11 Enterprise | 4.0 GB | + | `11e` | Windows 11 Enterprise | 5.3 GB | |||| | `10` | Windows 10 Pro | 5.7 GB | | `10l` | Windows 10 LTSC | 4.6 GB | diff --git a/src/define.sh b/src/define.sh index bd41f80..4bc9730 100644 --- a/src/define.sh +++ b/src/define.sh @@ -734,8 +734,8 @@ getMido() { sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" ;; "win11x64-enterprise-eval" ) - size=4295096320 - sum="dad633276073f14f3e0373ef7e787569e216d54942ce522b39451c8f2d38ad43" + size=5387960320 + sum="755a90d43e826a74b9e1932a34788b898e028272439b777e5593dee8d53622ae" url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENTENTERPRISEEVAL_OEMRET_A64FRE_en-us.iso" ;; "win11x64-enterprise-iot-eval" | "win11x64-enterprise-ltsc-eval" ) @@ -1313,6 +1313,8 @@ isMido() { local lang="$2" local sum + [[ "${MIDO:-}" == [Nn]* ]] && return 1 + sum=$(getMido "$id" "en" "sum") [ -n "$sum" ] && return 0 @@ -1324,6 +1326,8 @@ isESD() { local id="$1" local lang="$2" + [[ "${ESD:-}" == [Nn]* ]] && return 1 + case "${id,,}" in "win11${PLATFORM,,}" | "win10${PLATFORM,,}" ) return 0 diff --git a/src/mido.sh b/src/mido.sh index 75e2e5e..9e86600 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -264,23 +264,34 @@ download_windows_eval() { } case "$enterprise_type" in + "iot" | "ltsc" ) + case "${PLATFORM,,}" in + "x64" ) + if [[ "$windows_version" != "windows-10"* ]]; then + iso_download_link=$(echo "$iso_download_links" | head -n 1) + else + iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) + fi ;; + "arm64" ) + iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; + * ) + error "Invalid platform specified, value \"$PLATFORM\" is not recognized!" && return 1 ;; + esac ;; "enterprise" ) - iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) - ;; - "iot" ) - if [[ "${PLATFORM,,}" == "x64" ]]; then - iso_download_link=$(echo "$iso_download_links" | head -n 1) - fi - if [[ "${PLATFORM,,}" == "arm64" ]]; then - iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) - fi - ;; - "ltsc" ) - iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) - ;; + case "${PLATFORM,,}" in + "x64" ) + if [[ "$windows_version" != "windows-10"* ]]; then + iso_download_link=$(echo "$iso_download_links" | head -n 1) + else + iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) + fi ;; + "arm64" ) + iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; + * ) + error "Invalid platform specified, value \"$PLATFORM\" is not recognized!" && return 1 ;; + esac ;; "server" ) - iso_download_link=$(echo "$iso_download_links" | head -n 1) - ;; + iso_download_link=$(echo "$iso_download_links" | head -n 1) ;; * ) error "Invalid type specified, value \"$enterprise_type\" is not recognized!" && return 1 ;; esac @@ -323,8 +334,7 @@ getWindows() { case "${version,,}" in "win11${PLATFORM,,}" ) ;; - "win11${PLATFORM,,}-enterprise-iot"* ) ;; - "win11${PLATFORM,,}-enterprise-ltsc"* ) ;; + "win11${PLATFORM,,}-enterprise"* ) ;; * ) if [[ "${PLATFORM,,}" != "x64" ]]; then error "No download for the ${PLATFORM^^} platform available for $edition!" @@ -396,10 +406,11 @@ getESD() { local version="$2" local lang="$3" local desc="$4" + local result local culture local language local editionName - local winCatalog size + local winCatalog culture=$(getLanguage "$lang" "culture") winCatalog=$(getCatalog "$version" "url") @@ -441,32 +452,57 @@ getESD() { error "Failed to find $xFile in $wFile!" && return 1 fi - local edQuery='//File[Architecture="'${PLATFORM}'"][Edition="'${editionName}'"]' + local edQuery='//File[Architecture="'${PLATFORM,,}'"][Edition="'${editionName}'"]' + result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null) + + if [ -z "$result" ]; then + + edQuery='//File[Architecture="'${PLATFORM^^}'"][Edition="'${editionName}'"]' + result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null) + + if [ -z "$result" ]; then + + desc=$(printEdition "$version" "$desc") + language=$(getLanguage "$lang" "desc") + error "No download link available for $desc!" && return 1 + fi + + fi echo -e '<Catalog>' > "$dir/$fFile" - xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" >> "$dir/$fFile" 2>/dev/null + echo "$result" >> "$dir/$fFile" echo -e '</Catalog>'>> "$dir/$fFile" - xmllint --nonet --xpath "//File[LanguageCode=\"${culture,,}\"]" "$dir/$fFile" >"$dir/$eFile" + result=$(xmllint --nonet --xpath "//File[LanguageCode=\"${culture,,}\"]" "$dir/$fFile" 2>/dev/null) - size=$(stat -c%s "$dir/$eFile") - if ((size<20)); then + if [ -z "$result" ]; then desc=$(printEdition "$version" "$desc") language=$(getLanguage "$lang" "desc") error "No download in the $language language available for $desc!" && return 1 fi + echo "$result" > "$dir/$eFile" + local tag="FilePath" - ESD=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") + ESD=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g" 2>/dev/null) if [ -z "$ESD" ]; then error "Failed to find ESD URL in $eFile!" && return 1 fi tag="Sha1" - ESD_SUM=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") + ESD_SUM=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g" 2>/dev/null) + + if [ -z "$ESD_SUM" ]; then + error "Failed to find ESD checksum in $eFile!" && return 1 + fi + tag="Size" - ESD_SIZE=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") + ESD_SIZE=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g" 2>/dev/null) + + if [ -z "$ESD_SIZE" ]; then + error "Failed to find ESD filesize in $eFile!" && return 1 + fi rm -rf "$dir" return 0 @@ -561,6 +597,7 @@ downloadFile() { fi info "$msg..." + [[ "$DEBUG" == [Yy1]* ]] && echo "Downloading $url" { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || : From 36e69fba7229a29095cc2798ae6c5c2c12f64257 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 00:36:40 +0200 Subject: [PATCH 418/505] fix: Updated checksums for mirror (#1388) --- Dockerfile | 3 ++- src/define.sh | 59 ++++++++++++++++++--------------------------------- src/mido.sh | 3 ++- 3 files changed, 25 insertions(+), 40 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2eb04bd..f7473b5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,6 +5,7 @@ FROM scratch AS build-amd64 COPY --from=qemux/qemu:7.12 / / +ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" ARG DEBCONF_NONINTERACTIVE_SEEN="true" @@ -19,7 +20,7 @@ RUN set -eu && \ libxml2-utils \ libarchive-tools \ netcat-openbsd && \ - wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_amd64.deb" -O /tmp/wsddn.deb -q && \ + wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \ dpkg -i /tmp/wsddn.deb && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/src/define.sh b/src/define.sh index 4bc9730..9b47786 100644 --- a/src/define.sh +++ b/src/define.sh @@ -33,11 +33,11 @@ parseVersion() { "11e" | "win11e" | "windows11e" | "windows 11e" ) VERSION="win11x64-enterprise-eval" ;; - "11i" | "11iot" | "iot11" | "win11i" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + "11i" | "11iot" | "iot11" | "win11i" | "win11-iot" | "win11x64-iot" ) VERSION="win11x64-enterprise-iot-eval" [ -z "$DETECTED" ] && DETECTED="win11x64-iot" ;; - "11l" | "11ltsc" | "ltsc11" | "win11l" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + "11l" | "11ltsc" | "ltsc11" | "win11l" | "win11-ltsc" | "win11x64-ltsc" ) VERSION="win11x64-enterprise-ltsc-eval" [ -z "$DETECTED" ] && DETECTED="win11x64-ltsc" ;; @@ -47,11 +47,11 @@ parseVersion() { "10e" | "win10e" | "windows10e" | "windows 10e" ) VERSION="win10x64-enterprise-eval" ;; - "10i" | "10iot" | "iot10" | "win10i" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + "10i" | "10iot" | "iot10" | "win10i" | "win10-iot" | "win10x64-iot" ) VERSION="win10x64-enterprise-iot-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-iot" ;; - "10l" | "10ltsc" | "ltsc10" | "win10l" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + "10l" | "10ltsc" | "ltsc10" | "win10l" | "win10-ltsc" | "win10x64-ltsc" ) VERSION="win10x64-enterprise-ltsc-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" ;; @@ -693,26 +693,9 @@ switchEdition() { local id="$1" - case "${id,,}" in - "win11${PLATFORM,,}-enterprise-eval" ) - DETECTED="win11${PLATFORM,,}-enterprise" - ;; - "win10${PLATFORM,,}-enterprise-eval" ) - DETECTED="win10${PLATFORM,,}-enterprise" - ;; - "win81${PLATFORM,,}-enterprise-eval" ) - DETECTED="win81${PLATFORM,,}-enterprise" - ;; - "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise-eval" ) - DETECTED="win7${PLATFORM,,}-enterprise" - ;; - "win2025-eval" ) DETECTED="win2025" ;; - "win2022-eval" ) DETECTED="win2022" ;; - "win2019-eval" ) DETECTED="win2019" ;; - "win2016-eval" ) DETECTED="win2016" ;; - "win2012r2-eval" ) DETECTED="win2012r2" ;; - "win2008r2-eval" ) DETECTED="win2008r2" ;; - esac + if [[ "${id,,}" == *"-eval" ]]; then + [ -z "$DETECTED" ] && DETECTED="${id::-5}" + fi return 0 } @@ -828,12 +811,12 @@ getLink1() { sum="aa1ad990f930d907b7a34ea897abbb0dfbe47552ca8acc146f92e40381839e05" url="11/en-us_windows_11_24h2_x64.iso" ;; - "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + "win11x64-iot" | "win11x64-enterprise-iot" | "win11x64-enterprise-iot-eval" ) size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; - "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + "win11x64-ltsc" | "win11x64-enterprise-ltsc" | "win11x64-enterprise-ltsc-eval" ) size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" @@ -843,12 +826,12 @@ getLink1() { sum="557871965263d0fd0a1ea50b5d0d0d7cb04a279148ca905c1c675c9bc0d5486c" url="10/en-us_windows_10_22h2_x64.iso" ;; - "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + "win10x64-iot" | "win10x64-enterprise-iot" | "win10x64-enterprise-iot-eval" ) size=4851668992 sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" url="10/en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso" ;; - "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + "win10x64-ltsc" | "win10x64-enterprise-ltsc" | "win10x64-enterprise-ltsc-eval" ) size=4899461120 sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" url="10/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso" @@ -864,14 +847,14 @@ getLink1() { url="8.x/8.1/en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso" ;; "win2025" | "win2025-eval" ) - size=5307176960 - sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3" - url="server/2025/en-us_windows_server_2025_preview_x64_dvd_ce9eb1a5.iso" + size=6786627584 + sum="bf3ef0849c7cb5e818e1035b7466d206af5aa227ace1a3f4b0de2bf00d2e2144" + url="server/2025/en-us_windows_server_2025_updated_april_2025_x64_dvd_ea86301d.iso" ;; "win2022" | "win2022-eval" ) - size=5365624832 - sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db" - url="server/2022/en-us_windows_server_2022_updated_jan_2024_x64_dvd_2b7a0c9f.iso" + size=6005706752 + sum="cea2cb2c09de9910c236e64eae3a801c55e9c77ec25e8d81585e3a4581d24bfb" + url="server/2022/en-us_windows_server_2022_updated_april_2025_x64_dvd_3f755ec1.iso" ;; "win2019" | "win2019-eval" ) size=5575774208 @@ -1134,12 +1117,12 @@ getLink4() { sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c" url="Windows11Enterprise23H2x64/22631.2428.231001-0608.23H2_NI_RELEASE_SVC_REFRESH_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso" ;; - "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + "win11x64-iot" | "win11x64-enterprise-iot" | "win11x64-enterprise-iot-eval" ) size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; - "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + "win11x64-ltsc" | "win11x64-enterprise-ltsc" | "win11x64-enterprise-ltsc-eval" ) size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" @@ -1149,12 +1132,12 @@ getLink4() { sum="7847abd6f39abd02dc8089c4177d354f9eb66fa0ee2fe8ae20e596e675d1ab67" url="Windows-10-22H2-July-2024-64-bit-DVD-English/en-us_windows_10_business_editions_version_22h2_updated_july_2024_x64_dvd_c004521a.iso" ;; - "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + "win10x64-iot" | "win10x64-enterprise-iot" | "win10x64-enterprise-iot-eval" ) size=4851668992 sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" url="en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f_202411/en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso" ;; - "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + "win10x64-ltsc" | "win10x64-enterprise-ltsc" | "win10x64-enterprise-ltsc-eval" ) size=4899461120 sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" url="en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96_202302/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso" diff --git a/src/mido.sh b/src/mido.sh index 9e86600..4971b11 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -297,6 +297,7 @@ download_windows_eval() { esac [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" + [ -z "$iso_download_link" ] && error "Could not parse download link from page!" && return 1 # Follow redirect so proceeding log message is useful # This is a request we make that Fido doesn't @@ -597,7 +598,7 @@ downloadFile() { fi info "$msg..." - [[ "$DEBUG" == [Yy1]* ]] && echo "Downloading $url" + [[ "$DEBUG" == [Yy1]* ]] && echo "Downloading: $url" { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || : From d0ac685a8101652c5a7ccbc03431b324c458c933 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 01:00:17 +0200 Subject: [PATCH 419/505] build: Remove netcat-openbsd package (#1389) --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index f7473b5..cb8715c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,8 +18,7 @@ RUN set -eu && \ dos2unix \ cabextract \ libxml2-utils \ - libarchive-tools \ - netcat-openbsd && \ + libarchive-tools && \ wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \ dpkg -i /tmp/wsddn.deb && \ apt-get clean && \ From 22511b16ae1dfc69e5129d58d989b80e29fdc8cd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 01:05:12 +0200 Subject: [PATCH 420/505] docs: Update image sizes (#1390) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index b33a405..1c41efa 100644 --- a/readme.md +++ b/readme.md @@ -107,8 +107,8 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | `xp` | Windows XP Professional | 0.6 GB | | `2k` | Windows 2000 Professional | 0.4 GB | |||| - | `2025` | Windows Server 2025 | 5.6 GB | - | `2022` | Windows Server 2022 | 4.7 GB | + | `2025` | Windows Server 2025 | 6.7 GB | + | `2022` | Windows Server 2022 | 6.0 GB | | `2019` | Windows Server 2019 | 5.3 GB | | `2016` | Windows Server 2016 | 6.5 GB | | `2012` | Windows Server 2012 | 4.3 GB | From e3dc889601b987c9b152eb8385a7f9ef0100821e Mon Sep 17 00:00:00 2001 From: mauxadoor <183605014+mauxadoor@users.noreply.github.com> Date: Mon, 15 Sep 2025 01:49:04 +0200 Subject: [PATCH 421/505] fix: wimlib-imagex info returns UTF-16LE but is interpreted as UTF8 (#1293) --- src/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index e0be8f8..1c11cea 100644 --- a/src/install.sh +++ b/src/install.sh @@ -615,7 +615,7 @@ detectImage() { warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1 fi - info=$(wimlib-imagex info -xml "$wim" | tr -d '\000') + info=$(wimlib-imagex info -xml "$wim" | iconv -f UTF-16LE -t UTF-8) checkPlatform "$info" || exit 67 DETECTED=$(detectVersion "$info") From 1ebb4c8d586883b36b21aa794fc1ab1046cd6182 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 02:09:31 +0200 Subject: [PATCH 422/505] fix: Check image count in ESD file (#1391) --- src/install.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/install.sh b/src/install.sh index 1c11cea..818f52f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -301,7 +301,11 @@ extractESD() { fi local esdImageCount - esdImageCount=$(wimlib-imagex info "$iso" | awk '/Image Count:/ {print $3}') + esdImageCount=$(wimlib-imagex info "$iso" | iconv -f UTF-16LE -t UTF-8 | awk '/Image Count:/ {print $3}') + + if [ -z "$esdImageCount" ]; then + error "Cannot read the image count in ESD file!" && return 1 + fi wimlib-imagex apply "$iso" 1 "$dir" --quiet 2>/dev/null || { retVal=$? @@ -344,7 +348,7 @@ extractESD() { fi for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do - imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//') + imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | iconv -f UTF-16LE -t UTF-8 | grep '^Description:' | sed 's/Description:[ \t]*//') [[ "${imageEdition,,}" != "${edition,,}" ]] && continue wimlib-imagex export "$iso" ${imageIndex} "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || { retVal=$? @@ -917,7 +921,7 @@ updateImage() { fi index="1" - result=$(wimlib-imagex info -xml "$wim" | tr -d '\000') + result=$(wimlib-imagex info -xml "$wim" | iconv -f UTF-16LE -t UTF-8) if [[ "${result^^}" == *"<IMAGE INDEX=\"2\">"* ]]; then index="2" From 1c15df95aced287ca58a112224c0aaf4ae9eeee1 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:20:29 +0200 Subject: [PATCH 423/505] feat: Remove leading and trailing spaces from VERSION (#1392) --- src/define.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/define.sh b/src/define.sh index 9b47786..ae32c24 100644 --- a/src/define.sh +++ b/src/define.sh @@ -23,7 +23,8 @@ parseVersion() { if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then VERSION="${VERSION:1:-1}" fi - + + VERSION=`expr "$VERSION" : "^\ *\(.*[^ ]\)\ *$"` [ -z "$VERSION" ] && VERSION="win11" case "${VERSION,,}" in From 05330ff64ced60064f1762a7df7a6f9fcdc299cf Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 17:39:29 +0200 Subject: [PATCH 424/505] fix: Shellcheck warning (#1393) --- src/define.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/define.sh b/src/define.sh index ae32c24..7bbe4f3 100644 --- a/src/define.sh +++ b/src/define.sh @@ -24,7 +24,7 @@ parseVersion() { VERSION="${VERSION:1:-1}" fi - VERSION=`expr "$VERSION" : "^\ *\(.*[^ ]\)\ *$"` + VERSION=$(expr "$VERSION" : "^\ *\(.*[^ ]\)\ *$") [ -z "$VERSION" ] && VERSION="win11" case "${VERSION,,}" in From 2239792fa93664d0ae354a1856f7fc155800bb7a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Sep 2025 16:17:42 +0200 Subject: [PATCH 425/505] feat: Allow for easier switching between versions (#1398) When the VERSION variable is changed, it will now automaticly clean the /storage folder instead of warning the user to manually do it. --- src/define.sh | 2 +- src/install.sh | 86 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 53 insertions(+), 35 deletions(-) diff --git a/src/define.sh b/src/define.sh index 7bbe4f3..4884f5d 100644 --- a/src/define.sh +++ b/src/define.sh @@ -23,7 +23,7 @@ parseVersion() { if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then VERSION="${VERSION:1:-1}" fi - + VERSION=$(expr "$VERSION" : "^\ *\(.*[^ ]\)\ *$") [ -z "$VERSION" ] && VERSION="win11" diff --git a/src/install.sh b/src/install.sh index 818f52f..8f93973 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1,10 +1,8 @@ #!/usr/bin/env bash set -Eeuo pipefail -TMP="$STORAGE/tmp" -DIR="$TMP/unpack" -FB="falling back to manual installation!" ETFS="boot/etfsboot.com" +FB="falling back to manual installation!" EFISYS="efi/microsoft/boot/efisys_noprompt.bin" skipInstall() { @@ -16,28 +14,52 @@ skipInstall() { local previous="$STORAGE/windows.base" if [ -f "$previous" ]; then + previous=$(<"$previous") previous="${previous//[![:print:]]/}" + if [ -n "$previous" ]; then if [[ "${STORAGE,,}/${previous,,}" != "${iso,,}" ]]; then - if [ -f "$boot" ] && hasDisk; then - if [[ "${iso,,}" == "${STORAGE,,}/windows."* ]]; then - method="your custom .iso file" - else - if [[ "${previous,,}" != "windows."* ]]; then - method="the VERSION variable" - fi - fi - if [ -n "$method" ]; then - info "Detected that $method was changed, but ignoring this because Windows is already installed." - info "Please start with an empty /storage folder, if you want to install a different version of Windows." - fi - return 0 + + if ! hasDisk; then + + rm -f "$STORAGE/$previous" + return 1 + fi - rm -f "$STORAGE/$previous" + + if [[ "${iso,,}" == "${STORAGE,,}/windows."* ]]; then + method="your custom .iso file was changed" + else + if [[ "${previous,,}" != "windows."* ]]; then + method="the VERSION variable was changed" + else + method="your custom .iso file was removed" + + if [ -f "$boot" ]; then + info "Detected that $method, will be ignored." + return 0 + fi + + fi + fi + + info "Detected that $method, creating a backup of your previous installation..." + + local dir="$STORAGE/${previous%.*}.old" + + rm -rf "$dir" + mkdir -p "$dir" + + [ -f "$STORAGE/$previous" ] && mv -f "$STORAGE/$previous" "$dir/" + find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -exec mv -n {} "$dir/" \; + find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -exec mv -n {} "$dir/" \; + return 1 + fi fi + fi [ -f "$boot" ] && hasDisk && return 0 @@ -51,8 +73,10 @@ skipInstall() { byte="16" && [[ "$MANUAL" == [Yy1]* ]] && byte="17" if [[ "$magic" != "$byte" ]]; then + info "The ISO will be processed again because the configuration was changed..." return 1 + fi return 0 @@ -88,9 +112,11 @@ startInstall() { fi + TMP="$STORAGE/tmp" + rm -rf "$TMP" + skipInstall "$BOOT" && return 1 - rm -rf "$TMP" mkdir -p "$TMP" if [ -z "$CUSTOM" ]; then @@ -105,6 +131,10 @@ startInstall() { fi rm -f "$BOOT" + + find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -delete + find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -delete + return 0 } @@ -126,16 +156,6 @@ finishInstall() { fi fi - rm -f "$STORAGE/windows.old" - rm -f "$STORAGE/windows.vga" - rm -f "$STORAGE/windows.net" - rm -f "$STORAGE/windows.usb" - rm -f "$STORAGE/windows.args" - rm -f "$STORAGE/windows.base" - rm -f "$STORAGE/windows.boot" - rm -f "$STORAGE/windows.mode" - rm -f "$STORAGE/windows.type" - cp -f /run/version "$STORAGE/windows.ver" if [[ "$iso" == "$STORAGE/"* ]]; then @@ -612,8 +632,7 @@ detectImage() { warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - wim=$(find "$src" -maxdepth 1 -type f -iname install.wim -print -quit) - [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname install.esd -print -quit) + wim=$(find "$src" -maxdepth 1 -type f \( -iname install.wim -or -iname install.esd \) -print -quit) if [ ! -f "$wim" ]; then warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1 @@ -913,8 +932,7 @@ updateImage() { error "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - wim=$(find "$src" -maxdepth 1 -type f -iname boot.wim -print -quit) - [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname boot.esd -print -quit) + wim=$(find "$src" -maxdepth 1 -type f \( -iname boot.wim -or -iname boot.esd \) -print -quit) if [ ! -f "$wim" ]; then error "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 @@ -1076,8 +1094,6 @@ buildImage() { bootWindows() { - rm -rf "$TMP" - if [ -f "$STORAGE/windows.args" ]; then ARGS=$(<"$STORAGE/windows.args") ARGS="${ARGS//[![:print:]]/}" @@ -1145,6 +1161,8 @@ if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then fi fi +DIR="$TMP/unpack" + if ! extractImage "$ISO" "$DIR" "$VERSION"; then rm -f "$ISO" 2> /dev/null || true exit 62 From d08b7aeb27387c41c2e0ba47872c95cd8f41a1b7 Mon Sep 17 00:00:00 2001 From: Sultaniiazov David <x1z53@yandex.ru> Date: Wed, 17 Sep 2025 17:18:53 +0300 Subject: [PATCH 426/505] fix: Typo (#1397) --- src/mido.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mido.sh b/src/mido.sh index 4971b11..be21509 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -689,7 +689,7 @@ downloadImage() { if isESD "$version" "$lang"; then if [[ "$tried" != "n" ]]; then - info "Failed to download $desc, will try a diferent method now..." + info "Failed to download $desc, will try a different method now..." fi tried="y" From 0903fad26b617ac68e469ee88ff5b7898d539434 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Sep 2025 17:24:41 +0200 Subject: [PATCH 427/505] feat: Backup disk image (#1399) --- src/install.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index 8f93973..3c37693 100644 --- a/src/install.sh +++ b/src/install.sh @@ -44,7 +44,7 @@ skipInstall() { fi fi - info "Detected that $method, creating a backup of your previous installation..." + info "Detected that $method, a backup of your previous installation will be saved..." local dir="$STORAGE/${previous%.*}.old" @@ -52,8 +52,8 @@ skipInstall() { mkdir -p "$dir" [ -f "$STORAGE/$previous" ] && mv -f "$STORAGE/$previous" "$dir/" - find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -exec mv -n {} "$dir/" \; find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -exec mv -n {} "$dir/" \; + find "$STORAGE" -maxdepth 1 -type f \( -iname 'data.*' -or -iname 'windows.*' \) -exec mv -n {} "$dir/" \; return 1 @@ -132,6 +132,7 @@ startInstall() { rm -f "$BOOT" + find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -delete find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -delete find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -delete From ef850e98373945e81fd64e8436d4363dfa1de9fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Sep 2025 19:20:08 +0200 Subject: [PATCH 428/505] chore(deps): update qemux/qemu docker tag to v7.13 (#1400) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index cb8715c..e8c991f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.12 / / +COPY --from=qemux/qemu:7.13 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From d25e18c0c52c637f87531043919f0bd47d516afd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 18 Sep 2025 12:10:53 +0200 Subject: [PATCH 429/505] feat: Backup installation when switching versions (#1402) --- src/define.sh | 13 +++++++++++ src/install.sh | 62 ++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 63 insertions(+), 12 deletions(-) diff --git a/src/define.sh b/src/define.sh index 4884f5d..33d1d45 100644 --- a/src/define.sh +++ b/src/define.sh @@ -135,6 +135,10 @@ parseVersion() { "2003" | "2003r2" | "win2003" | "win2003r2" | "windows2003" | "windows 2003" ) VERSION="win2003r2" ;; + "nano11" | "nano 11" ) + VERSION="nano11" + [ -z "$DETECTED" ] && DETECTED="win11x64" + ;; "core11" | "core 11" ) VERSION="core11" [ -z "$DETECTED" ] && DETECTED="win11x64" @@ -432,6 +436,7 @@ printVersion() { "tiny11"* ) desc="Tiny 11" ;; "tiny10"* ) desc="Tiny 10" ;; "core11"* ) desc="Core 11" ;; + "nano11"* ) desc="Nano 11" ;; "win7"* ) desc="Windows 7" ;; "win8"* ) desc="Windows 8" ;; "win10"* ) desc="Windows 10" ;; @@ -570,6 +575,9 @@ fromFile() { *"winvista"* | *"win_vista"* | *"windowsvista"* | *"windows_vista"* ) id="winvista${arch}" ;; + "nano11"* | "nano_11"* ) + id="nano11" + ;; "tiny11core"* | "tiny11_core"* | "tiny_11_core"* ) id="core11" ;; @@ -1093,6 +1101,11 @@ getLink4() { [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in + "nano11" ) + size=2463565824 + sum="a1e0614372768cbe2d24de74b78a4a97bc1017ea5080dfed1d2125e4a527eb1a" + url="nano11_25h2/nano11%2025h2.iso" + ;; "core11" ) size=2159738880 sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" diff --git a/src/install.sh b/src/install.sh index 3c37693..dc8cc0a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -5,6 +5,48 @@ ETFS="boot/etfsboot.com" FB="falling back to manual installation!" EFISYS="efi/microsoft/boot/efisys_noprompt.bin" +backup () { + + local count=1 + local iso="$1" + local name="unknown" + local root="$STORAGE/backups" + local previous="$STORAGE/windows.base" + + if [ -f "$previous" ]; then + + previous=$(<"$previous") + previous="${previous//[![:print:]]/}" + + [ -n "$previous" ] && name="${previous%.*}" + + fi + + mkdir -p "$root" + local folder="$name" + local dir="$root/$folder" + + while [ -d "$dir" ] + do + count=$((count+1)) + folder="${name}.${count}" + dir="$root/$folder" + done + + rm -rf "$dir" + mkdir -p "$dir" + + [ -f "$iso" ] && mv -f "$iso" "$dir/" + find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \; + find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \; + find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -exec mv -n {} "$dir/" \; + + [ -z "$(ls -A "$dir")" ] && rm -rf "$dir" + [ -z "$(ls -A "$root")" ] && rm -rf "$root" + + return 0 +} + skipInstall() { local iso="$1" @@ -45,15 +87,7 @@ skipInstall() { fi info "Detected that $method, a backup of your previous installation will be saved..." - - local dir="$STORAGE/${previous%.*}.old" - - rm -rf "$dir" - mkdir -p "$dir" - - [ -f "$STORAGE/$previous" ] && mv -f "$STORAGE/$previous" "$dir/" - find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -exec mv -n {} "$dir/" \; - find "$STORAGE" -maxdepth 1 -type f \( -iname 'data.*' -or -iname 'windows.*' \) -exec mv -n {} "$dir/" \; + ! backup "$STORAGE/$previous" && error "Backup failed!" return 1 @@ -117,6 +151,10 @@ startInstall() { skipInstall "$BOOT" && return 1 + if hasDisk; then + ! backup "" && error "Backup failed!" + fi + mkdir -p "$TMP" if [ -z "$CUSTOM" ]; then @@ -132,7 +170,7 @@ startInstall() { rm -f "$BOOT" - find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -delete + find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -delete find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -delete find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -delete @@ -322,7 +360,7 @@ extractESD() { fi local esdImageCount - esdImageCount=$(wimlib-imagex info "$iso" | iconv -f UTF-16LE -t UTF-8 | awk '/Image Count:/ {print $3}') + esdImageCount=$(wimlib-imagex info "$iso" | awk '/Image Count:/ {print $3}') if [ -z "$esdImageCount" ]; then error "Cannot read the image count in ESD file!" && return 1 @@ -369,7 +407,7 @@ extractESD() { fi for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do - imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | iconv -f UTF-16LE -t UTF-8 | grep '^Description:' | sed 's/Description:[ \t]*//') + imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//') [[ "${imageEdition,,}" != "${edition,,}" ]] && continue wimlib-imagex export "$iso" ${imageIndex} "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || { retVal=$? From d9211a77df67a659bac9458636da76a96a31d4a4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 18 Sep 2025 22:53:16 +0200 Subject: [PATCH 430/505] feat: Update command to set user password policy (#1407) --- assets/win11x64-enterprise-eval.xml | 2 +- assets/win11x64-enterprise.xml | 2 +- assets/win11x64-iot.xml | 2 +- assets/win11x64-ltsc.xml | 2 +- assets/win11x64.xml | 2 +- assets/win2025-eval.xml | 2 +- assets/win2025.xml | 2 +- src/install.sh | 1 + 8 files changed, 8 insertions(+), 7 deletions(-) diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 39caac3..a354801 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -358,7 +358,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 1c18bf7..99d86a5 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -361,7 +361,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 3ee4107..699d176 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -361,7 +361,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 5bc5187..20cbfd4 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -361,7 +361,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index f3fc68c..4919df1 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -361,7 +361,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index d86f152..d781af7 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -257,7 +257,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win2025.xml b/assets/win2025.xml index d488ae2..f6974f6 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -260,7 +260,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/src/install.sh b/src/install.sh index dc8cc0a..46bc3fd 100644 --- a/src/install.sh +++ b/src/install.sh @@ -790,6 +790,7 @@ updateXML() { user=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') if [ -n "$user" ]; then + sed -i "s/-name \"Docker\"/-name \"$user\"/g" "$asset" sed -i "s/<Name>Docker<\/Name>/<Name>$user<\/Name>/g" "$asset" sed -i "s/where name=\"Docker\"/where name=\"$user\"/g" "$asset" sed -i "s/<FullName>Docker<\/FullName>/<FullName>$user<\/FullName>/g" "$asset" From 9b4cd5a74553050fd5fdad0db15d8ff390aa52d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 22:57:39 +0200 Subject: [PATCH 431/505] chore(deps): update qemux/qemu docker tag to v7.14 (#1408) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e8c991f..149b0a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.13 / / +COPY --from=qemux/qemu:7.14 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 06518d8eb375d68b0e25801e4eee63e2d3fa7aca Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 20 Sep 2025 13:51:51 +0200 Subject: [PATCH 432/505] feat: Resume failed downloads (#1410) --- src/mido.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index be21509..25aec22 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -569,7 +569,6 @@ downloadFile() { local msg="Downloading $desc" local rc total total_gb progress domain dots agent space folder - rm -f "$iso" agent=$(get_agent) if [ -n "$size" ] && [[ "$size" != "0" ]]; then @@ -600,7 +599,7 @@ downloadFile() { info "$msg..." [[ "$DEBUG" == [Yy1]* ]] && echo "Downloading: $url" - { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || : + { wget "$url" -O "$iso" --continue -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || : fKill "progress.sh" @@ -639,6 +638,8 @@ downloadImage() { base=$(basename "$iso") desc=$(fromFile "$base") + + rm -f "$iso" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 @@ -677,6 +678,8 @@ downloadImage() { if [[ "$success" == "y" ]]; then size=$(getMido "$version" "$lang" "size" ) sum=$(getMido "$version" "$lang" "sum") + + rm -f "$iso" downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 @@ -704,6 +707,8 @@ downloadImage() { if [[ "$success" == "y" ]]; then ISO="${ISO%.*}.esd" + + rm -f "$ISO" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 @@ -718,12 +723,16 @@ downloadImage() { url=$(getLink "$i" "$version" "$lang") if [ -n "$url" ]; then + if [[ "$tried" != "n" ]]; then info "Failed to download $desc, will try another mirror now..." fi + tried="y" size=$(getSize "$i" "$version" "$lang") sum=$(getHash "$i" "$version" "$lang") + + rm -f "$iso" downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 From ea3003dec5f03e5b1abde64130318bdf006a1db6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 20 Sep 2025 23:54:03 +0200 Subject: [PATCH 433/505] fix: Simplify conditional checks (#1411) --- src/define.sh | 12 ++++++------ src/install.sh | 6 +++--- src/mido.sh | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/define.sh b/src/define.sh index 33d1d45..31df027 100644 --- a/src/define.sh +++ b/src/define.sh @@ -718,7 +718,7 @@ getMido() { local sum="" local size="" - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in "win11x64" ) @@ -812,7 +812,7 @@ getLink1() { local size="" local host="https://dl.bobpony.com/windows" - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in "win11x64" | "win11x64-enterprise" | "win11x64-enterprise-eval" ) @@ -956,7 +956,7 @@ getLink2() { local size="" local host="https://files.dog/MSDN" - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in "win81x64" ) @@ -1055,7 +1055,7 @@ getLink3() { local size="" local host="https://nixsys.com/drivers" - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in "win7x64" | "win7x64-ultimate" ) @@ -1098,7 +1098,7 @@ getLink4() { local size="" local host="https://archive.org/download" - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in "nano11" ) @@ -1406,7 +1406,7 @@ prepareInstall() { error "Failed to locate directory \"$target\" in $desc ISO image!" && return 1 fi - if [[ "${driver,,}" == "xp" ]] || [[ "${driver,,}" == "2k3" ]]; then + if [[ "${driver,,}" == "xp" || "${driver,,}" == "2k3" ]]; then local msg="Adding drivers to image..." info "$msg" && html "$msg" diff --git a/src/install.sh b/src/install.sh index 46bc3fd..084bbd2 100644 --- a/src/install.sh +++ b/src/install.sh @@ -212,7 +212,7 @@ finishInstall() { fi else # Enable secure boot + TPM on manual installs as Win11 requires - if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then + if [[ "$MANUAL" == [Yy1]* || "$aborted" == [Yy1]* ]]; then if [[ "${DETECTED,,}" == "win11"* ]]; then BOOT_MODE="windows_secure" echo "$BOOT_MODE" > "$STORAGE/windows.mode" @@ -696,7 +696,7 @@ detectImage() { desc=$(printEdition "$DETECTED" "$DETECTED") detectLanguage "$info" - if [[ "${LANGUAGE,,}" != "en" ]] && [[ "${LANGUAGE,,}" != "en-"* ]]; then + if [[ "${LANGUAGE,,}" != "en" && "${LANGUAGE,,}" != "en-"* ]]; then language=$(getLanguage "$LANGUAGE" "desc") desc+=" ($language)" fi @@ -704,7 +704,7 @@ detectImage() { info "Detected: $desc" setXML "" && return 0 - if [[ "$DETECTED" == "win81x86"* ]] || [[ "$DETECTED" == "win10x86"* ]]; then + if [[ "$DETECTED" == "win81x86"* || "$DETECTED" == "win10x86"* ]]; then error "The 32-bit version of $desc is not supported!" && return 1 fi diff --git a/src/mido.sh b/src/mido.sh index 25aec22..a6dada2 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -254,7 +254,7 @@ download_windows_eval() { iso_download_links=$(echo "$iso_download_page_html" | grep -io "$filter") || { # This should only happen if there's been some change to the download endpoint web address - if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then + if [[ "${lang,,}" == "en" || "${lang,,}" == "en-"* ]]; then error "Windows server download page gave us no download link!" else language=$(getLanguage "$lang" "desc") @@ -327,7 +327,7 @@ getWindows() { case "${version,,}" in "win2008r2" | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + if [[ "${lang,,}" != "en" && "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 fi ;; @@ -528,8 +528,8 @@ verifyFile() { local total="$3" local check="$4" - if [ -n "$size" ] && [[ "$total" != "$size" ]] && [[ "$size" != "0" ]]; then - if [[ "$VERIFY" == [Yy1]* ]] || [[ "$DEBUG" == [Yy1]* ]]; then + if [ -n "$size" ] && [[ "$total" != "$size" && "$size" != "0" ]]; then + if [[ "$VERIFY" == [Yy1]* || "$DEBUG" == [Yy1]* ]]; then warn "The downloaded file has a different size ( $total bytes) than expected ( $size bytes). Please report this at $SUPPORT/issues" fi fi @@ -654,7 +654,7 @@ downloadImage() { desc=$(printVersion "$version" "") - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + if [[ "${lang,,}" != "en" && "${lang,,}" != "en-"* ]]; then language=$(getLanguage "$lang" "desc") if ! validVersion "$version" "$lang"; then desc=$(printEdition "$version" "$desc") From bfc9b357e54f374605ddea03b888ff790b5cffcd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 21 Sep 2025 04:45:36 +0200 Subject: [PATCH 434/505] build: Update QEMU base image to v7.15 (#1412) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 149b0a3..bf806ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.14 / / +COPY --from=qemux/qemu:7.15 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 9c08dc7b1e7d3f78f0ef7f40a73e09e968a8a8b0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 21 Sep 2025 15:15:46 +0200 Subject: [PATCH 435/505] fix: Simplify conditional checks (#1413) --- src/define.sh | 10 +++++----- src/install.sh | 36 ++++++++++++++++++------------------ src/power.sh | 2 +- src/samba.sh | 6 +++--- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/define.sh b/src/define.sh index 31df027..efc8c53 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1269,7 +1269,7 @@ getValue() { local type="$4" local func="getLink$1" - if [ "$1" -gt 0 ] && [ "$1" -le "$MIRRORS" ]; then + if [ "$1" -gt 0 && "$1" -le "$MIRRORS" ]; then val=$($func "$id" "$lang" "$type") fi @@ -1394,7 +1394,7 @@ prepareInstall() { ETFS="[BOOT]/Boot-NoEmul.img" - if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then + if [ ! -f "$dir/$ETFS" || ! -s "$dir/$ETFS" ]; then error "Failed to locate file \"$ETFS\" in $desc ISO image!" && return 1 fi @@ -1478,7 +1478,7 @@ prepareInstall() { local key setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit) - if [ -n "$setup" ] && [ -z "$KEY" ]; then + if [ -n "$setup" & -z "$KEY" ]; then pid=$(<"$setup") pid="${pid%$'\r'}" @@ -1795,7 +1795,7 @@ prepareLegacy() { ETFS="boot.img" - [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + [ -f "$dir/$ETFS" && -s "$dir/$ETFS" ] && return 0 rm -f "$dir/$ETFS" local len offset @@ -1806,7 +1806,7 @@ prepareLegacy() { error "Failed to extract boot image from $desc ISO!" && return 1 fi - [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + [ -f "$dir/$ETFS" && -s "$dir/$ETFS" ] && return 0 error "Failed to locate file \"$ETFS\" in $desc ISO image!" return 1 diff --git a/src/install.sh b/src/install.sh index 084bbd2..a490479 100644 --- a/src/install.sh +++ b/src/install.sh @@ -162,7 +162,7 @@ startInstall() { ISO=$(basename "$BOOT") ISO="$TMP/$ISO" - if [ -f "$BOOT" ] && [ -s "$BOOT" ]; then + if [ -f "$BOOT" && -s "$BOOT" ]; then mv -f "$BOOT" "$ISO" fi @@ -183,7 +183,7 @@ finishInstall() { local aborted="$2" local base byte - if [ ! -s "$iso" ] || [ ! -f "$iso" ]; then + if [ ! -s "$iso" || ! -f "$iso" ]; then error "Failed to find ISO file: $iso" && return 1 fi @@ -304,7 +304,7 @@ findFile() { file="$STORAGE/$base" fi - if [ ! -f "$file" ] || [ ! -s "$file" ]; then + if [ ! -f "$file" || ! -s "$file" ]; then return 0 fi @@ -621,11 +621,11 @@ setXML() { error "The bind $file maps to a file that does not exist!" && exit 67 fi - [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" - [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" - [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" - [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/$DETECTED.xml" - [ ! -f "$file" ] || [ ! -s "$file" ] && return 1 + [ ! -f "$file" || ! -s "$file" ] && file="$STORAGE/custom.xml" + [ ! -f "$file" || ! -s "$file" ] && file="/run/assets/custom.xml" + [ ! -f "$file" || ! -s "$file" ] && file="$1" + [ ! -f "$file" || ! -s "$file" ] && file="/run/assets/$DETECTED.xml" + [ ! -f "$file" || ! -s "$file" ] && return 1 XML="$file" return 0 @@ -639,7 +639,7 @@ detectImage() { XML="" - if [ -z "$DETECTED" ] && [ -z "$CUSTOM" ]; then + if [ -z "$DETECTED" && -z "$CUSTOM" ]; then [[ "${version,,}" != "http"* ]] && DETECTED="$version" fi @@ -734,7 +734,7 @@ prepareImage() { if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then - [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ] && return 0 + [ -f "$dir/$ETFS" && -f "$dir/$EFISYS" ] && return 0 missing=$(basename "$dir/$EFISYS") [ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS") @@ -955,7 +955,7 @@ updateImage() { skipVersion "${DETECTED,,}" && return 0 - if [ ! -s "$asset" ] || [ ! -f "$asset" ]; then + if [ ! -s "$asset" || ! -f "$asset" ]; then asset="" if [[ "$MANUAL" != [Yy1]* ]]; then MANUAL="Y" @@ -1140,40 +1140,40 @@ bootWindows() { ARGUMENTS="$ARGS ${ARGUMENTS:-}" fi - if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then + if [ -s "$STORAGE/windows.vga" && -f "$STORAGE/windows.vga" ]; then if [ -z "${VGA:-}" ]; then VGA=$(<"$STORAGE/windows.vga") VGA="${VGA//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.usb" ] && [ -f "$STORAGE/windows.usb" ]; then + if [ -s "$STORAGE/windows.usb" && -f "$STORAGE/windows.usb" ]; then if [ -z "${USB:-}" ]; then USB=$(<"$STORAGE/windows.usb") USB="${USB//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.net" ] && [ -f "$STORAGE/windows.net" ]; then + if [ -s "$STORAGE/windows.net" && -f "$STORAGE/windows.net" ]; then if [ -z "${ADAPTER:-}" ]; then ADAPTER=$(<"$STORAGE/windows.net") ADAPTER="${ADAPTER//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then + if [ -s "$STORAGE/windows.type" && -f "$STORAGE/windows.type" ]; then if [ -z "${DISK_TYPE:-}" ]; then DISK_TYPE=$(<"$STORAGE/windows.type") DISK_TYPE="${DISK_TYPE//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then + if [ -s "$STORAGE/windows.mode" && -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") BOOT_MODE="${BOOT_MODE//[![:print:]]/}" fi - if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then + if [ -s "$STORAGE/windows.old" && -f "$STORAGE/windows.old" ]; then if [[ "${PLATFORM,,}" == "x64" ]]; then MACHINE=$(<"$STORAGE/windows.old") MACHINE="${MACHINE//[![:print:]]/}" @@ -1194,7 +1194,7 @@ if ! startInstall; then exit 68 fi -if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then +if [ ! -s "$ISO" || ! -f "$ISO" ]; then if ! downloadImage "$ISO" "$VERSION" "$LANGUAGE"; then rm -f "$ISO" 2> /dev/null || true exit 61 diff --git a/src/power.sh b/src/power.sh index 9ca5583..7b3fb2d 100644 --- a/src/power.sh +++ b/src/power.sh @@ -91,7 +91,7 @@ finish() { done fi - if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then + if [ ! -f "$STORAGE/windows.boot" && -f "$BOOT" ]; then # Remove CD-ROM ISO after install if ready; then touch "$STORAGE/windows.boot" diff --git a/src/samba.sh b/src/samba.sh index e5b4442..77a3eb5 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -88,9 +88,9 @@ addShare() { } > "/etc/samba/smb.conf" share="/data" -[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" -[ ! -d "$share" ] && [ -d "/shared" ] && share="/shared" -[ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" +[ ! -d "$share" && -d "$STORAGE/data" ] && share="$STORAGE/data" +[ ! -d "$share" && -d "/shared" ] && share="/shared" +[ ! -d "$share" && -d "$STORAGE/shared" ] && share="$STORAGE/shared" if ! addShare "$share" "Data" "Shared"; then error "Failed to add shared folder '$share'. Please check its permissions." && return 0 From 0f918c8cb0cad13aa4b4afb07e11f64b573c50e3 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 21 Sep 2025 23:04:29 +0200 Subject: [PATCH 436/505] revert: Simplify conditional checks (#1414) This reverts commit 9c08dc7b1e7d3f78f0ef7f40a73e09e968a8a8b0. --- src/define.sh | 10 +++++----- src/install.sh | 36 ++++++++++++++++++------------------ src/power.sh | 2 +- src/samba.sh | 6 +++--- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/define.sh b/src/define.sh index efc8c53..31df027 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1269,7 +1269,7 @@ getValue() { local type="$4" local func="getLink$1" - if [ "$1" -gt 0 && "$1" -le "$MIRRORS" ]; then + if [ "$1" -gt 0 ] && [ "$1" -le "$MIRRORS" ]; then val=$($func "$id" "$lang" "$type") fi @@ -1394,7 +1394,7 @@ prepareInstall() { ETFS="[BOOT]/Boot-NoEmul.img" - if [ ! -f "$dir/$ETFS" || ! -s "$dir/$ETFS" ]; then + if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then error "Failed to locate file \"$ETFS\" in $desc ISO image!" && return 1 fi @@ -1478,7 +1478,7 @@ prepareInstall() { local key setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit) - if [ -n "$setup" & -z "$KEY" ]; then + if [ -n "$setup" ] && [ -z "$KEY" ]; then pid=$(<"$setup") pid="${pid%$'\r'}" @@ -1795,7 +1795,7 @@ prepareLegacy() { ETFS="boot.img" - [ -f "$dir/$ETFS" && -s "$dir/$ETFS" ] && return 0 + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 rm -f "$dir/$ETFS" local len offset @@ -1806,7 +1806,7 @@ prepareLegacy() { error "Failed to extract boot image from $desc ISO!" && return 1 fi - [ -f "$dir/$ETFS" && -s "$dir/$ETFS" ] && return 0 + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 error "Failed to locate file \"$ETFS\" in $desc ISO image!" return 1 diff --git a/src/install.sh b/src/install.sh index a490479..084bbd2 100644 --- a/src/install.sh +++ b/src/install.sh @@ -162,7 +162,7 @@ startInstall() { ISO=$(basename "$BOOT") ISO="$TMP/$ISO" - if [ -f "$BOOT" && -s "$BOOT" ]; then + if [ -f "$BOOT" ] && [ -s "$BOOT" ]; then mv -f "$BOOT" "$ISO" fi @@ -183,7 +183,7 @@ finishInstall() { local aborted="$2" local base byte - if [ ! -s "$iso" || ! -f "$iso" ]; then + if [ ! -s "$iso" ] || [ ! -f "$iso" ]; then error "Failed to find ISO file: $iso" && return 1 fi @@ -304,7 +304,7 @@ findFile() { file="$STORAGE/$base" fi - if [ ! -f "$file" || ! -s "$file" ]; then + if [ ! -f "$file" ] || [ ! -s "$file" ]; then return 0 fi @@ -621,11 +621,11 @@ setXML() { error "The bind $file maps to a file that does not exist!" && exit 67 fi - [ ! -f "$file" || ! -s "$file" ] && file="$STORAGE/custom.xml" - [ ! -f "$file" || ! -s "$file" ] && file="/run/assets/custom.xml" - [ ! -f "$file" || ! -s "$file" ] && file="$1" - [ ! -f "$file" || ! -s "$file" ] && file="/run/assets/$DETECTED.xml" - [ ! -f "$file" || ! -s "$file" ] && return 1 + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/$DETECTED.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && return 1 XML="$file" return 0 @@ -639,7 +639,7 @@ detectImage() { XML="" - if [ -z "$DETECTED" && -z "$CUSTOM" ]; then + if [ -z "$DETECTED" ] && [ -z "$CUSTOM" ]; then [[ "${version,,}" != "http"* ]] && DETECTED="$version" fi @@ -734,7 +734,7 @@ prepareImage() { if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then - [ -f "$dir/$ETFS" && -f "$dir/$EFISYS" ] && return 0 + [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ] && return 0 missing=$(basename "$dir/$EFISYS") [ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS") @@ -955,7 +955,7 @@ updateImage() { skipVersion "${DETECTED,,}" && return 0 - if [ ! -s "$asset" || ! -f "$asset" ]; then + if [ ! -s "$asset" ] || [ ! -f "$asset" ]; then asset="" if [[ "$MANUAL" != [Yy1]* ]]; then MANUAL="Y" @@ -1140,40 +1140,40 @@ bootWindows() { ARGUMENTS="$ARGS ${ARGUMENTS:-}" fi - if [ -s "$STORAGE/windows.vga" && -f "$STORAGE/windows.vga" ]; then + if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then if [ -z "${VGA:-}" ]; then VGA=$(<"$STORAGE/windows.vga") VGA="${VGA//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.usb" && -f "$STORAGE/windows.usb" ]; then + if [ -s "$STORAGE/windows.usb" ] && [ -f "$STORAGE/windows.usb" ]; then if [ -z "${USB:-}" ]; then USB=$(<"$STORAGE/windows.usb") USB="${USB//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.net" && -f "$STORAGE/windows.net" ]; then + if [ -s "$STORAGE/windows.net" ] && [ -f "$STORAGE/windows.net" ]; then if [ -z "${ADAPTER:-}" ]; then ADAPTER=$(<"$STORAGE/windows.net") ADAPTER="${ADAPTER//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.type" && -f "$STORAGE/windows.type" ]; then + if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then if [ -z "${DISK_TYPE:-}" ]; then DISK_TYPE=$(<"$STORAGE/windows.type") DISK_TYPE="${DISK_TYPE//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.mode" && -f "$STORAGE/windows.mode" ]; then + if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") BOOT_MODE="${BOOT_MODE//[![:print:]]/}" fi - if [ -s "$STORAGE/windows.old" && -f "$STORAGE/windows.old" ]; then + if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then if [[ "${PLATFORM,,}" == "x64" ]]; then MACHINE=$(<"$STORAGE/windows.old") MACHINE="${MACHINE//[![:print:]]/}" @@ -1194,7 +1194,7 @@ if ! startInstall; then exit 68 fi -if [ ! -s "$ISO" || ! -f "$ISO" ]; then +if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then if ! downloadImage "$ISO" "$VERSION" "$LANGUAGE"; then rm -f "$ISO" 2> /dev/null || true exit 61 diff --git a/src/power.sh b/src/power.sh index 7b3fb2d..9ca5583 100644 --- a/src/power.sh +++ b/src/power.sh @@ -91,7 +91,7 @@ finish() { done fi - if [ ! -f "$STORAGE/windows.boot" && -f "$BOOT" ]; then + if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then # Remove CD-ROM ISO after install if ready; then touch "$STORAGE/windows.boot" diff --git a/src/samba.sh b/src/samba.sh index 77a3eb5..e5b4442 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -88,9 +88,9 @@ addShare() { } > "/etc/samba/smb.conf" share="/data" -[ ! -d "$share" && -d "$STORAGE/data" ] && share="$STORAGE/data" -[ ! -d "$share" && -d "/shared" ] && share="/shared" -[ ! -d "$share" && -d "$STORAGE/shared" ] && share="$STORAGE/shared" +[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" +[ ! -d "$share" ] && [ -d "/shared" ] && share="/shared" +[ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" if ! addShare "$share" "Data" "Shared"; then error "Failed to add shared folder '$share'. Please check its permissions." && return 0 From 4a5e455389c5bd07b793c7d11a0fb63e89e5e564 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Sep 2025 08:25:53 +0200 Subject: [PATCH 437/505] feat: Download older Windows 11 build on ARMv8.0 (#1416) --- src/define.sh | 4 +- src/mido.sh | 125 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 96 insertions(+), 33 deletions(-) diff --git a/src/define.sh b/src/define.sh index 31df027..62a6f9e 100644 --- a/src/define.sh +++ b/src/define.sh @@ -436,7 +436,7 @@ printVersion() { "tiny11"* ) desc="Tiny 11" ;; "tiny10"* ) desc="Tiny 10" ;; "core11"* ) desc="Core 11" ;; - "nano11"* ) desc="Nano 11" ;; + "nano11"* ) desc="Nano 11" ;; "win7"* ) desc="Windows 7" ;; "win8"* ) desc="Windows 8" ;; "win10"* ) desc="Windows 10" ;; @@ -577,7 +577,7 @@ fromFile() { ;; "nano11"* | "nano_11"* ) id="nano11" - ;; + ;; "tiny11core"* | "tiny11_core"* | "tiny_11_core"* ) id="core11" ;; diff --git a/src/mido.sh b/src/mido.sh index a6dada2..5c0b2b5 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -364,6 +364,36 @@ getWindows() { return 0 } +getBuild() { + + local id="$1" + local ret="$2" + local url="" + local name="" + local build="$3" + local edition="" + local file="catalog.xml" + + case "${id,,}" in + "win11${PLATFORM,,}" ) + name="Windows 11 Pro" + url="https://worproject.com/dldserv/esd/getcatalog.php?build=${build}&arch=${PLATFORM^^}&edition=Professional" ;; + "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval") + name="Windows 11 Enterprise" + url="https://worproject.com/dldserv/esd/getcatalog.php?build=${build}&arch=${PLATFORM^^}&edition=Enterprise" ;; + esac + + case "${ret,,}" in + "url" ) echo "$url" ;; + "file" ) echo "$file" ;; + "name" ) echo "$name" ;; + "edition" ) echo "$edition" ;; + *) echo "";; + esac + + return 0 +} + getCatalog() { local id="$1" @@ -371,6 +401,14 @@ getCatalog() { local url="" local name="" local edition="" + local file="catalog.cab" + + if [[ "${id,,}" == "win11"* && "${PLATFORM,,}" != "x64" && "${ARCH,,}" == "arm64" ]]; then + # ARMv8.0 cannot run Windows 11 builds higher than 22631 + if ! grep -qw 'Features.*atomics' /proc/cpuinfo; then + "$(getBuild "$1" "$2" "22631.2861")" && return 0 + fi + fi case "${id,,}" in "win11${PLATFORM,,}" ) @@ -393,8 +431,9 @@ getCatalog() { case "${ret,,}" in "url" ) echo "$url" ;; + "file" ) echo "$file" ;; "name" ) echo "$name" ;; - "edition" ) echo "$edition" ;; + "edition" ) echo '[Edition="'"${edition}"'"]' ;; *) echo "";; esac @@ -407,62 +446,71 @@ getESD() { local version="$2" local lang="$3" local desc="$4" + local file local result local culture local language - local editionName - local winCatalog + local edition + local catalog + file=$(getCatalog "$version" "file") + catalog=$(getCatalog "$version" "url") culture=$(getLanguage "$lang" "culture") - winCatalog=$(getCatalog "$version" "url") - editionName=$(getCatalog "$version" "edition") + edition=$(getCatalog "$version" "edition") - if [ -z "$winCatalog" ] || [ -z "$editionName" ]; then + if [ -z "$file" ] || [ -z "$catalog" ]; then error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 fi - local msg="Downloading product information from Microsoft server..." + local msg="Downloading product information..." info "$msg" && html "$msg" rm -rf "$dir" mkdir -p "$dir" - local wFile="catalog.cab" local xFile="products.xml" local eFile="esd_edition.xml" local fFile="products_filter.xml" - { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30 --no-http-keep-alive; rc=$?; } || : + { wget "$catalog" -O "$dir/$file" -q --timeout=30 --no-http-keep-alive; rc=$?; } || : - msg="Failed to download $winCatalog" + msg="Failed to download $catalog" (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 (( rc == 4 )) && error "$msg , network failure!" && return 1 (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 (( rc != 0 )) && error "$msg , reason: $rc" && return 1 - cd "$dir" + if [[ "$file" == *".xml" ]]; then + + mv -f "$dir/$file" "$dir/$xFile" + + else + + cd "$dir" + + if ! cabextract "$file" > /dev/null; then + cd /run + error "Failed to extract $file!" && return 1 + fi - if ! cabextract "$wFile" > /dev/null; then cd /run - error "Failed to extract $wFile!" && return 1 - fi - cd /run + fi if [ ! -s "$dir/$xFile" ]; then - error "Failed to find $xFile in $wFile!" && return 1 + error "Failed to find $xFile in $file!" && return 1 fi - local edQuery='//File[Architecture="'${PLATFORM,,}'"][Edition="'${editionName}'"]' + local edQuery='//File[Architecture="'${PLATFORM,,}'"]'"${edition}"'' result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null) if [ -z "$result" ]; then - edQuery='//File[Architecture="'${PLATFORM^^}'"][Edition="'${editionName}'"]' + edQuery='//File[Architecture="'${PLATFORM^^}'"]'"${edition}"'' + result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null) if [ -z "$result" ]; then - desc=$(printEdition "$version" "$desc") language=$(getLanguage "$lang" "desc") error "No download link available for $desc!" && return 1 @@ -623,25 +671,40 @@ downloadFile() { return 1 } +delay() { + + local i + local delay="$1" + local msg="Will retry in X seconds..." + + info "${msg/X/$delay}" + + for i in $(seq "$delay" -1 1); do + html "${msg/X/$i}" + sleep 1 + done + + return 0 +} + downloadImage() { local iso="$1" local version="$2" local lang="$3" - local delay=5 local tried="n" local success="n" + local seconds="5" local url sum size base desc language - local msg="Will retry after $delay seconds..." if [[ "${version,,}" == "http"* ]]; then base=$(basename "$iso") desc=$(fromFile "$base") - rm -f "$iso" + rm -f "$iso" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 rm -f "$iso" @@ -671,7 +734,7 @@ downloadImage() { if getWindows "$version" "$lang" "$desc"; then success="y" else - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" getWindows "$version" "$lang" "$desc" && success="y" fi @@ -679,9 +742,9 @@ downloadImage() { size=$(getMido "$version" "$lang" "size" ) sum=$(getMido "$version" "$lang" "sum") - rm -f "$iso" + rm -f "$iso" downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 rm -f "$iso" fi @@ -701,7 +764,7 @@ downloadImage() { if getESD "$TMP/esd" "$version" "$lang" "$desc"; then success="y" else - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" getESD "$TMP/esd" "$version" "$lang" "$desc" && success="y" fi @@ -710,7 +773,7 @@ downloadImage() { rm -f "$ISO" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 rm -f "$ISO" ISO="$iso" @@ -727,14 +790,14 @@ downloadImage() { if [[ "$tried" != "n" ]]; then info "Failed to download $desc, will try another mirror now..." fi - + tried="y" size=$(getSize "$i" "$version" "$lang") sum=$(getHash "$i" "$version" "$lang") - rm -f "$iso" + rm -f "$iso" downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 rm -f "$iso" fi From e56f059bd2023548214738f8a88a620b70ed141e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Sep 2025 09:33:42 +0200 Subject: [PATCH 438/505] feat: Implement ARM compatibility check for Windows 11 (#1417) --- src/define.sh | 4 ++++ src/mido.sh | 6 ++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/define.sh b/src/define.sh index 62a6f9e..9da1979 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1885,6 +1885,10 @@ skipVersion() { return 1 } +isCompatible() { + return 0 +} + setMachine() { local id="$1" diff --git a/src/mido.sh b/src/mido.sh index 5c0b2b5..dba6dfb 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -403,11 +403,9 @@ getCatalog() { local edition="" local file="catalog.cab" - if [[ "${id,,}" == "win11"* && "${PLATFORM,,}" != "x64" && "${ARCH,,}" == "arm64" ]]; then + if [[ "${id,,}" == "win11"* ]] && ! isCompatible; then # ARMv8.0 cannot run Windows 11 builds higher than 22631 - if ! grep -qw 'Features.*atomics' /proc/cpuinfo; then - "$(getBuild "$1" "$2" "22631.2861")" && return 0 - fi + getBuild "$1" "$2" "22631.2861" && return 0 fi case "${id,,}" in From a14426478c4e699cd3ff80dea4e650924fff2016 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 21:31:28 +0200 Subject: [PATCH 439/505] chore(deps): update hadolint/hadolint-action action to v3.3.0 (#1418) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 71c2d33..788a2b0 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -18,7 +18,7 @@ jobs: path: "assets" file-endings: ".xml" - name: Lint Dockerfile - uses: hadolint/hadolint-action@v3.2.0 + uses: hadolint/hadolint-action@v3.3.0 with: dockerfile: Dockerfile ignore: DL3006,DL3008 From 221f4feac379115ae359dd15fe215a23af3703ea Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Sep 2025 21:38:24 +0200 Subject: [PATCH 440/505] build: Update QEMU base image to v7.16 (#1419) --- Dockerfile | 2 +- src/mido.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index bf806ce..207c6a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.15 / / +COPY --from=qemux/qemu:7.16 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/mido.sh b/src/mido.sh index dba6dfb..2ac83ac 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -404,7 +404,7 @@ getCatalog() { local file="catalog.cab" if [[ "${id,,}" == "win11"* ]] && ! isCompatible; then - # ARMv8.0 cannot run Windows 11 builds higher than 22631 + # ARMv8.0 cannot run Windows 11 builds 24H2 and up. getBuild "$1" "$2" "22631.2861" && return 0 fi From 5425783f5cd0e659f1551399964d75614ba7ef51 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 23 Sep 2025 16:17:31 +0200 Subject: [PATCH 441/505] feat: Update information (#1421) --- src/mido.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mido.sh b/src/mido.sh index 2ac83ac..2d1dc00 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -460,7 +460,7 @@ getESD() { error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 fi - local msg="Downloading product information..." + local msg="Downloading catalog..." info "$msg" && html "$msg" rm -rf "$dir" From c8b4cb9c141e323bff909552a1ac9f11769e23c6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 23 Sep 2025 16:55:11 +0200 Subject: [PATCH 442/505] feat: Surpress errors when setting permissions (#1422) --- src/samba.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index e5b4442..6c3d38f 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -111,10 +111,10 @@ for dir in "${dirs[@]}"; do addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" done -# Fix Samba permissions -[ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock -[ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores -[ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock +# Try to fix Samba permissions +[ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock 2>/dev/null || : +[ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores 2>/dev/null || : +[ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock 2>/dev/null || : if ! smbd; then error "Samba daemon failed to start!" From fa7302fd1844dc245c9867c7a1b5d9073a5f8e03 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 24 Sep 2025 16:38:22 +0200 Subject: [PATCH 443/505] build: Update QEMU base image to v7.17 (#1427) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 207c6a3..3b6a971 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.16 / / +COPY --from=qemux/qemu:7.17 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 021d0c88f156723de558d8355acb8b1fbb908d3b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 00:47:36 +0200 Subject: [PATCH 444/505] chore(deps): update qemux/qemu docker tag to v7.18 (#1434) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3b6a971..717e221 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.17 / / +COPY --from=qemux/qemu:7.18 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 6707de3db462934ee3100eb7b26d924775866191 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 30 Sep 2025 10:08:39 +0200 Subject: [PATCH 445/505] feat: Hide Windows Copilot button by default (#1435) --- assets/win10x64-enterprise-eval.xml | 29 ++++++++++++++---------- assets/win10x64-enterprise.xml | 29 ++++++++++++++---------- assets/win10x64-iot.xml | 29 ++++++++++++++---------- assets/win10x64-ltsc.xml | 29 ++++++++++++++---------- assets/win10x64.xml | 29 ++++++++++++++---------- assets/win11x64-enterprise-eval.xml | 35 ++++++++++++++++------------- assets/win11x64-enterprise.xml | 35 ++++++++++++++++------------- assets/win11x64-iot.xml | 35 ++++++++++++++++------------- assets/win11x64-ltsc.xml | 35 ++++++++++++++++------------- assets/win11x64.xml | 35 ++++++++++++++++------------- assets/win2025-eval.xml | 18 +++++++-------- assets/win2025.xml | 18 +++++++-------- 12 files changed, 203 insertions(+), 153 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index f91811f..05a0437 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -355,66 +355,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index dc0b0d7..742a6d9 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -358,66 +358,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 08741af..05ffaf5 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -364,66 +364,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index e3823a9..8700e26 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -361,66 +361,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 969ffe3..d863512 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -358,66 +358,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index a354801..ea321ad 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -378,81 +378,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 99d86a5..e76caad 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -381,81 +381,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 699d176..ae4282d 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -381,81 +381,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 20cbfd4..bc27ec0 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -381,81 +381,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 4919df1..53e73bb 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -381,81 +381,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index d781af7..ff7f7fa 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -277,34 +277,34 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>14</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Remove Search from the Taskbar</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2025.xml b/assets/win2025.xml index f6974f6..c67965f 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -280,34 +280,34 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>14</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Remove Search from the Taskbar</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> From b308de3472828bc6f51da0156c22cf83bc8f709e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 30 Sep 2025 10:28:37 +0200 Subject: [PATCH 446/505] feat: Add Windows 11 25H2 download mirror (#1436) --- src/define.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/src/define.sh b/src/define.sh index 9da1979..64e6ecb 100644 --- a/src/define.sh +++ b/src/define.sh @@ -724,6 +724,7 @@ getMido() { "win11x64" ) size=5819484160 sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENT_CONSUMER_x64FRE_en-us.iso" ;; "win11x64-enterprise-eval" ) size=5387960320 From 6be89c929e10d4597f409cab5dfd12232f8d266e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:17:26 +0200 Subject: [PATCH 447/505] build: Update QEMU base image to v7.19 (#1438) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 717e221..f28ad59 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.18 / / +COPY --from=qemux/qemu:7.19 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From f8dcd825021983ff6ed1f8f958d8ebb67cad8815 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 1 Oct 2025 16:58:49 +0200 Subject: [PATCH 448/505] feat: Add Windows 11 25H2 download (#1439) --- readme.md | 4 ++-- src/define.sh | 10 +++++----- src/mido.sh | 27 +++++++++++++++++++++------ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/readme.md b/readme.md index 1c41efa..ede4afa 100644 --- a/readme.md +++ b/readme.md @@ -93,9 +93,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | **Value** | **Version** | **Size** | |---|---|---| - | `11` | Windows 11 Pro | 5.4 GB | + | `11` | Windows 11 Pro | 7.2 GB | | `11l` | Windows 11 LTSC | 4.7 GB | - | `11e` | Windows 11 Enterprise | 5.3 GB | + | `11e` | Windows 11 Enterprise | 6.6 GB | |||| | `10` | Windows 10 Pro | 5.7 GB | | `10l` | Windows 10 LTSC | 4.6 GB | diff --git a/src/define.sh b/src/define.sh index 64e6ecb..f14e330 100644 --- a/src/define.sh +++ b/src/define.sh @@ -722,14 +722,14 @@ getMido() { case "${id,,}" in "win11x64" ) - size=5819484160 - sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" + size=7736125440 + sum="d141f6030fed50f75e2b03e1eb2e53646c4b21e5386047cb860af5223f102a32" url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENT_CONSUMER_x64FRE_en-us.iso" ;; "win11x64-enterprise-eval" ) - size=5387960320 - sum="755a90d43e826a74b9e1932a34788b898e028272439b777e5593dee8d53622ae" - url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENTENTERPRISEEVAL_OEMRET_A64FRE_en-us.iso" + size=7092807680 + sum="a61adeab895ef5a4db436e0a7011c92a2ff17bb0357f58b13bbc4062e535e7b9" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso" ;; "win11x64-enterprise-iot-eval" | "win11x64-enterprise-ltsc-eval" ) size=5060020224 diff --git a/src/mido.sh b/src/mido.sh index 2d1dc00..b4a0643 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -171,6 +171,8 @@ download_windows() { return 1 fi + [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" + MIDO_URL="$iso_download_link" return 0 } @@ -274,8 +276,6 @@ download_windows_eval() { fi ;; "arm64" ) iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; - * ) - error "Invalid platform specified, value \"$PLATFORM\" is not recognized!" && return 1 ;; esac ;; "enterprise" ) case "${PLATFORM,,}" in @@ -287,16 +287,16 @@ download_windows_eval() { fi ;; "arm64" ) iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; - * ) - error "Invalid platform specified, value \"$PLATFORM\" is not recognized!" && return 1 ;; esac ;; "server" ) - iso_download_link=$(echo "$iso_download_links" | head -n 1) ;; + case "${PLATFORM,,}" in + "x64" ) + iso_download_link=$(echo "$iso_download_links" | head -n 1) ;; + esac ;; * ) error "Invalid type specified, value \"$enterprise_type\" is not recognized!" && return 1 ;; esac - [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" [ -z "$iso_download_link" ] && error "Could not parse download link from page!" && return 1 # Follow redirect so proceeding log message is useful @@ -308,6 +308,21 @@ download_windows_eval() { return $? } + [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" + + case "${PLATFORM,,}" in + "x64" ) + if [[ "${iso_download_link,,}" != *"x64"* ]]; then + error "Download link is for the wrong platform? Please report this at $SUPPORT/issues" + return 1 + fi ;; + "arm64" ) + if [[ "${iso_download_link,,}" != *"a64"* && "${iso_download_link,,}" != *"arm64"* ]]; then + [[ "$DEBUG" == [Yy1]* ]] && echo "Link for ARM platform currently not available!" + return 1 + fi ;; + esac + MIDO_URL="$iso_download_link" return 0 } From 8a2f23275e03c1864e2037c4e46afda3c48d9661 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 Oct 2025 17:17:23 +0200 Subject: [PATCH 449/505] chore(deps): update peter-evans/dockerhub-description action to v5 (#1440) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/hub.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/hub.yml b/.github/workflows/hub.yml index 263e97c..0b2c17e 100644 --- a/.github/workflows/hub.yml +++ b/.github/workflows/hub.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v5 - name: Docker Hub Description - uses: peter-evans/dockerhub-description@v4 + uses: peter-evans/dockerhub-description@v5 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} From e945e852dc090b58885bab6a12f25fd219bad5a7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 1 Oct 2025 17:34:13 +0200 Subject: [PATCH 450/505] feat: Verify download link (#1441) --- src/mido.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/mido.sh b/src/mido.sh index b4a0643..2f35442 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -184,6 +184,7 @@ download_windows_eval() { local desc="$3" local filter="" local culture="" + local compare="" local language="" local user_agent="" local enterprise_type="" @@ -323,6 +324,13 @@ download_windows_eval() { fi ;; esac + if [[ "$DEBUG" == [Yy1]* && "$VERIFY" == [Yy1]* && "${lang,,}" == "en"* ]]; then + compare=$(getMido "$id" "$lang" "") + if [[ "${iso_download_link,,}" != "${compare,,}" ]]; then + echo "Retrieved link does not match the fixed link: $compare" + fi + fi + MIDO_URL="$iso_download_link" return 0 } From fde0ae7c4ba2a91fd2af135d8741da965a8d25dd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 2 Oct 2025 10:46:20 +0200 Subject: [PATCH 451/505] feat: Add additional debug messages (#1442) --- src/samba.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/samba.sh b/src/samba.sh index 6c3d38f..ca54266 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -18,6 +18,9 @@ if [[ "${NETWORK,,}" == "user"* ]]; then interface="127.0.0.1" fi +html "Starting file sharing services..." +[[ "$DEBUG" == [Yy1]* ]] && echo "Starting Samba daemon..." + addShare() { local dir="$1" local name="$2" @@ -123,12 +126,14 @@ fi if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then # Enable NetBIOS on Windows 7 and lower + [[ "$DEBUG" == [Yy1]* ]] && echo "Starting NetBIOS daemon..." if ! nmbd; then error "NetBIOS daemon failed to start!" nmbd -i --debug-stdout || true fi else # Enable Web Service Discovery on Vista and up + [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Web Service Discovery daemon..." wsddn -i "$interface" -H "$hostname" --pid-file=/var/run/wsdd.pid >/dev/null & fi From eeb34252115515aef9077b2d5183ee88081bfd8a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 2 Oct 2025 20:04:15 +0200 Subject: [PATCH 452/505] feat: Enhanced Samba debugging (#1444) --- src/samba.sh | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index ca54266..b35307b 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash set -Eeuo pipefail -: "${SAMBA:="Y"}" +: "${SAMBA:="Y"}" # Enable Samba +: "${SAMBA_DEBUG:="N"}" # Disable debug +: "${SAMBA_LEVEL:="1"}" # Debug log level [[ "$SAMBA" == [Nn]* ]] && return 0 [[ "$NETWORK" == [Nn]* ]] && return 0 @@ -18,7 +20,7 @@ if [[ "${NETWORK,,}" == "user"* ]]; then interface="127.0.0.1" fi -html "Starting file sharing services..." +html "Initializing shared folder..." [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Samba daemon..." addShare() { @@ -119,22 +121,44 @@ done [ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores 2>/dev/null || : [ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock 2>/dev/null || : -if ! smbd; then - error "Samba daemon failed to start!" - smbd -i --debug-stdout || true +if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then + if ! smbd; then + SAMBA_DEBUG="Y" + error "Samba daemon failed to start!" + fi +fi + +if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then + smbd -i -d "$SAMBA_LEVEL" --debug-stdout & fi if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then + # Enable NetBIOS on Windows 7 and lower [[ "$DEBUG" == [Yy1]* ]] && echo "Starting NetBIOS daemon..." - if ! nmbd; then - error "NetBIOS daemon failed to start!" - nmbd -i --debug-stdout || true + + if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then + if ! nmbd; then + SAMBA_DEBUG="Y" + error "NetBIOS daemon failed to start!" + fi fi + + if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then + nmbd -i -d "$SAMBA_LEVEL" --debug-stdout & + fi + else + # Enable Web Service Discovery on Vista and up [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Web Service Discovery daemon..." - wsddn -i "$interface" -H "$hostname" --pid-file=/var/run/wsdd.pid >/dev/null & + + if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then + wsddn -i "$interface" -H "$hostname" --unixd --pid-file=/var/run/wsdd.pid + else + wsddn -i "$interface" -H "$hostname" --pid-file=/var/run/wsdd.pid & + fi + fi return 0 From ae185de31406b1c2d2760251ddb0d6c291a2d30c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 3 Oct 2025 00:00:08 +0200 Subject: [PATCH 453/505] build: Update QEMU base image to v7.20 (#1446) --- Dockerfile | 2 +- src/entry.sh | 1 + src/install.sh | 5 +++-- src/mido.sh | 12 ++++++------ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index f28ad59..c23ef18 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.19 / / +COPY --from=qemux/qemu:7.20 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/entry.sh b/src/entry.sh index 17b2147..b7f9e0a 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -8,6 +8,7 @@ set -Eeuo pipefail cd /run +. start.sh # Placeholder . utils.sh # Load functions . reset.sh # Initialize system . define.sh # Define versions diff --git a/src/install.sh b/src/install.sh index 084bbd2..c3fa8ef 100644 --- a/src/install.sh +++ b/src/install.sh @@ -127,8 +127,9 @@ startInstall() { if [[ "${VERSION,,}" == "http"* ]]; then file=$(basename "${VERSION%%\?*}") - : "${file//+/ }"; printf -v file '%b' "${_//%/\\x}" - file=$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g') + file="${file//+/ }" + printf -v file '%b' "${file//%/\\x}" + file="${file//[!A-Za-z0-9._-]/_}" else diff --git a/src/mido.sh b/src/mido.sh index 2f35442..cc5b251 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -171,8 +171,6 @@ download_windows() { return 1 fi - [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" - MIDO_URL="$iso_download_link" return 0 } @@ -309,17 +307,19 @@ download_windows_eval() { return $? } - [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" - case "${PLATFORM,,}" in "x64" ) if [[ "${iso_download_link,,}" != *"x64"* ]]; then - error "Download link is for the wrong platform? Please report this at $SUPPORT/issues" + echo "Found download link: $iso_download_link" + error "Download link is for the wrong platform? Please report this at $SUPPORT/issues" return 1 fi ;; "arm64" ) if [[ "${iso_download_link,,}" != *"a64"* && "${iso_download_link,,}" != *"arm64"* ]]; then - [[ "$DEBUG" == [Yy1]* ]] && echo "Link for ARM platform currently not available!" + if [[ "$DEBUG" == [Yy1]* ]]; then + echo "Found download link: $iso_download_link" + echo "Link for ARM platform currently not available!" + fi return 1 fi ;; esac From 4871a1e61b3be01700d73ad7bc2ef8857eeaba2d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 3 Oct 2025 00:02:03 +0200 Subject: [PATCH 454/505] feat: Create desktop shortcut to shared folder (#1447) --- assets/win10x64-enterprise-eval.xml | 5 +++++ assets/win10x64-enterprise.xml | 5 +++++ assets/win10x64-iot.xml | 5 +++++ assets/win10x64-ltsc.xml | 5 +++++ assets/win10x64.xml | 5 +++++ assets/win11x64-enterprise-eval.xml | 5 +++++ assets/win11x64-enterprise.xml | 5 +++++ assets/win11x64-iot.xml | 5 +++++ assets/win11x64-ltsc.xml | 5 +++++ assets/win11x64.xml | 5 +++++ assets/win2008r2-eval.xml | 5 +++++ assets/win2008r2.xml | 5 +++++ assets/win2012r2-eval.xml | 5 +++++ assets/win2012r2.xml | 5 +++++ assets/win2016-eval.xml | 6 ++++++ assets/win2016.xml | 6 ++++++ assets/win2019-eval.xml | 6 ++++++ assets/win2019-hv.xml | 6 ++++++ assets/win2019.xml | 5 +++++ assets/win2022-eval.xml | 6 ++++++ assets/win2022.xml | 6 ++++++ assets/win2025-eval.xml | 6 ++++++ assets/win2025.xml | 5 +++++ assets/win7x64-enterprise-eval.xml | 5 +++++ assets/win7x64-enterprise.xml | 5 +++++ assets/win7x64-ultimate.xml | 5 +++++ assets/win7x64.xml | 5 +++++ assets/win7x86-enterprise.xml | 5 +++++ assets/win7x86-ultimate.xml | 5 +++++ assets/win7x86.xml | 5 +++++ assets/win81x64-enterprise-eval.xml | 6 ++++++ assets/win81x64-enterprise.xml | 5 +++++ assets/win81x64.xml | 5 +++++ assets/winvistax64-enterprise.xml | 5 +++++ assets/winvistax64-ultimate.xml | 6 ++++++ assets/winvistax64.xml | 6 ++++++ assets/winvistax86-enterprise.xml | 6 ++++++ assets/winvistax86-ultimate.xml | 5 +++++ assets/winvistax86.xml | 6 ++++++ 39 files changed, 207 insertions(+) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 05a0437..7ea00ef 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -420,6 +420,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 742a6d9..733d1ec 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -423,6 +423,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 05ffaf5..01534bb 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -429,6 +429,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 8700e26..e0e6c98 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -426,6 +426,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index d863512..08e8c79 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -423,6 +423,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index ea321ad..ae3384a 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -458,6 +458,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>25</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index e76caad..a9a192b 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -461,6 +461,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>25</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index ae4282d..5a1b8ae 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -461,6 +461,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>25</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index bc27ec0..8e4a969 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -461,6 +461,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>25</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 53e73bb..76e7a79 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -461,6 +461,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>25</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index 84467bd..f946b41 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -290,6 +290,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 9ab119f..df194be 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -293,6 +293,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 84bf8be..f2f85ab 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -308,6 +308,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index 5eef789..a6560aa 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -311,6 +311,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 45c1d82..ddaf919 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -328,6 +328,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -335,3 +340,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2016.xml b/assets/win2016.xml index 019cd1c..398763c 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -331,6 +331,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -338,3 +343,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index e6db2d9..c518e92 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -332,6 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -339,3 +344,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index bb87975..68c10cf 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -337,6 +337,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -344,3 +349,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2019.xml b/assets/win2019.xml index 5051f9f..0e7faea 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -335,6 +335,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index a4ed208..e29daef 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -332,6 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -339,3 +344,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2022.xml b/assets/win2022.xml index 71c07c9..cb54e5f 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -335,6 +335,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -342,3 +347,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index ff7f7fa..083812e 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -347,6 +347,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -354,3 +359,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2025.xml b/assets/win2025.xml index c67965f..bbee67f 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -350,6 +350,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml index 85b69e4..69ef032 100644 --- a/assets/win7x64-enterprise-eval.xml +++ b/assets/win7x64-enterprise-eval.xml @@ -274,6 +274,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index 84c873e..ef5873d 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index f17fb0e..679811f 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index be1f3a8..db6a87f 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index e96e5a7..e7660ec 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index ce81d12..f9486b5 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index 314c2ee..890d18d 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index f3a61e9..498e332 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -293,6 +293,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -300,3 +305,4 @@ </component> </settings> </unattend> + diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index bf927cc..cebab90 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -296,6 +296,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 290e923..eb764dd 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -303,6 +303,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 1e3709c..67e02fc 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index cb1d1c1..cdd73eb 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -259,3 +264,4 @@ </component> </settings> </unattend> + diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index 729e568..f2dc848 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -259,3 +264,4 @@ </component> </settings> </unattend> + diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index 66efdf3..2e8b3b3 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -259,3 +264,4 @@ </component> </settings> </unattend> + diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index 5231d50..0cb6857 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index ef0ed47..c3a2302 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -259,3 +264,4 @@ </component> </settings> </unattend> + From f29208af3f0a7d5fddc45f79b752bbf11f814484 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 3 Oct 2025 02:50:59 +0200 Subject: [PATCH 455/505] feat: Improved Samba logging (#1448) --- src/define.sh | 11 +++++++++-- src/samba.sh | 51 +++++++++++++++++++++++++++++---------------------- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/src/define.sh b/src/define.sh index f14e330..6edc4bd 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1777,11 +1777,18 @@ prepareInstall() { echo " Set oFile = Nothing" echo "End With" echo "" - } | unix2dos > "$dir/\$OEM\$/admin.vbs" + echo "Set oLink = WshShell.CreateShortcut(WshShell.ExpandEnvironmentStrings(\"%userprofile%\\Desktop\\Shared.lnk\"))" + echo "With oLink" + echo " .TargetPath = \"\\\\host.lan\\Data\"" + echo " .Save" + echo "End With" + echo "Set oLink = Nothing" + echo "" + } | unix2dos > "$dir/\$OEM\$/install.vbs" { echo "[COMMANDS]" echo "\"REGEDIT /s install.reg\"" - echo "\"Wscript admin.vbs\"" + echo "\"Wscript install.vbs\"" echo "" } | unix2dos > "$dir/\$OEM\$/cmdlines.txt" diff --git a/src/samba.sh b/src/samba.sh index b35307b..af68071 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -5,6 +5,8 @@ set -Eeuo pipefail : "${SAMBA_DEBUG:="N"}" # Disable debug : "${SAMBA_LEVEL:="1"}" # Debug log level +rm -rf /var/run/wsdd.pid + [[ "$SAMBA" == [Nn]* ]] && return 0 [[ "$NETWORK" == [Nn]* ]] && return 0 @@ -40,18 +42,18 @@ addShare() { echo " For support visit $SUPPORT" echo "--------------------------------------------------------" echo "" - echo "Using this folder you can share files with the host machine." + echo "Using this folder you can exchange files with the host machine." echo "" - echo "To change its location, include the following bind mount in your compose file:" + echo "To select the folder you want to share, include the following bind mount in your compose file:" echo "" echo " volumes:" - echo " - \"/home/example:/${name,,}\"" + echo " - \"./example:/${name,,}\"" echo "" echo "Or in your run command:" echo "" - echo " -v \"/home/example:/${name,,}\"" + echo " -v \"\${PWD:-.}/example:/${name,,}\"" echo "" - echo "Replace the example path /home/example with the desired shared folder." + echo "Replace the example path ./example with your desired shared folder." echo "" } | unix2dos > "$dir/readme.txt" @@ -116,20 +118,20 @@ for dir in "${dirs[@]}"; do addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" done -# Try to fix Samba permissions +# Try to repair Samba permissions [ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock 2>/dev/null || : [ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores 2>/dev/null || : [ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock 2>/dev/null || : -if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then - if ! smbd; then - SAMBA_DEBUG="Y" - error "Samba daemon failed to start!" - fi +rm -f /var/log/samba/log.smbd + +if ! smbd -l /var/log/samba; then + SAMBA_DEBUG="Y" + error "Failed to start Samba daemon!" fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then - smbd -i -d "$SAMBA_LEVEL" --debug-stdout & + tail -fn +0 /var/log/samba/log.smbd & fi if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then @@ -137,15 +139,15 @@ if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then # Enable NetBIOS on Windows 7 and lower [[ "$DEBUG" == [Yy1]* ]] && echo "Starting NetBIOS daemon..." - if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then - if ! nmbd; then - SAMBA_DEBUG="Y" - error "NetBIOS daemon failed to start!" - fi + rm -f /var/log/samba/log.nmbd + + if ! nmbd -l /var/log/samba; then + SAMBA_DEBUG="Y" + error "Failed to start NetBIOS daemon!" fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then - nmbd -i -d "$SAMBA_LEVEL" --debug-stdout & + tail -fn +0 /var/log/samba/log.nmbd & fi else @@ -153,10 +155,15 @@ else # Enable Web Service Discovery on Vista and up [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Web Service Discovery daemon..." - if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then - wsddn -i "$interface" -H "$hostname" --unixd --pid-file=/var/run/wsdd.pid - else - wsddn -i "$interface" -H "$hostname" --pid-file=/var/run/wsdd.pid & + rm -f /var/log/wsddn.log + + if ! wsddn -i "$interface" -H "$hostname" --unixd --log-file=/var/log/wsddn.log --pid-file=/var/run/wsdd.pid; then + SAMBA_DEBUG="Y" + error "Failed to start WSDDN daemon!" + fi + + if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then + tail -fn +0 /var/log/wsddn.log & fi fi From 4cd2a9c70b351f512db5d93ae415411cbc8a3ae0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 3 Oct 2025 03:13:12 +0200 Subject: [PATCH 456/505] docs: Document new file sharing method (#1449) --- readme.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/readme.md b/readme.md index ede4afa..50a66b4 100644 --- a/readme.md +++ b/readme.md @@ -143,19 +143,16 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I share files with the host? - Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. + After installation there will be a folder called `Shared` on your desktop, which can be used to exchange files with the host machine. - Double-click it and it will show a folder called `Data`, which can be bound to any folder on your host via the compose file: + To select a folder on the host for this purpose, include the following bind mount in your compose file: ```yaml volumes: - - ./example:/data + - ./example:/shared ``` - The example folder `./example` will be available as ` \\host.lan\Data`. - -> [!TIP] -> You can map this path to a drive letter in Windows, for easier access. + Replace the example path `./example` with your desired shared folder, which then will become visible as `Shared`. ### How do I change the amount of CPU or RAM? From 434bc11907b4b818c21e2ccaea46cdddbaed167b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 3 Oct 2025 11:41:40 +0200 Subject: [PATCH 457/505] fix: Shared folder location (#1450) --- src/samba.sh | 51 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index af68071..34ee439 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -5,6 +5,8 @@ set -Eeuo pipefail : "${SAMBA_DEBUG:="N"}" # Disable debug : "${SAMBA_LEVEL:="1"}" # Debug log level +tmp="/tmp/smb" +rm -rf "$tmp" rm -rf /var/run/wsdd.pid [[ "$SAMBA" == [Nn]* ]] && return 0 @@ -27,15 +29,18 @@ html "Initializing shared folder..." addShare() { local dir="$1" - local name="$2" - local comment="$3" + local ref="$2" + local name="$3" + local comment="$4" mkdir -p "$dir" || return 1 ls -A "$dir" >/dev/null 2>&1 || return 1 if [ -z "$(ls -A "$dir")" ]; then - chmod 777 "$dir" || return 1 + fi + + if [[ "$dir" == "$tmp" ]]; then { echo "--------------------------------------------------------" echo " $APP for Docker v$(</run/version)..." @@ -44,16 +49,16 @@ addShare() { echo "" echo "Using this folder you can exchange files with the host machine." echo "" - echo "To select the folder you want to share, include the following bind mount in your compose file:" + echo "To select a folder on the host for this purpose, include the following bind mount in your compose file:" echo "" echo " volumes:" - echo " - \"./example:/${name,,}\"" + echo " - \"./example:${ref}\"" echo "" echo "Or in your run command:" echo "" - echo " -v \"\${PWD:-.}/example:/${name,,}\"" + echo " -v \"\${PWD:-.}/example:${ref}\"" echo "" - echo "Replace the example path ./example with your desired shared folder." + echo "Replace the example path ./example with your desired shared folder, which then will become visible here." echo "" } | unix2dos > "$dir/readme.txt" @@ -94,28 +99,40 @@ addShare() { echo " disable spoolss = yes" } > "/etc/samba/smb.conf" -share="/data" -[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" -[ ! -d "$share" ] && [ -d "/shared" ] && share="/shared" +share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" +[ ! -d "$share" ] && [ -d "/data" ] && share="/data" +[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" +[ ! -d "$share" ] && share="$tmp" -if ! addShare "$share" "Data" "Shared"; then - error "Failed to add shared folder '$share'. Please check its permissions." && return 0 +m1="Failed to add shared folder" +m2="Please check its permissions." + +if ! addShare "$share" "/shared" "Data" "Shared"; then + error "$m1 '$share'. $m2" && return 0 fi -if [ -d "/data2" ]; then - addShare "/data2" "Data2" "Shared" || error "Failed to add shared folder '/data2'. Please check its permissions." +if [ -d "/shared2" ]; then + addShare "/shared2" "/shared2" "Data2" "Shared" || error "$m1 '/shared2'. $m2" +else + if [ -d "/data2" ]; then + addShare "/data2" "/shared2" "Data2" "Shared" || error "$m1 '/data2'. $m2." + fi fi -if [ -d "/data3" ]; then - addShare "/data3" "Data3" "Shared" || error "Failed to add shared folder '/data3'. Please check its permissions." +if [ -d "/shared3" ]; then + addShare "/shared3" "/shared3" "Data3" "Shared" || error "$m1 '/shared3'. $m2" +else + if [ -d "/data3" ]; then + addShare "/data3" "/shared3" "Data3" "Shared" || error "$m1 '/data3'. $m2" + fi fi IFS=',' read -r -a dirs <<< "${SHARES:-}" for dir in "${dirs[@]}"; do [ ! -d "$dir" ] && continue dir_name=$(basename "$dir") - addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" + addShare "$dir" "/shared" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" done # Try to repair Samba permissions From 29a9e2d68c0d2bab8e3e1d73bdcf6d0c94515191 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 4 Oct 2025 09:47:08 +0200 Subject: [PATCH 458/505] feat: Monitor port is now configurable (#1451) --- Dockerfile | 2 +- src/power.sh | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index c23ef18..49e8c8b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.20 / / +COPY --from=qemux/qemu:7.21 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/power.sh b/src/power.sh index 9ca5583..8ea6ff0 100644 --- a/src/power.sh +++ b/src/power.sh @@ -1,11 +1,11 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${QEMU_TIMEOUT:="110"}" # QEMU Termination timeout + # Configure QEMU for graceful shutdown QEMU_TERM="" -QEMU_PORT=7100 -QEMU_TIMEOUT=110 QEMU_DIR="/run/shm" QEMU_PID="$QEMU_DIR/qemu.pid" QEMU_PTY="$QEMU_DIR/qemu.pty" @@ -139,7 +139,7 @@ terminal() { fi if [ ! -c "$dev" ]; then - dev=$(echo 'info chardev' | nc -q 1 -w 1 localhost "$QEMU_PORT" | tr -d '\000') + dev=$(echo 'info chardev' | nc -q 1 -w 1 localhost "$MON_PORT" | tr -d '\000') dev="${dev#*serial0}" dev="${dev#*pty:}" dev="${dev%%$'\n'*}" @@ -188,7 +188,7 @@ _graceful_shutdown() { fi # Send ACPI shutdown signal - echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null + echo 'system_powerdown' | nc -q 1 -w 1 localhost "$MON_PORT" > /dev/null local cnt=0 while [ "$cnt" -lt "$QEMU_TIMEOUT" ]; do @@ -203,7 +203,7 @@ _graceful_shutdown() { info "Waiting for Windows to shutdown... ($cnt/$QEMU_TIMEOUT)" # Send ACPI shutdown signal - echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null + echo 'system_powerdown' | nc -q 1 -w 1 localhost "$MON_PORT" > /dev/null done @@ -215,7 +215,7 @@ _graceful_shutdown() { } SERIAL="pty" -MONITOR="telnet:localhost:$QEMU_PORT,server,nowait,nodelay" +MONITOR="telnet:localhost:$MON_PORT,server,nowait,nodelay" MONITOR+=" -daemonize -D $QEMU_LOG -pidfile $QEMU_PID" _trap _graceful_shutdown SIGTERM SIGHUP SIGINT SIGABRT SIGQUIT From b3f1cb913ac4f43d908d9475bd5d1df49258535c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 5 Oct 2025 07:47:19 +0200 Subject: [PATCH 459/505] feat: Make Samba interface configurable (#1452) --- src/samba.sh | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 34ee439..7873b3e 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -2,8 +2,8 @@ set -Eeuo pipefail : "${SAMBA:="Y"}" # Enable Samba +: "${SAMBA_LEVEL:="1"}" # Logging level : "${SAMBA_DEBUG:="N"}" # Disable debug -: "${SAMBA_LEVEL:="1"}" # Debug log level tmp="/tmp/smb" rm -rf "$tmp" @@ -13,15 +13,22 @@ rm -rf /var/run/wsdd.pid [[ "$NETWORK" == [Nn]* ]] && return 0 hostname="host.lan" -interface="dockerbridge" +interfaces="dockerbridge" + +if [ -n "${SAMBA_INTERFACE:-}" ]; then + interfaces+=",$SAMBA_INTERFACE" +fi if [[ "$DHCP" == [Yy1]* ]]; then hostname="$IP" - interface="$VM_NET_DEV" + interfaces="$VM_NET_DEV" fi if [[ "${NETWORK,,}" == "user"* ]]; then - interface="127.0.0.1" + interfaces="lo" + if ! ip link set "$interfaces" multicast on >/dev/null; then + warn "Failed to enable multicast on loopback interface!" + fi fi html "Initializing shared folder..." @@ -82,7 +89,7 @@ addShare() { echo " server string = Dockur" echo " netbios name = $hostname" echo " workgroup = WORKGROUP" - echo " interfaces = $interface" + echo " interfaces = $interfaces" echo " bind interfaces only = yes" echo " security = user" echo " guest account = nobody" @@ -170,13 +177,13 @@ if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then else # Enable Web Service Discovery on Vista and up - [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Web Service Discovery daemon..." + [[ "$DEBUG" == [Yy1]* ]] && echo "Starting wsddn daemon..." rm -f /var/log/wsddn.log - if ! wsddn -i "$interface" -H "$hostname" --unixd --log-file=/var/log/wsddn.log --pid-file=/var/run/wsdd.pid; then + if ! wsddn -i "${interfaces%%,*}" -H "$hostname" --unixd --log-file=/var/log/wsddn.log --pid-file=/var/run/wsdd.pid; then SAMBA_DEBUG="Y" - error "Failed to start WSDDN daemon!" + error "Failed to start wsddn daemon!" fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then From 17db1ac34c185cff11ab155e713db116d7785602 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 5 Oct 2025 18:58:17 +0200 Subject: [PATCH 460/505] feat: Support more network types (#1453) --- src/samba.sh | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 7873b3e..d68d0b2 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -12,23 +12,23 @@ rm -rf /var/run/wsdd.pid [[ "$SAMBA" == [Nn]* ]] && return 0 [[ "$NETWORK" == [Nn]* ]] && return 0 -hostname="host.lan" -interfaces="dockerbridge" - -if [ -n "${SAMBA_INTERFACE:-}" ]; then - interfaces+=",$SAMBA_INTERFACE" -fi - if [[ "$DHCP" == [Yy1]* ]]; then hostname="$IP" interfaces="$VM_NET_DEV" -fi - -if [[ "${NETWORK,,}" == "user"* ]]; then - interfaces="lo" - if ! ip link set "$interfaces" multicast on >/dev/null; then - warn "Failed to enable multicast on loopback interface!" - fi +else + hostname="host.lan" + case "${NETWORK,,}" in + "user"* | "passt" | "slirp" ) + interfaces="lo" + if ! ip link set "$interfaces" multicast on >/dev/null; then + warn "Failed to enable multicast on loopback interface!" + fi ;; + *) + interfaces="dockerbridge" + if [ -n "${SAMBA_INTERFACE:-}" ]; then + interfaces+=",$SAMBA_INTERFACE" + fi ;; + esac fi html "Initializing shared folder..." From 3ab5c25152c4a49b19341a4416f033334d0be7d4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 6 Oct 2025 13:22:28 +0200 Subject: [PATCH 461/505] feat: Use PID for Samba process (#1454) --- src/power.sh | 10 +++++++++- src/samba.sh | 24 +++++++++++++----------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/power.sh b/src/power.sh index 8ea6ff0..1c2c223 100644 --- a/src/power.sh +++ b/src/power.sh @@ -103,11 +103,19 @@ finish() { pid="/var/run/tpm.pid" [ -s "$pid" ] && pKill "$(<"$pid")" + rm -f "$pid" pid="/var/run/wsdd.pid" [ -s "$pid" ] && pKill "$(<"$pid")" + rm -f "$pid" - fKill "smbd" + pid="/var/run/samba/nmbd.pid" + [ -s "$pid" ] && pKill "$(<"$pid")" + rm -f "$pid" + + pid="/var/run/samba/smbd.pid" + [ -s "$pid" ] && pKill "$(<"$pid")" + rm -f "$pid" closeNetwork diff --git a/src/samba.sh b/src/samba.sh index d68d0b2..c0ae8ac 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -7,7 +7,10 @@ set -Eeuo pipefail tmp="/tmp/smb" rm -rf "$tmp" -rm -rf /var/run/wsdd.pid + +rm -f /var/run/wsdd.pid +rm -f /var/run/samba/nmbd.pid +rm -f /var/run/samba/smbd.pid [[ "$SAMBA" == [Nn]* ]] && return 0 [[ "$NETWORK" == [Nn]* ]] && return 0 @@ -19,16 +22,15 @@ else hostname="host.lan" case "${NETWORK,,}" in "user"* | "passt" | "slirp" ) - interfaces="lo" - if ! ip link set "$interfaces" multicast on >/dev/null; then - warn "Failed to enable multicast on loopback interface!" - fi ;; - *) - interfaces="dockerbridge" - if [ -n "${SAMBA_INTERFACE:-}" ]; then - interfaces+=",$SAMBA_INTERFACE" - fi ;; + interfaces="lo" ;; + # if ! ip link set "$interfaces" multicast on >/dev/null; then + # warn "Failed to enable multicast on loopback interface!" + # fi ;; + *) interfaces="dockerbridge" ;; esac + if [ -n "${SAMBA_INTERFACE:-}" ]; then + interfaces+=",$SAMBA_INTERFACE" + fi fi html "Initializing shared folder..." @@ -37,7 +39,7 @@ html "Initializing shared folder..." addShare() { local dir="$1" local ref="$2" - local name="$3" + local name="$3" local comment="$4" mkdir -p "$dir" || return 1 From 588242b1759b8ac57fe5d2459e69ed6c6cdb84fa Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 6 Oct 2025 13:44:05 +0200 Subject: [PATCH 462/505] fix: Use bridge name variable (#1455) --- src/samba.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/samba.sh b/src/samba.sh index c0ae8ac..687fd16 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -26,7 +26,7 @@ else # if ! ip link set "$interfaces" multicast on >/dev/null; then # warn "Failed to enable multicast on loopback interface!" # fi ;; - *) interfaces="dockerbridge" ;; + *) interfaces="$VM_NET_BRIDGE" ;; esac if [ -n "${SAMBA_INTERFACE:-}" ]; then interfaces+=",$SAMBA_INTERFACE" From c04851bbd483dd524257d8d1a5d881986143e2bf Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 6 Oct 2025 13:45:14 +0200 Subject: [PATCH 463/505] feat: Remove entry from hosts file (#1456) --- assets/win10x64-enterprise-eval.xml | 7 +------ assets/win10x64-enterprise.xml | 7 +------ assets/win10x64-iot.xml | 7 +------ assets/win10x64-ltsc.xml | 7 +------ assets/win10x64.xml | 7 +------ assets/win11x64-enterprise-eval.xml | 7 +------ assets/win11x64-enterprise.xml | 7 +------ assets/win11x64-iot.xml | 7 +------ assets/win11x64-ltsc.xml | 7 +------ assets/win11x64.xml | 7 +------ assets/win2008r2-eval.xml | 7 +------ assets/win2008r2.xml | 7 +------ assets/win2012r2-eval.xml | 7 +------ assets/win2012r2.xml | 7 +------ assets/win2016-eval.xml | 8 +------- assets/win2016.xml | 8 +------- assets/win2019-eval.xml | 8 +------- assets/win2019-hv.xml | 8 +------- assets/win2019.xml | 7 +------ assets/win2022-eval.xml | 8 +------- assets/win2022.xml | 8 +------- assets/win2025-eval.xml | 8 +------- assets/win2025.xml | 7 +------ assets/win7x64-enterprise-eval.xml | 7 +------ assets/win7x64-enterprise.xml | 7 +------ assets/win7x64-ultimate.xml | 7 +------ assets/win7x64.xml | 7 +------ assets/win7x86-enterprise.xml | 7 +------ assets/win7x86-ultimate.xml | 7 +------ assets/win7x86.xml | 7 +------ assets/win81x64-enterprise-eval.xml | 8 +------- assets/win81x64-enterprise.xml | 7 +------ assets/win81x64.xml | 7 +------ assets/winvistax64-enterprise.xml | 7 +------ assets/winvistax64-ultimate.xml | 8 +------- assets/winvistax64.xml | 8 +------- assets/winvistax86-enterprise.xml | 8 +------- assets/winvistax86-ultimate.xml | 7 +------ assets/winvistax86.xml | 8 +------- src/define.sh | 11 ----------- src/install.sh | 4 ---- 41 files changed, 39 insertions(+), 261 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 7ea00ef..41e8a70 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -415,16 +415,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 733d1ec..c998592 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -418,16 +418,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 01534bb..bed9cbe 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -424,16 +424,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index e0e6c98..6957f2b 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -421,16 +421,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 08e8c79..ef19c57 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -418,16 +418,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index ae3384a..32dac2a 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -453,16 +453,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index a9a192b..4c6746e 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -456,16 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 5a1b8ae..91ab3ce 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -456,16 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 8e4a969..7707cfb 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -456,16 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 76e7a79..95d1d16 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -456,16 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index f946b41..e7bd802 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -285,16 +285,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>19</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>20</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index df194be..a345bf8 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -288,16 +288,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>19</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>20</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index f2f85ab..a9de3c6 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -303,16 +303,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index a6560aa..1d1a5b6 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -306,16 +306,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index ddaf919..568e9f5 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -323,16 +323,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -340,4 +335,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2016.xml b/assets/win2016.xml index 398763c..6f75c66 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -326,16 +326,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -343,4 +338,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index c518e92..cca0e35 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -327,16 +327,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -344,4 +339,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index 68c10cf..4c416cf 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -332,16 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -349,4 +344,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2019.xml b/assets/win2019.xml index 0e7faea..5133bed 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -330,16 +330,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index e29daef..b525065 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -327,16 +327,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -344,4 +339,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2022.xml b/assets/win2022.xml index cb54e5f..9159226 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -330,16 +330,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -347,4 +342,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 083812e..9ec3a7d 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -342,16 +342,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -359,4 +354,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2025.xml b/assets/win2025.xml index bbee67f..8098192 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -345,16 +345,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml index 69ef032..c3cc15b 100644 --- a/assets/win7x64-enterprise-eval.xml +++ b/assets/win7x64-enterprise-eval.xml @@ -269,16 +269,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index ef5873d..b362a9f 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index 679811f..2ee085a 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index db6a87f..3769dfd 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index e7660ec..7ac8ef0 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index f9486b5..419a508 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index 890d18d..bae5a8f 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 498e332..a406f7f 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -288,16 +288,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -305,4 +300,3 @@ </component> </settings> </unattend> - diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index cebab90..db6eec9 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -291,16 +291,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index eb764dd..bf1ff5e 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -298,16 +298,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 67e02fc..d6ff627 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index cdd73eb..78ed091 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -264,4 +259,3 @@ </component> </settings> </unattend> - diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index f2dc848..d1de997 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -264,4 +259,3 @@ </component> </settings> </unattend> - diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index 2e8b3b3..91c96df 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -264,4 +259,3 @@ </component> </settings> </unattend> - diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index 0cb6857..c3ec41a 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index c3a2302..07003fb 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -264,4 +259,3 @@ </component> </settings> </unattend> - diff --git a/src/define.sh b/src/define.sh index 6edc4bd..d094037 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1584,9 +1584,6 @@ prepareInstall() { [ -n "$PASSWORD" ] && password=$(echo "$PASSWORD" | sed 's/"//g') [ -z "$password" ] && password="admin" - local ip="20.20.20.1" - [ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1" - find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; { echo "[Data]" @@ -1769,14 +1766,6 @@ prepareInstall() { echo "" echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")" echo "" - echo "With (CreateObject(\"Scripting.FileSystemObject\"))" - echo " SysRoot = WshShell.ExpandEnvironmentStrings(\"%SystemRoot%\")" - echo " Set oFile = .OpenTextFile(SysRoot & \"\system32\drivers\etc\hosts\", 8, true)" - echo " oFile.Write(\"$ip host.lan\")" - echo " oFile.Close()" - echo " Set oFile = Nothing" - echo "End With" - echo "" echo "Set oLink = WshShell.CreateShortcut(WshShell.ExpandEnvironmentStrings(\"%userprofile%\\Desktop\\Shared.lnk\"))" echo "With oLink" echo " .TargetPath = \"\\\\host.lan\\Data\"" diff --git a/src/install.sh b/src/install.sh index c3fa8ef..396911f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -756,10 +756,6 @@ updateXML() { local language="$2" local culture region user admin pass keyboard - if [ -n "${VM_NET_IP:-}" ]; then - sed -i "s/ 20.20.20.1 / ${VM_NET_IP%.*}.1 /g" "$asset" - fi - [ -z "$HEIGHT" ] && HEIGHT="720" [ -z "$WIDTH" ] && WIDTH="1280" From 004f4df79e78e5c0b1dce7f22731ce64e1dae841 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 7 Oct 2025 01:10:52 +0200 Subject: [PATCH 464/505] feat: Set Samba socket (#1457) --- src/samba.sh | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 687fd16..bf5bf30 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -16,17 +16,18 @@ rm -f /var/run/samba/smbd.pid [[ "$NETWORK" == [Nn]* ]] && return 0 if [[ "$DHCP" == [Yy1]* ]]; then + socket="$IP" hostname="$IP" interfaces="$VM_NET_DEV" else hostname="host.lan" case "${NETWORK,,}" in - "user"* | "passt" | "slirp" ) - interfaces="lo" ;; - # if ! ip link set "$interfaces" multicast on >/dev/null; then - # warn "Failed to enable multicast on loopback interface!" - # fi ;; - *) interfaces="$VM_NET_BRIDGE" ;; + "passt" | "slirp" ) + interfaces="lo" + socket="127.0.0.1" ;; + *) + socket="$VM_NET_IP" + interfaces="$VM_NET_BRIDGE" ;; esac if [ -n "${SAMBA_INTERFACE:-}" ]; then interfaces+=",$SAMBA_INTERFACE" @@ -100,6 +101,7 @@ addShare() { echo " follow symlinks = yes" echo " wide links = yes" echo " unix extensions = no" + echo " socket address = $socket" echo "" echo " # disable printing services" echo " load printers = no" @@ -160,6 +162,11 @@ if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then tail -fn +0 /var/log/samba/log.smbd & fi +case "${NETWORK,,}" in + "passt" | "slirp" ) + return 0 ;; +esac + if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then # Enable NetBIOS on Windows 7 and lower From 26e4ab5fb273cb8f5a08da3854fe3f8ec3633e09 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:39:17 +0200 Subject: [PATCH 465/505] feat: Use the engine variable (#1458) --- src/define.sh | 2 +- src/install.sh | 1 + src/samba.sh | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index d094037..9198389 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1620,7 +1620,7 @@ prepareInstall() { echo "[UserData]" echo " FullName=\"$username\"" echo " ComputerName=\"*\"" - echo " OrgName=\"Windows for Docker\"" + echo " OrgName=\"$APP for $ENGINE\"" echo " $KEY" echo "" echo "[Identification]" diff --git a/src/install.sh b/src/install.sh index 396911f..50cf7ea 100644 --- a/src/install.sh +++ b/src/install.sh @@ -759,6 +759,7 @@ updateXML() { [ -z "$HEIGHT" ] && HEIGHT="720" [ -z "$WIDTH" ] && WIDTH="1280" + sed -i "s/>Windows for Docker</>$APP for $ENGINE</g" "$asset" sed -i "s/<VerticalResolution>1080<\/VerticalResolution>/<VerticalResolution>$HEIGHT<\/VerticalResolution>/g" "$asset" sed -i "s/<HorizontalResolution>1920<\/HorizontalResolution>/<HorizontalResolution>$WIDTH<\/HorizontalResolution>/g" "$asset" diff --git a/src/samba.sh b/src/samba.sh index bf5bf30..c5bd35e 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -53,7 +53,7 @@ addShare() { if [[ "$dir" == "$tmp" ]]; then { echo "--------------------------------------------------------" - echo " $APP for Docker v$(</run/version)..." + echo " $APP for $ENGINE v$(</run/version)..." echo " For support visit $SUPPORT" echo "--------------------------------------------------------" echo "" From 75e25b2aeaffd094cfea7c1b2f7d1a7a315b1de0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 7 Oct 2025 15:29:33 +0200 Subject: [PATCH 466/505] feat: Disable Network Discovery popup (#1459) --- assets/win10x64-enterprise-eval.xml | 28 ++++++++++++++++++--------- assets/win10x64-enterprise.xml | 28 ++++++++++++++++++--------- assets/win10x64-iot.xml | 28 ++++++++++++++++++--------- assets/win10x64-ltsc.xml | 28 ++++++++++++++++++--------- assets/win10x64.xml | 28 ++++++++++++++++++--------- assets/win11x64-enterprise-eval.xml | 25 ++++++++++++++---------- assets/win11x64-enterprise.xml | 25 ++++++++++++++---------- assets/win11x64-iot.xml | 25 ++++++++++++++---------- assets/win11x64-ltsc.xml | 25 ++++++++++++++---------- assets/win11x64.xml | 25 ++++++++++++++---------- assets/win2008r2-eval.xml | 17 ++++++++++------ assets/win2008r2.xml | 17 ++++++++++------ assets/win2012r2-eval.xml | 22 +++++++++++++++------ assets/win2012r2.xml | 22 +++++++++++++++------ assets/win2016-eval.xml | 30 +++++++++++++++++++---------- assets/win2016.xml | 30 +++++++++++++++++++---------- assets/win2019-eval.xml | 30 +++++++++++++++++++---------- assets/win2019-hv.xml | 30 +++++++++++++++++++---------- assets/win2019.xml | 30 +++++++++++++++++++---------- assets/win2022-eval.xml | 30 +++++++++++++++++++---------- assets/win2022.xml | 30 +++++++++++++++++++---------- assets/win2025-eval.xml | 23 +++++++++++++--------- assets/win2025.xml | 23 +++++++++++++--------- assets/win81x64-enterprise-eval.xml | 22 +++++++++++++++------ assets/win81x64-enterprise.xml | 22 +++++++++++++++------ assets/win81x64.xml | 22 +++++++++++++++------ assets/winvistax64-enterprise.xml | 15 ++++++++++----- assets/winvistax64-ultimate.xml | 15 ++++++++++----- assets/winvistax64.xml | 15 ++++++++++----- assets/winvistax86-enterprise.xml | 15 ++++++++++----- assets/winvistax86-ultimate.xml | 15 ++++++++++----- assets/winvistax86.xml | 15 ++++++++++----- 32 files changed, 500 insertions(+), 255 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 41e8a70..ee75f27 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -376,50 +376,60 @@ <SynchronousCommand wcm:action="add"> <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index c998592..5e5eb8c 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -379,50 +379,60 @@ <SynchronousCommand wcm:action="add"> <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index bed9cbe..00a049e 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -385,50 +385,60 @@ <SynchronousCommand wcm:action="add"> <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 6957f2b..e77dd6a 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -382,50 +382,60 @@ <SynchronousCommand wcm:action="add"> <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index ef19c57..7c21359 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -379,50 +379,60 @@ <SynchronousCommand wcm:action="add"> <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 32dac2a..39c3f02 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -408,56 +408,61 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 4c6746e..bafed49 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -411,56 +411,61 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 91ab3ce..d6825d0 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -411,56 +411,61 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 7707cfb..a9a6ce7 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -411,56 +411,61 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 95d1d16..8082c7c 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -411,56 +411,61 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index e7bd802..09a23ce 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -266,30 +266,35 @@ <SynchronousCommand wcm:action="add"> <Order>15</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index a345bf8..5dee0a5 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -269,30 +269,35 @@ <SynchronousCommand wcm:action="add"> <Order>15</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index a9de3c6..6351559 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -284,30 +284,40 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index 1d1a5b6..bb3dd70 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -287,30 +287,40 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 568e9f5..d788960 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -284,50 +284,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016.xml b/assets/win2016.xml index 6f75c66..e055e00 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -287,50 +287,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index cca0e35..332d974 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -288,50 +288,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index 4c416cf..2fb6e32 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -293,50 +293,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019.xml b/assets/win2019.xml index 5133bed..b5d8235 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -291,50 +291,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index b525065..5748cb4 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -288,50 +288,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022.xml b/assets/win2022.xml index 9159226..eac9414 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -291,50 +291,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 9ec3a7d..5b92f00 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -307,46 +307,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index 8098192..2796db6 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -310,46 +310,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index a406f7f..745fd9d 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -269,30 +269,40 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index db6eec9..a073c38 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -272,30 +272,40 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index bf1ff5e..6b45785 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -279,30 +279,40 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index d6ff627..a3dac19 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index 78ed091..eb12e60 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index d1de997..ad2ac70 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index 91c96df..5092331 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index c3ec41a..97ad23e 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 07003fb..ade1942 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From ccc0d4ea64cd99267b4ad35d39d085b21cc43e31 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 8 Oct 2025 08:14:36 +0200 Subject: [PATCH 467/505] fix: Terminate tail on exit (#1461) --- src/entry.sh | 2 +- src/samba.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/entry.sh b/src/entry.sh index b7f9e0a..2f62440 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -33,7 +33,7 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..." terminal ( sleep 30; boot ) & -tail -fn +0 "$QEMU_LOG" 2>/dev/null & +tail -fn +0 "$QEMU_LOG" --pid=$$ 2>/dev/null & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \ sed -u -e 's/\x1B\[[=0-9;]*[a-z]//gi' \ -e 's/failed to load Boot/skipped Boot/g' \ diff --git a/src/samba.sh b/src/samba.sh index c5bd35e..c28645d 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -159,7 +159,7 @@ if ! smbd -l /var/log/samba; then fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then - tail -fn +0 /var/log/samba/log.smbd & + tail -fn +0 /var/log/samba/log.smbd --pid=$$ & fi case "${NETWORK,,}" in @@ -180,7 +180,7 @@ if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then - tail -fn +0 /var/log/samba/log.nmbd & + tail -fn +0 /var/log/samba/log.nmbd --pid=$$ & fi else @@ -196,7 +196,7 @@ else fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then - tail -fn +0 /var/log/wsddn.log & + tail -fn +0 /var/log/wsddn.log --pid=$$ & fi fi From aa575286f6ae546b50d74cc17c12758e1380d68d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 8 Oct 2025 22:08:11 +0200 Subject: [PATCH 468/505] build: Update QEMU base image to v7.22 (#1462) --- Dockerfile | 2 +- src/entry.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 49e8c8b..686fb85 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.21 / / +COPY --from=qemux/qemu:7.22 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/entry.sh b/src/entry.sh index 2f62440..1b440a0 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -8,9 +8,10 @@ set -Eeuo pipefail cd /run -. start.sh # Placeholder +. start.sh # Startup hook . utils.sh # Load functions . reset.sh # Initialize system +. server.sh # Start webserver . define.sh # Define versions . mido.sh # Download Windows . install.sh # Run installation From 45956f786f3590e2a8978d6376162fbabbf5fd4e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 9 Oct 2025 12:24:51 +0200 Subject: [PATCH 469/505] feat: Allow to set a user/group for the shared folder (#1464) --- src/samba.sh | 134 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 119 insertions(+), 15 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index c28645d..4580063 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -1,9 +1,11 @@ #!/usr/bin/env bash set -Eeuo pipefail -: "${SAMBA:="Y"}" # Enable Samba -: "${SAMBA_LEVEL:="1"}" # Logging level -: "${SAMBA_DEBUG:="N"}" # Disable debug +: "${SAMBA:="Y"}" # Enable Samba +: "${SAMBA_LEVEL:="1"}" # Logging level +: "${SAMBA_DEBUG:="N"}" # Disable debug +: "${SAMBA_UID:="1000"}" # Samba user ID +: "${SAMBA_GID:="1000"}" # Samba group ID tmp="/tmp/smb" rm -rf "$tmp" @@ -42,12 +44,27 @@ addShare() { local ref="$2" local name="$3" local comment="$4" + local user="$5" + local group="$6" + local cfg="$7" mkdir -p "$dir" || return 1 - ls -A "$dir" >/dev/null 2>&1 || return 1 + + if ! ls -A "$dir" >/dev/null 2>&1; then + error "Failed to access directory $dir" && return 1 + fi if [ -z "$(ls -A "$dir")" ]; then - chmod 777 "$dir" || return 1 + + if ! chmod 777 "$dir"; then + error "Failed to set permissions for directory $dir" && return 1 + fi + + if [[ "$user" != "root" || "$group" != "root" ]]; then + if ! chown "$user:$group" "$dir" ; then + error "Failed to set ownership for directory $dir" && return 1 + fi + fi fi if [[ "$dir" == "$tmp" ]]; then @@ -81,14 +98,85 @@ addShare() { echo " writable = yes" echo " guest ok = yes" echo " guest only = yes" - echo " force user = root" - echo " force group = root" - } >> "/etc/samba/smb.conf" + echo " force user = $user" + echo " force group = $group" + } >> "$cfg" return 0 } -{ echo "[global]" +addUser() { + + local username="$1" + local uid="$2" + local groupname="$3" + local gid="$4" + local password="$1" + local cfg="$5" + + # Check if the group exists, if not, create it + if ! getent group "$groupname" &>/dev/null; then + if ! groupadd -o -g "$gid" "$groupname" > /dev/null; then + error "Failed to create group $groupname" && return 1 + fi + else + # Check if the gid is right, if not, change it + local current_gid + current_gid=$(getent group "$groupname" | cut -d: -f3) + if [[ "$current_gid" != "$gid" ]]; then + if ! groupmod -o -g "$gid" "$groupname" > /dev/null; then + error "Failed to update GID for group $groupname" && return 1 + fi + fi + fi + + # Check if the user already exists, if not, create it + if ! id "$username" &>/dev/null; then + if ! adduser --gid "$gid" --uid "$uid" --comment "$username" --no-create-home --disabled-login "$username"; then + error "Failed to create user $username" && return 1 + fi + else + # Check if the uid is right, if not, change it + local current_uid + current_uid=$(id -u "$username") + if [[ "$current_uid" != "$uid" ]]; then + if ! usermod -o -u "$uid" "$username" > /dev/null; then + error "Failed to update UID for user $username" && return 1 + fi + fi + + # Update user's group + if ! usermod -g "$groupname" "$username" > /dev/null; then + echo "Failed to update group for user $username" && return 1 + fi + fi + + # Check if the user is a samba user + pdb_output=$(pdbedit -s "$cfg" -L) + + if echo "$pdb_output" | grep -q "^$username:"; then + # skip samba password update if password is * or ! + if [[ "$password" != "*" && "$password" != "!" ]]; then + # If the user is a samba user, update its password in case it changed + if ! echo -e "$password\n$password" | smbpasswd -c "$cfg" -s "$username" > /dev/null; then + error "Failed to update Samba password for $username" && return 1 + fi + fi + else + # If the user is not a samba user, create it and set a password + if ! echo -e "$password\n$password" | smbpasswd -a -c "$cfg" -s "$username" > /dev/null; then + error "Failed to add Samba user $username" && return 1 + fi + fi + + return 0 +} + +SAMBA_USER="root" +SAMBA_GROUP="root" +SAMBA_CONFIG="/etc/samba/smb.conf" + +{ echo "[global]" echo " server string = Dockur" echo " netbios name = $hostname" echo " workgroup = WORKGROUP" @@ -108,8 +196,19 @@ addShare() { echo " printing = bsd" echo " printcap name = /dev/null" echo " disable spoolss = yes" -} > "/etc/samba/smb.conf" +} > "$SAMBA_CONFIG" +# Setup user and group +if [[ "$SAMBA_UID" != "1000" || "$SAMBA_GID" != "1000" ]]; then + + SAMBA_USER="samba" + SAMBA_GROUP="samba" + + ! addUser "$SAMBA_USER" "$SAMBA_UID" "$SAMBA_GROUP" "$SAMBA_GID" "$SAMBA_CONFIG" && return 0 + +fi + +# Add shared folders share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" [ ! -d "$share" ] && [ -d "/data" ] && share="/data" @@ -119,23 +218,23 @@ share="/shared" m1="Failed to add shared folder" m2="Please check its permissions." -if ! addShare "$share" "/shared" "Data" "Shared"; then +if ! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG"; then error "$m1 '$share'. $m2" && return 0 fi if [ -d "/shared2" ]; then - addShare "/shared2" "/shared2" "Data2" "Shared" || error "$m1 '/shared2'. $m2" + addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/shared2'. $m2" else if [ -d "/data2" ]; then - addShare "/data2" "/shared2" "Data2" "Shared" || error "$m1 '/data2'. $m2." + addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/data2'. $m2." fi fi if [ -d "/shared3" ]; then - addShare "/shared3" "/shared3" "Data3" "Shared" || error "$m1 '/shared3'. $m2" + addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/shared3'. $m2" else if [ -d "/data3" ]; then - addShare "/data3" "/shared3" "Data3" "Shared" || error "$m1 '/data3'. $m2" + addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/data3'. $m2" fi fi @@ -146,6 +245,11 @@ for dir in "${dirs[@]}"; do addShare "$dir" "/shared" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" done +# Create directories if missing +mkdir -p /var/lib/samba/sysvol +mkdir -p /var/lib/samba/private +mkdir -p /var/lib/samba/bind-dns + # Try to repair Samba permissions [ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock 2>/dev/null || : [ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores 2>/dev/null || : From 135fd387785a8c7101c31fd59282dacc0159f584 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 10 Oct 2025 06:28:20 +0200 Subject: [PATCH 470/505] feat: Shared files inherit ownership from parent folder (#1465) --- src/samba.sh | 178 +++++++++++++-------------------------------------- 1 file changed, 46 insertions(+), 132 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 4580063..d70cb1a 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -4,8 +4,6 @@ set -Eeuo pipefail : "${SAMBA:="Y"}" # Enable Samba : "${SAMBA_LEVEL:="1"}" # Logging level : "${SAMBA_DEBUG:="N"}" # Disable debug -: "${SAMBA_UID:="1000"}" # Samba user ID -: "${SAMBA_GID:="1000"}" # Samba group ID tmp="/tmp/smb" rm -rf "$tmp" @@ -37,6 +35,7 @@ else fi html "Initializing shared folder..." +SAMBA_CONFIG="/etc/samba/smb.conf" [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Samba daemon..." addShare() { @@ -44,9 +43,8 @@ addShare() { local ref="$2" local name="$3" local comment="$4" - local user="$5" - local group="$6" - local cfg="$7" + local cfg="$5" + local owner="" mkdir -p "$dir" || return 1 @@ -55,13 +53,12 @@ addShare() { fi if [ -z "$(ls -A "$dir")" ]; then - - if ! chmod 777 "$dir"; then + if ! chmod 2777 "$dir"; then error "Failed to set permissions for directory $dir" && return 1 fi - - if [[ "$user" != "root" || "$group" != "root" ]]; then - if ! chown "$user:$group" "$dir" ; then + owner=$(stat -c %u "$dir") + if [[ "$owner" == "0" ]]; then + if ! chown "1000:1000" "$dir"; then error "Failed to set ownership for directory $dir" && return 1 fi fi @@ -69,119 +66,47 @@ addShare() { if [[ "$dir" == "$tmp" ]]; then - { echo "--------------------------------------------------------" - echo " $APP for $ENGINE v$(</run/version)..." - echo " For support visit $SUPPORT" - echo "--------------------------------------------------------" - echo "" - echo "Using this folder you can exchange files with the host machine." - echo "" - echo "To select a folder on the host for this purpose, include the following bind mount in your compose file:" - echo "" - echo " volumes:" - echo " - \"./example:${ref}\"" - echo "" - echo "Or in your run command:" - echo "" - echo " -v \"\${PWD:-.}/example:${ref}\"" - echo "" - echo "Replace the example path ./example with your desired shared folder, which then will become visible here." - echo "" + { echo "--------------------------------------------------------" + echo " $APP for $ENGINE v$(</run/version)..." + echo " For support visit $SUPPORT" + echo "--------------------------------------------------------" + echo "" + echo "Using this folder you can exchange files with the host machine." + echo "" + echo "To select a folder on the host for this purpose, include the following bind mount in your compose file:" + echo "" + echo " volumes:" + echo " - \"./example:${ref}\"" + echo "" + echo "Or in your run command:" + echo "" + echo " -v \"\${PWD:-.}/example:${ref}\"" + echo "" + echo "Replace the example path ./example with your desired shared folder, which then will become visible here." + echo "" } | unix2dos > "$dir/readme.txt" fi - { echo "" - echo "[$name]" - echo " path = $dir" - echo " comment = $comment" - echo " writable = yes" - echo " guest ok = yes" - echo " guest only = yes" - echo " force user = $user" - echo " force group = $group" + { echo "" + echo "[$name]" + echo " path = $dir" + echo " comment = $comment" + echo " writable = yes" + echo " guest ok = yes" + echo " guest only = yes" } >> "$cfg" return 0 } -addUser() { - - local username="$1" - local uid="$2" - local groupname="$3" - local gid="$4" - local password="$1" - local cfg="$5" - - # Check if the group exists, if not, create it - if ! getent group "$groupname" &>/dev/null; then - if ! groupadd -o -g "$gid" "$groupname" > /dev/null; then - error "Failed to create group $groupname" && return 1 - fi - else - # Check if the gid is right, if not, change it - local current_gid - current_gid=$(getent group "$groupname" | cut -d: -f3) - if [[ "$current_gid" != "$gid" ]]; then - if ! groupmod -o -g "$gid" "$groupname" > /dev/null; then - error "Failed to update GID for group $groupname" && return 1 - fi - fi - fi - - # Check if the user already exists, if not, create it - if ! id "$username" &>/dev/null; then - if ! adduser --gid "$gid" --uid "$uid" --comment "$username" --no-create-home --disabled-login "$username"; then - error "Failed to create user $username" && return 1 - fi - else - # Check if the uid is right, if not, change it - local current_uid - current_uid=$(id -u "$username") - if [[ "$current_uid" != "$uid" ]]; then - if ! usermod -o -u "$uid" "$username" > /dev/null; then - error "Failed to update UID for user $username" && return 1 - fi - fi - - # Update user's group - if ! usermod -g "$groupname" "$username" > /dev/null; then - echo "Failed to update group for user $username" && return 1 - fi - fi - - # Check if the user is a samba user - pdb_output=$(pdbedit -s "$cfg" -L) - - if echo "$pdb_output" | grep -q "^$username:"; then - # skip samba password update if password is * or ! - if [[ "$password" != "*" && "$password" != "!" ]]; then - # If the user is a samba user, update its password in case it changed - if ! echo -e "$password\n$password" | smbpasswd -c "$cfg" -s "$username" > /dev/null; then - error "Failed to update Samba password for $username" && return 1 - fi - fi - else - # If the user is not a samba user, create it and set a password - if ! echo -e "$password\n$password" | smbpasswd -a -c "$cfg" -s "$username" > /dev/null; then - error "Failed to add Samba user $username" && return 1 - fi - fi - - return 0 -} - -SAMBA_USER="root" -SAMBA_GROUP="root" -SAMBA_CONFIG="/etc/samba/smb.conf" - { echo "[global]" echo " server string = Dockur" echo " netbios name = $hostname" echo " workgroup = WORKGROUP" echo " interfaces = $interfaces" echo " bind interfaces only = yes" + echo " socket address = $socket" echo " security = user" echo " guest account = nobody" echo " map to guest = Bad User" @@ -189,25 +114,21 @@ SAMBA_CONFIG="/etc/samba/smb.conf" echo " follow symlinks = yes" echo " wide links = yes" echo " unix extensions = no" - echo " socket address = $socket" + echo " inherit owner = yes" + echo " create mask = 0666" + echo " directory mask = 02777" + echo " force user = root" + echo " force group = root" + echo " force create mode = 0666" + echo " force directory mode = 02777" echo "" - echo " # disable printing services" + echo " # Disable printing services" echo " load printers = no" echo " printing = bsd" echo " printcap name = /dev/null" echo " disable spoolss = yes" } > "$SAMBA_CONFIG" -# Setup user and group -if [[ "$SAMBA_UID" != "1000" || "$SAMBA_GID" != "1000" ]]; then - - SAMBA_USER="samba" - SAMBA_GROUP="samba" - - ! addUser "$SAMBA_USER" "$SAMBA_UID" "$SAMBA_GROUP" "$SAMBA_GID" "$SAMBA_CONFIG" && return 0 - -fi - # Add shared folders share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" @@ -218,33 +139,26 @@ share="/shared" m1="Failed to add shared folder" m2="Please check its permissions." -if ! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG"; then +if ! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG"; then error "$m1 '$share'. $m2" && return 0 fi if [ -d "/shared2" ]; then - addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/shared2'. $m2" + addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared2'. $m2" else if [ -d "/data2" ]; then - addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/data2'. $m2." + addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data2'. $m2." fi fi if [ -d "/shared3" ]; then - addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/shared3'. $m2" + addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared3'. $m2" else if [ -d "/data3" ]; then - addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/data3'. $m2" + addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data3'. $m2" fi fi -IFS=',' read -r -a dirs <<< "${SHARES:-}" -for dir in "${dirs[@]}"; do - [ ! -d "$dir" ] && continue - dir_name=$(basename "$dir") - addShare "$dir" "/shared" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" -done - # Create directories if missing mkdir -p /var/lib/samba/sysvol mkdir -p /var/lib/samba/private From ffadba3f3f8c725fd37d5d66e8116e61f51a96f4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 11 Oct 2025 17:31:14 +0200 Subject: [PATCH 471/505] docs: Add link to WinBoat (#1467) --- .github/winboat.png | Bin 0 -> 22156 bytes readme.md | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 .github/winboat.png diff --git a/.github/winboat.png b/.github/winboat.png new file mode 100644 index 0000000000000000000000000000000000000000..2b5f6dbef88f304c6fcff445725954f4cc0e408c GIT binary patch literal 22156 zcmZ6x1yCJLur>_jAO{KV1PKRscXxMphl2-#OK^7!?ry=|-GjTkyW5xd-dpuo{ZrN3 z&&>36ckQh7Zg-fXyaW<F9y|mD1d^1bs4@fuB=kSb2M6=-STO9h|BpdBDN6`LR80~b z|LXuOgye)EAZlU|-i-c}1Ug7+IYB^t?f#D-!3$x)e}g#AVw%n>_U6v6MnB9T6pgIx zoayDoREgQ>ndrG}>{j^y$uyd2N|{SZQA5D}>p(-`{j&@C4@v(c{QtxMyn&#E{PI8J zQ2#I!BoqY7Kd$|ctU>_)GY<ZT|7%??kPt^-{y+ZzGYau<Di#(3@K2JFnS~KD=YO^S zXAwH*e>Elk!~Zp?e|n+*M^c%K^B?-ZRZNVG|IL<Dh~!ys?%P5@sPRaN3aPs3pLe*n zlS#NAzI&H(XE^Mxjj+Uv8znl)Q<B6&q9$9$0tZnSI6Dp7tvx5W4}XzzLXg8I1Pm(? z0~3|Ll18z*+wteNm7lnOmhih?tffvzwhxY7OkVn&WI45#m6x}bXL+1Rkr50Uy$O6Z z;O+@s>JRRz$)V<teG)_u2q%F9d{O(pLw%{NCWlz0Xs!CiRNeV9?Q?g#KE7}W0!`|( zuc~7c;lJfwq0${nbH5F{ttFZ9%b0P5YD%U2q(z~AmEjS^_J<qjhLnYe(3a%o2{HEk zf=V0q<(+oW*6Kza{6VY<5m1UIwLWtb;@>B_&G<DxSS1_4if$u-39M3PN>&Y|{cCM^ z!pn&@mu@CPL!MG&CoP&$hSv>+MtuDw3dHHBg6VM!6D2_rK!!G&UgD)>a@59+Qj5p~ z{vuYRUWPinRdx7H`OisO;nJiLklq%I^b3t$*2m=7<+9IWDaYnxrMaE9gz7qYHaI_e zN~2QO^Gww9xw7whxMK{b#oOKb8NKiL>Wy)C_B(S^y&YJ7$8e4WRjHUd;8Nz+_b;a` z#@Ag&@LhP7)j_2sN(OxLAcw2(eX-s8kFoTw_a}`(kyVa%73MTk5(*|Nv8LZFEvYBZ zlSM4a*`9kVx%2yq%y&q;d-#pAcKBKX$yJ1U^IBFKlL~)oVa?S=M++A>h`i_o{+Y4m z1$%uzfR(2FiXPO*8Hp!0Zy#DiUstL!f7jCzqVPV`m;D}rpY`<O-jOR`Co2=F8Ch3Q z5QqX-hGPxHQ&a<m2KzX)?A`9%O{*+q)Ht%@yVF+2^UTDq*H-YU(-CQPST!@<EKQF^ zFY}KNBPuS82P~M(xV2Nqy<*EkIEHCLUu{G*sKaJMBr#Nm#{Qo3{JCH#qBxLNEHC(f zE|pR9KY?nb3d;_HzimF1y852#3GgkicsE+7aO!-g#<8#Yt`z=@!m`_N+7RwLPK_i= zB%ZF8{}8^tE_f!DG&n|=%T&Bbjxil-8`9r>YYAzHfNMHysXnjeWFhJKBxG@=K?lGC zi}4+em7c63^o*4Ajs(YA)}gZ=zJUF<kO5C9K+aYh099)Gn(=7*zdM7~^XO@eFQ+zt z<`m<7^T_YGIOOY5#>b^wNG8v>6Et2x`Bg!vTg=h;56*<5H5_GGIBGy%$yal)EA4HO zpb`=il6<8~yDFJNMyI=dC6(n61%20>IMS$T*x=hZp5QdnP5k)WkfE6{dFzt%ltc6& zQK14@n1GHl0X0#tt|Ry`sVF8X)qFfyaWUXYPm#hT9|1Xhh$9YLJ2z?tWJPzltIwyw z$4juSfqRdvNt!>}ADnFC8cqTd#}d?TVlY$BchwU0P?QvOamGOuRuth-1VDZ$T%I7D z>PB1|#x5<=Y(Xwvz39N0m+@Ie_1l+IagIQw(`fxg`PEIroAdOvq8e{Yw-Rl(MweG= ztqwM_OtiS?o{o~T(vslBoL}geAv;mpa`Ah<nUrt63SGtX>|+d6trvM^tZif9y9>LJ zZ(_c794;EwEjJ4nJR6S`U%)?cLau#j+k@wbk6BqH-UbeRKCy|IT|Z5iZ={T*D_AAH zqObjjb`#(kvT}q~1++nlOQI;K8Mm4yD1j(YFm*@L;Uy?nmS`v#m*26`yt>1Ccw!oW zsRbo0TX0o~h4*K?#?BpDEH3?{!B%UrPkZtl)g0BDb+Q!d@~Sk!8g>Q~D-`6KHJC?` zQgqc0g0TUXtY4)uHeRbQ6)u~N?p!@*&pE);q9W0*T7`K2$on1Aj=uY^$bpJ{Yv(_k z5M$VgQfz!qN9WTmKDRD?K4J?h{_TeVtztDyz`M_56^+14=Huss_kiu8MxS3VXCyhR z9{w><yr+m5=vJ<ZR|4mDdVQh<H3)*s;U@+&e#b#oh4wdwVB0D|p(zn(3SxqS62d6P zEQ6%MLPFz$XOJum92F8opXmj(d9Gif?vhS0Ns)QWdfY^*MKvUtkd8S!JKyzS=8tuC zQ5$?L1y-f@?VRjOpu~BT-v*!sHMJiHNQ__LeMtL)&uiq`2sEg}*etI?1@~#%tD(f_ z-8JyyLb%sAM5N;7$=O%I6>GR@>75_QM9*<_GN&I?{l-$~Mg)TiLTa<sa^Cm%2CpC3 zKCc(cmq@22h2M$!3+IW<59wBy-!dgeZV(f2<EI0!NmFWWj_xt?F}YQ@%lQZ4AO~Pc zYN#NwxxNGzWOefSr~C@-OOd9rR^~zm$l|3?CDBOPpq)~Zh8T%4VF@eFiJ&R_KjuJI zkYRM{##KtE9mgt7OKGUZl&e2xc<qJZCr4GK8f<8K_r)DEWeXI!kL#(MdR)H~B~re< zRJXgzF?F1<ydSGskQ+rN0+9Ir{$gVL$pZEL38fpZEIcpKEbMk*mw)~3pvm{9<r4B~ zIi<_On^J<Fw(a@-y#9G<bM5&GF{b?mmRpmCgF#&9SEyWmDp>0-3jDWy8n471F-K`$ zh3?=MtH<FF^Fq<~-xKagB5EA9bFGB>3XS;#i6*Z*4tt-oU=9IpR|a~Gc0p>oG#0sw zm#y=)x2n~Yh3=<8;9#}(n3aM+^g?Z-;j5&bLm^2au7wvm+yaRzAjk(L64GR+o8c8x z7+#-A9XM!o3%JBI0OkSJA*g_ZVzwdVq1cgv-P;w$0mfpK?Rmy1mzLqVVhB_}@H*eO zmL+t(E>lk@JyyAP552@qV_F`B!g}$2w-qGHOJ_H&MoF`(?cf}<L<uZInbAW5Jv_Cv zg^TCYmh2@N5(7E8ClhTUzWcV>Ef1FvRh|#9^fmJ*kL(Fy0I{fPs~+#ROY=)*mNp=; zsg%F{_FMLA;l)hjo2OFCGe|C&;Fl{k6sG}*O{pZtQ%UvL7kJ~Zg@_8dYesJl!t>QH z>GqxH6n1H^2i3s`Z=n=u&;*f>gU_P|KGCmT&EKL~GhBP1mq1s4*PH5YANV28i>tR% zt2+W0xG4)m?$TuKPyViJ|FJuVFLTZ^6&(%^Cb2a_D@1e(tPi=(3dR+aW(>>E31}iL z4yMH|q=cFnNAn7q;g-fsBM(tV%?F%b?MPYUiXYQ0MY0M8{BjKkhyUb?0$ZLwmru4` zFXLA~58RVV*wc@?+wS#w{M8yy%G^?urU>VN%=WMIuM0M$g+%AVqRoY8t%K<i>#!9L zpQc4t<K`}zN~|2w4c0!dXaU!!R^yMP6|+uUS%;jR2!LxI-sS3Ul3jj$tomL+8*o}( zCcnMLk&8^Kfy<Pm;7T}|sEh<rAZ(21!|4%?)shO26-NocdLgsO8c<hij1ZVToTt&W za$IXE{6TcU)IM|RYL*G~M;lnfvx57K>$N)0U9sYuj75PE8Ur74x}4j>%(He+>>jO( zJy7A*702any8SaZ(Nk*7m3@~NpMlS+>+=Wf<!;!NK+i(8t;s1}LbDzt^%!GE<akpY za}PK=E(0XxSS2dl?KY6)mjjca*<Q`4o<}@O@jDi6ZcCIYHH=yb=?Ud34^W=im{Y%> zmQL7qz4YqoDp375wT2hpzen`b6pnSyvs8F#)z{fkIgB?Xe8IYilM8&e!c1Ljr)Z#7 z6a*tziCV7x9X{3ew>o=91O9H5I(H4NTylqS;qw?n>x10HfbH{RZ_5!Ej8GIN8#yXX zOBuMVtdg6JQL3yANzE22s_+<Pj6nH+PL=Zf8c2z{i*5W{B{@%ZwfA+YA{nOlIa+<r zk;{>sIE-iC=sk$eP*lrh4nUFdlXgsfz>lrN1grR$_RNg3ZIvDgEhADJe^-Rg=kwRj zn-GINgsx}z&WEb%>EF2Kk0Nc)8$5RVo|kP=o?UmuZ5Qc%woI(%;#RH_T2&@{9g)Dc zU=o(-asqLvKr~*Q>^LyGBo$N%To_Jd(vd(aTtSXicQIzccB1X=s=m_Q>$Bm$!{7bB z(~YZ@_Lb*w0r|U74p7mz!m^Xt90Zu(;+W_dJrY*s!ikmI8P&h(*x&aBd_U3*0L>TS zr!lrgCQZ>Xkw`kc&4}{^Vv4h0fB-4V->t=`O?<D}0zT(Og|;4LSMpJEpu{ShB6c-F z`<7Ctwf9GR{0%Oy{q!ht9?qX?aQrMdrP!K9oe0qWs8_u`qc}_>B=eXlH8~}*^h-^H zh<TUai1UW^FIa?2%-CNAg-oYt*4qLvnDX?T;U4(OVK32M#Z1Gn3=EhQs-Cq2d)Dd| z+>x&T3J0^n6g<E{M6M?k-;30+^J|ueg^Nr11fmp#$Fw(+LST|^$;{^+MzX&8%yac& zudlc4cWttMwj`-p%Y$xz*P8Y>EP33@^M4klLpI+%r#SAYQT)|SjaLnZ?Q}%W_IOQ! zXg=bgKL{;fG;}CPNBg+{N#sY5Xi)2qP{kK?&eJr#t{Xq8>0+NcK)~0}_PLKn*nBA8 z`99S26)#fD&N8OS3Xx+txk=OgjCz5nA>M3EgR!YyM01*g33|nq^&H1iUO?4SeQWj? z1C*8-s!}@!;7h1jB$+GMxqd=KOvlp)c9rin+ip~nj#vR_0pV3yir2y6jp@1$Iu9OQ z1BNIx5N(1V69f?T#&B^H>-X0#Q)FJ;yu-eHdYkV8T&-Al){`{lZ`$o2gXjHKDHJEH zvy2H*h0K0uWqaFHExF&f@w+~Mky*V}RZ1q2Q7Ps1aT~(odB{axa~1+Gc0OMZjph@s z@@`^|IPFj(9_4s0equ#Q3dIK`qso0Ptb*>>t@Ny-CxnQQH-O?J<|B&C>zV2iKs7?` zSi)y}C2-6Uh7E%7G!Ow7Zwp=cP~qMOgf&&+g@E-Ya^Cb0f#JhY32lNNqSI+*0}|NP z&4(AFOn8Ec#MIP6k!~hJk>OH5CW^-MohdHT@dd2S)ifIl^$rp!y>B4KdMP(w_w?4D z4j+vr;SgYgA`DsNJ+{L#Zt`{|7cfjW6xYt5yQjQiekJHT0kOO8Fg%`VwNPrAjegWh z6jN$8fHNeB++rvDzL_`4)p?GgkFRYz+$u%XU>trvkX3ZpaDki<Sw!uvyQj#0^Y+jO zfSW}FX69ffA4y`sD*ZV^QhL1((+8uw*&plH$$YQR<>Cu=+lrpuH2Qa`*;b~fpZqdI z(_2#DykGExiy8jZdEqFE)x^`IW6$9&H*vmi#i!ZVDiGD32TtX|we#8Ff=VZJ^zOnO zs?Z$e96&qyok-V-TF33@e%;|(V?Cb&^rVIqoK!sdk@qHYv4QV9pMcYp-ZAF;$KTfW z>CpsMRMvG*-8Tk7Q%43~*8b*iubp>7QybVnwvsk|rj$y;dVNmUHfsWQx+&-oPrfMU zl9j+x&#C_+sIW*Y+46<|Ysud%nDQluyzIjU1q1?69U%+IyUyFL@ERrDNf7o@u;5S) zXELtgAC!N3pl^P5lP=9uNo0C}655JVJ8fOPlK`of*W(=elS+p%vm88DYPd08)+~#k z3v>_}kGqQwFHVcwgFGcaadP1N;vpJPRW8uaA|<lm)~>2n-L_U0V(E#tpXy?Y7Sp%4 z?L`lsTkJgv`-(Xz%W=<G*PcgSn_q3yad;d9S$xi9ll3^G_hQ`w5Xi{Usjows0EZ)9 zy^7WAp3^N1?_2Yvi*L#-L}@$SeAf0Q2PLfSX#|x~`LuB-Y0wYsK6sF%;q$)+OvoTe z-U|&#Asx75zQfomCAow4ci`ahYKJ+}`RNmj41y`n@n8dP*Fk{nLZIC(x$7Br=hg73 zT??0cYVFOExQUpEsbt2KBT1iiYpj2fo7@%1O|Epfq+Z@swckXZ<t=_sxbx^SiyQXm zKq9R)3^pSDl6U-KK;gjsT-bY|n;iCo%Ezxm0@^}YS)(iO<DU=dh=g?x3Py^b{QFoG zZP^dBase*=o7b5KZnj$ue&B!{I{!wX58OPKe24=plRG(oDO`~#T8y+HYFVeU?1B#> z1)|dog2MjF=Yy>N4f5iT0ftOu^snoDV<JuV#;a9ae>47KlM@l4L}i3@`fzY`?2_C0 z4rQ)A=f1jK>7*aqq>~QBnsIp(+!jeN$20S?%VwEFEal^6ykw}foZP2emAQ8PO6k1S zPCKPjD;|=x2yD@LU3+hoq%FG4+@HK$llUE@kCue7B<s*)(vRkE95n#=Bh-j|JnV|6 z)y9Iu5h9AwE)6M#$=W9qT_<dWk%Cj!zcUj!178@_D;Ni-W?rIvWToat^Nwk;16do4 zSu<IJA-PjhFC6uqeTxbeA0nV(L`5s{0=vw(-`wh#n!(FW{^7<$hl6`vi{0>29G~!P zAw^GCiyg5LS#1{DqMYOLo;9u?+WnL|Pzae9pFw!Sbe;;{A=@LK?EcN6;1?nBxej|# z;p0!rW5o+T>LBbDGGzrFrl6Ht#d$PQI6)K#WwaZ9{?i;O<YK;dV2RZ4?2EsvnCl4Y z)jC48MPWLGnl3ju#d<Eh8v3665Xe3U@<ol0C@g{V<UEASs3B>pvi$X_JOYl`O&zy( zcHXCYUbl;O#<P_=jFXBkG?6t+AQIIqJr<rNrf+QDtT`&WtD00#2?kK1N5qAKsl}~G zV-T8rujC<awk1W$?boBzgL$puK`8yX(ySw24Vg5n>n$$`u1T91epGR@=KVdzR$2FH zx}4huHurBSizLBiDk_5%$%C0OM@1c^KzMpTjW+HNUpAmWyBV~8O~<uUs1s4?A`|ic z1}PgEkdSZr54{R%CF88(8>}RY1aV`|2TO@Ie-bveF5-GPIha_BtpFHGR1KvWUnvlT z*CQYmBk!O7O884CqS54FN}&ltO~Q`*WgVccU;#&VOtX!{#Z3efOUX-L$=93Cgta|< zVP(t(e)eOiS_|2L6a!8#iSR1DkxG>O&vTa%>&=13tUb>8_99Tm%A=|A8_~EB3k~XZ z%m!k!k>Ay@pf3U(*}jMkZGQ_?Ug{Wu^t&VI8?bNB81uQHu6i3O=iD8zm~Q^ze{f?I z&nq$za2?mMn8<kgdkt&iXL2<jX?;>^fkYSXktM8-5W8*jeVyw~zg_}p$XxfPHo~$B z+>8EqeP-wmaYwL2{MHJZ6eb_W3yz|S>palKq@?XP7C{OAC3Hf|G4r@rlg8Ow@XBOV zrt!@|>Ez_)&(TyJe>%H#h9bLDwYsMJwKdxgMpqpJ9@o2{AC3H(_`=%j@vO(=yj~xS z-R&2Y@CIx8K_?5nm`#aQt`bT=FV8eGc@8{po7%Q6ON8BF2iNB<pSKHbxm4ZA?uGCL zt;ZHd)Y1u44dOU%gOLf7EQ4^p(Drd7YAhib^xFba{(J`weis7zV3}c0PWS=(`^lW) zWJ3Fdum$gTtOdS#b%pf^pNHJqPwCafkegU7_uziUJ^C8Di4x37UEL?aMr<}mVxBU! zP~gB)Q(_%{$@`mn%=9cu@YKeBzExw-+Z&DFc+-!x+H#p5<1pl!zh-z>!B(NqCQKvf zY7w(BX-V7s)}KV+y{(k-<{y=DGZU5Z79XYij*jivA7))rMz|md_mv5YjjC?;YZGZ> zXH9$92+{`CU?GU!j5V_MJ?q=rO`PYyU@PsGYx`~2Drz4>mX9gs*kUO*eyPA`G92eG zO1CxJ9C(vw4d;~hqV(URBuzwRQzoS8&4#L}%LV+QQ_XZtT5ZMJ)LFz-yE_!%e#It4 z=o6I|VqlvvQC%A~WMFkOq#wsl*hWvZa)X|~+xBrf?Dkk`R^$2Au(7SYB3{m(A;HtP zqV}<)HuklOX5a5r_@$qwE;m&p$>@|u@3*&FUFuu2)I?Kq<G$inhP0ycWy5l{CAQe| z+Ks3^^@Py1C<T*HpC7b(O~TnT88wJ}D8)Z8yl!gD{a&Hkd|k=imSE@aia6=$6t=ux zzat`}W^(_oFo-fF5euoAXi$I@hSa=Tov?l2wPor{VZdCY!vr+Ajv{OUj~VISRcMYF zZ?h>>0&SoO1(Xw?Z;Df+d764j>qdV27yEMiW%Cn|{b8TIm(cZL#s7G?X?*x-vVn?S zX}EksaLQZ9)AqDH995;&iIt#s7q2IKxEia5nU5blJgBS+CH}?A7IBH;%X&*IQG*|9 z1Wv$Dpj8sfiNvu@=E2~pJs{`jG(aNL6=OL(Fn2zV^320I{x3_Qp~Fc}U^76Sj57xC zv$Ed(^=2@f@D~Ep+v?25i!ZcpAsW>A3=;wGSl9bR=3&=iX4|KPwc9glS$>XiEWbEj z|5j53OpPdAI6PYqivKkV6gg;#7-#m7ta`F#@5i>mW~tY$HS{1LQc4I3Pqwmpvu(pW ztS^@&{!g<!Ozc1)ZR?M@6m8wlt=ByEw_=my_m4}k%pMF(S_mW-p_ZaQmE*E}8JlZD z#s}X)^15(H{J3`i6mwp3`>Lr&#P0NKQ_ZQL-mv^%JHsD#Y2q`WZxfn6+wk)4FTmeM z3Uw(?Qx=zp>AtAvc$1$s2+MBUN}#dCzkxpFcQb+u?4hS|Pf!VX{^a#V!Of4PkGJQp z-pG?+hvn01;|U<mRi{FcUvAa*hQj91;wL@zq0gRcwOL=#sZr;c>*sl!*JGw@A6)xU zwJ#!9XHNAj4mvRiL?0y+qhIqpF!a%%Zs5>6#!mo;cSVvk&fsnRI-t;XlMq%=zPfyM z14y4f=cF5xo`;SH6>B7Gs!>JgFI>9j%M>f=D#}Gl^DsEO4J&-!dS>ZCv>&W6Am6tw zD_YN0%gN3A6O)_nh)|Ol-iRlMO43_>)@;u|u04DDzNjdaa<nK9(1@sw#5z^9Uk|Qh zcf1-DeRx`1K6_Y)zzJQg45h*J;G2%9pa^5g8!=K7ldKr1!sKuD(N;e%vt#SpxL<nm z8hi+6^UA>W821leG)Ydd6VtyEVdTn>^rA9J!$H7I|6+4|K*7I)yn?AAUf31!3l(Ce z5XEHuIR=Dm2jb97_lQHH&WT=ft1?oDqPB~}rlEk7a{O|lMZd2e_hqGWH$rPNBK*pM zL=AY9j>qx$5dG4jFQi3TX)e4m3<RSjDhli#DHEJl+qUlP!W&{uPq!Xh&Q+nYe!cbk zqj5rfI0#4b<Ytdn%_^XQl2JTA`Ns+?TdAH>XY0GaYGUOOP+~2Z?-<Km;!?B@;7GX3 zU4SQ97_~?s63sc>=KqkWH><*0OEMD%V^m*|J&8IRUh^ZP`lFA-eQ)z&m)Hx6;OEA4 zq^)M(Fq5siJ;6{Qzx*rfILd+2(}_;k@Ikt{mg_uf#<hyYG;f*TW3+i33gN}|^yjtI zXyu=W3R2G3phIRC)ATjytY%x9Y|m2-h~}5dsbX*QXqf{^S?I~wz>Iz^_4Kd_f!Ygb zfscyaEPT2u@L9I2zW)!mx4Bxrw+}6g&W+NuMVcA|B&ioNx!Ea=BMYXRQev+`^JBV7 zm)FUMt1H_+k-ny=uSlB<c8&IIjqm%N)_R;J43anKTIKFUt!LJ~{n((2C;w`4e*5=+ zi%R@wR<)NAyQUY1>Qnt?Mv)NFW-Jju6v=i91V2PpHB_efUGGGG1g*2RSCl|b2NQ!Z zWh*724q})LBtvK*lW8z&rPegYG-$;>P*O9NxylF@^Mb`m89lJshfGv~1N-0@OJ&@} z<!|PuxILIA^V_OJ9m`XTyKISM|8_4yk2-)fQD2G14b|Tb0~w3D{EoGeMCfmAe+azA zm!3f(O#dNV63g!3Cue`48~()KYez(P01+U<Fmg*S3~ll7JIN1;@2YtK>R8;Wk2wFu zcijQ96j>FQHXP`DNI70Lbp#?2!6=Fv;VWUPXhS}6Kq+(xWKa2)f4`<MFm`~Q#Icg# zij$gvY%rLTXV}8MCxY7N;wKqJmZl;a+zu0E9;V{LYJ;fE2<S01S(9j3H+wv#Af7mW zR)eyCnuYI0E2L#w>p*>CmOD3$Pn%MlXWYE4^oB4VFoQAKdE}h+Nu%NPEHh>Pd>m2n za2X)6`3~3gIf-=kG>KI)R)XSX?ubWuAj7R=4ynn`+#9|PBX5p+%1FQc%CV-<!WO+n z*JO8~(six0@qXg!^uFnxRq1-E+dTfT&ci4seUQEs8wU{b>gKvX9g5N6YW?xdAO9fo z9sc(BbPI^bRvwSSm5paP^{hVD+`=k38-HexH=!8&H!ly5btAd9NPa#k=`MPo$nKa# z@SytFh9PzG=Np&pp~pzLgpm4ayTgeC#pFi(C}&oC_MuyI_B8@9B8SuJ_-%n%N7KHy z&ZnF2>}f)tKC^ZuFaYMp8`i8tavc^jE^onXK7`dpz943aY7WEmz^k+y<9;i;PK~z# z%eYLm*RZU0e8w6tmecbY;yur}k106&b%5k!=(65@EIa!8)R({C{^J~_`ZFp6yOY~& zzST;YOGLY2_$SV8-H|;04gzL&UXL+~vYchOSinFziG7hN$$&b0<3zuDvDCy;sK3%^ zZLf4NGL-tr4~b+jMzE4{GFcu~iP#q$+FYmzQNK=ePJ<sOT)VnY^=3Altx|CGKUm;4 z#Cp@nh2trOv&)=8P+Cy>ZHe3gpel7}SW)U5R?!`Gp%N$(&I-(KV>U<&D>EeBBt^B@ zrk4z-4IFHP){LL0ug-0llN2~6yOnr4V>AFHe@l6Au<>g^akolXZhdkYc`bcdcA=8A z&UBOai#Z_!pG~}q8Wsa?-JO=p0<*eaXIg%iFYT1q?5*3eKv!VO+r5n2#wBkAi$Mz{ zy<aYpTzr3=G_hk=Fk9k#{K(KLA#*&b+!wJC2Z3Ct!><<}L*B%(S*$(%^AbHPnh)2P z7dsCO>zKCoe#a6PlEUGD2&~wzI|5wuy!D-3#%}xFp~jH^f~^_WbLWWKU9mX89K0ri zl)n^9LP3jMojEw(oV+LwZ&tRSwX%lJB*7@5P^6O9nl2K?0CN^k6^Ra1kJ6wi9qG)7 zfzuFb4t31E`B~k-GOHqrfuwmU6_93LPpV&Aw#LvBr%kHFp#k+<9|X8JB>HVFCOV)| zuMN>ZR3IoRn7_d(-SJ2=`b#LlFf!hBOJtyojjT8;t?qh>eRu4KcnTY?&W3s4AeIJi z-N>o0BbSDLW_%!&2fVzXoM~>rpdW5v89>MHAwM@<<H#8*3{QJdl$$MfL=E!9VP80B zeYhq~dEN)B^9XhHYcRi+T@5*jQpEfbX7Pq0S?!zFd46n>)*dHf^WWmKJnI_cVViL7 zLTYNSV@X?KV=|b_QsO!wd)OG-Tml)SNO#KD``B<2j#%=qL~Fe>LjHxDOa*8u;_B40 z9W`l8Ord3L!pAu`aea!$v1(plHtj{YM0a!yRlMSrmjg$C$?*0h14`jU*=Hp|or7@3 zh*fZwN$~}A@CZ)s*~hu=Wu!esg}--I;uBbcC%+v=YUmFB?0SHgZ$H9$nMWk&jC2LS zlSiyaX0#)+7lBTlg!^XdZB0k7*O3=)T!YH1+QP9v#u1*6n?7g-uB)r}3Volv=)LDt z>(vLo*Tu*t1R-7r>!LYKzcDJ&IgMO~dn)}}yy$)61?4gFw0T>{vk_sQngDddl9wFW zXs5p;kq`rDlgK%v)Xk`=^qor(-=Xh!7S`Kb6C^hg+)&#g?Z5SK`y;ubdv{~j@!si# z%nc6UtYt1>EkT8eZn%6xV~fxQ_8=NeWhl>o;Ufz~Rjq>-{~il<?5~7~W~_y^Kzu(e zW4tbd!i5lUi@EVAc@sZ6LHd=PNaf><gK$f(dUe$P^M#)O!(NZD**E&(&(+#t%+=W; z5RY6cGNga|$Z(uDchk(LXlUFyq~+ME#C%vT2vZV2x#f9X)-IFcG5pqF4h;>_Y_rZ< z2e}g73-!B_RA8QBD+`ob*k22uDhby~rjE+KyGeI*iZ*BS1F8u3Kqz#mo!rH8N$^Wr zfn$_Cq8m{Pt@b_Dq4WX8m$oJ~=fi_xG>ILgm8okx0NH>VX2R;>?+yLwRCwni&%hsq z=-epbIHTi&Y946Ev#F;{4ds1rcLcXiEI8dfl&|;Jh=wzQE1{wikO4w(DD&ft`*SEo zID^gXC-_f>U|ey`bDaWVN+oFwg;>E7kq(Q&zkh&cO)|zo;r`TAN2&DR%u~(M^vh*@ z>&I-Y(|*)TOgT%{2F?`$)LQQ}-Fv9B-iH(pk3Zj~lQUT+ZMZ^`|CrsfxBiUnGtqa1 z-yK3$k{wr+9apM6tGT(`&$z2kz!jh>TX|ogcMjC8!wD6GW;L8XE|9dtH!4w_7ys2h z6KytC#i9^>kDo0dYBJGam2Af<jw+RBAMhsx2^)+5C*yBf5Kqv<?D5AP1!3na(Iph; z@p$$+4%+KZed+<2Z-Y`F%^$>>ur;uy7I1rutm<<Ld+Bqv>uI~=&iFRy`$=~#y~?9q zW$b*~_%ZFeuAh;4NZQ91@NKc{bs7eaX|xJ2CauJgkwik+Kb!=`48|fW^UsH5^QruP zTnNE}IZA=cT%6l3JPuKIP_@KRybO$BfT5gVWU<Ehk2CS1<>IJap5CUeQqHDeeO$Mz zPAa=rM}*xmS_y(_^MUZlA$Beo1ujWM5OmMw&gj?=df((92WFUu`a3v;@Mj(szhX^R z$P|37MrNxaIA$$|B7006&0@x~=MTdzDAO-#6y>f5m6aVP-A8Y;bx6|w*rp#Q-lEg{ zw*DBwBs=7vaGWH|Vwv=7U$%H%$lQy}0oO!@&raI^G48!O`r@?qvyH^QKHm?IhwI&D zs4ffPP<Myx5N$s+KdE%x$=L-qEeb0Me#sw!A*eh{?Z*dZmJ@vt%M?)Zh@~O_3*xSn z<4KJ<_K;15+u-eXFAdFPOTBTQBho?@u6aG(+Uq+PJ0ClNnQ$J{c&ZfEhK6DQLhix4 za;<41Z@rX=IJI;hWVzwIF>8-vxq+Axx)~-lj11nlXf%=ia2zcu;|wut#0?Fm{$KZQ zr@+D8GWdX;d$b^o$e_4ulK7(UVfk@ItTuy87KDARGz)bf89(=Eg0kfQ{Zvc(2`J~( z_~SH$<+8azQJ;8!_)Ur*JYCRFuGr!~AC<pWT0Z%)6E+szwT|AtBgXjAw0YA8t2o0T z<m4uq!NMe6*wFtckqIwqg)$!~Zmm9zY7^9ixq;!Pvo)}b)xyM@hLbc30EYK##!zD= zfyhnZKqP_U;J#XKi3_2e>ujZgg^b=j!N&k0PY5^wl(F~31#J82kQ|@?g0WxO!!ynt zhWCnyVz^J3(>i4eqvO|=bde>`iSN_%96m(j1wvPy$z`jFd3Oa;@-znW-%p?BD2m;W zYW!=|93G%WLY=1-4HLdrzg(;FUUo$~j?9X?tqhEDUglx8AMKC1Z;y$O9Ous%ojcOe zcX~ylvrqc12C)$q-|Ak~!=&hO^>Q7WHs{GO`W4LYz9Bf#cRDAUjS-OF>pF|27aPp( z)Q%0d+{FXwJ5Bw^st9(;7Udk~S=5E+g`g7UQSs%vqL^?<6RSjLw0!njxT@Xuf6#Xr zXB6wPPY$F+J5D$aK2K}VTlAsgnknt@vZgtFK+{#VdvPhWS^7uN<88;&h(ArIRBu(V zpv{SG7Z(pLV;8(FStmQ~&*$rUTr<<RSYm4Mdw(<8je7~#F6)gmSNfF!(wZCG+N~8< znfZa~bLbd2VL_5EKg8?u{dr;6>XJL`;SN}D&M}j*D!8B}v0@NLH^^iMca3WZY?wDo zGX)SyRz~$!LX_Tuk|;DvGvRl|5qki#=5WSWc=;T`D52Nl9w1fC>$^4Hk(<D?rO5rm zs9DWwH=Y1VWVYzeJE~fLMl?;=-kN%PXbXhK2^&Aw93Y1F_Iw?!ffdD|1|_2{6JHNT z!2LN1DzwJWd2+dSa?T*bAVVZDfMH9PSW~Q$0+bc&!Fq40jcS8g_)d?f3gMQyygq#H z;*XkdZsZU)=&&TZum+2&GXIrC0h(Ep0(r1f5^)MS!u{ooU=6T=s;0*}#fgEw<qiyM zZqcDgZEWK!=m0XN9HY-i=V>`v4&GI8bUVNF&RnrK_Far_l>gFWiiT<XlQCV|b7?M5 zEjW-o8Q5rtza3XurwXj#8qGIHJ2ZFOKp5nDd?Oh}<G+pj>ie`Bb2V_v1AxNTjr%cQ zClq0I;p-OO+vhk`Wzvqje48I_KSKyMgpOV{yz==fk-cz*c)HmA#=i97=2!IXhTIg2 z!{;Y#*JtwT^Q?f|Zyq~39KuFjmwiU`F<y0QVU)<q%O%x7MWt4Ec^>=Z@+_vwr`YX5 z`^2}N%Z-WG&4!3ltNkZ*75%4ttaMqEieg$M4qut)BTt^UkxPNm&5wB#8;|Z9FHGL^ zoB7CS*CUPD3Z6;Fi3aovEjr#GF}sz%*Ob1m3lh&4NSIc(8#H)k5F~DlN?%ch=N!vK z_sizVwQ68ed9gnKS{<!p@7Q%Ee$b`t*tMZubmF-mN!M1UOs}~!J&&iF-r|pV;9DkI zkF5XbZ&1uedHi*a1BAm|2-H5^&ew26v5`c@MmqNTBN!b>AoGQk3lEWeiL!|)xRWYX z=HU3ZmjAc}S741QKk<U16{Ot$a2?0hj)6Coz)K2)ao;h`@v8gForxl-;rHko&jwDH zo+vdcu$0w{I_jw``EKg{d*<`0RL%269y}m@f%%u9Bnc=^(5)LEU&|NOpNSKYP=qsU z+|1YMqiB%q`pTc^WEck`3Ei1bFr}LGlr{*IZ*eNxb@A%--l^ulXS}}emmzRq<8wp1 zFho@)0Vrl0vy#Ysn`(Cn#qKZ;#crp~|IzlRNZ5bD-y?>Bw@<`d|KWt3!OMM=ETw^x z+e&Uv_^w71h54fETa64k%DY1TcrVI?t(+Vu>!<?(op~GZ9ikGo<c$?y0ql68WvdIB z-Qklq<>kzwbNTJiiD+rUg8vrq@5M0*W=Wf<b+V4J!&a}XL2UYB*3=gqmF2?IXt$4N z*@%&Ay!_k53!{;be<~lDYo=&mNwCE5#BqDNP5o-?TfWyxKG~`ZC8<d-kfK2`Gvf5z z;}iWJ_}wq=y8AhWaAX)|?dhJ1|8A0w*XI*#_aq(T>+#Ar?)puFFu`fM5I5-*CF3g7 z{%psIXnBy%;L+=vCBf?keY0>iD5*S9y-uQ#PhLPps|BsmMtS3!L&xpt!EDX-6@}>a z=yAF6=hYJILNwl{9P5K74$OBYI5Tf)_2~G?YEbsNpwj^$txbVq-39ArDYY3^KHuq8 zYJA-tzT+}Gy6uqm&hM5nMpyFT>3NT5GMCAnKI*w{xQ!wK3!ia7yWn?sD@nzaWIM@y za6ft<mNZnOelkr-@UW4Nf+TpoMap5YKNhTvI)@4eKnDg3G2)d_9&xnZiMOeaQ45#% zr$fab-I1AoovIvajPA6z64+A=>uo7c>U8$Dza@xIj1}EB3_^?Y3^G*qFOZxmSyxqo z!Yynnkt3-=SiC7!F1dT*Pd(=b28BNaSPZRAp5NLXG`9R$)bO-<k0`kA-t0P6xL9)q z^T7!_%WU?o_xV^Hy?>{k$^R7o<wLRU$stG5JzGU^=+1y%W{k#im3ozI?)k3<DV5zK zgMa+2ez%QdGR`7^Ok~bHFzDb+4&&jaaPG8b1tfW5w%iQ|F9tG9II^pR?-82>PsEW` z0$viL@w@mW7I2E^!FdCmj~lC7HRpfK*(!A6YR;MZs-!Hdg4N2MDkdHJ<CG|yog@a9 z!eQ`Zh>A}hxGu-%_kcF5+*5nb{+9UQhefyCX&e%3`Ku+;=;ddAW21Sn#D3AgYSbRQ zZfRjPkJ<xX>qUfHr>m{ZTZ~)M(8$<=vE}xWS}PS|`@U9E8UNFra(8wc%d7a)LAUkv zV7I<%x?L-cDhj3?OhIBIX|2X~A@Zv&J*PX1VAOAeuQ0|lC0XTsoY>}(hCumK4wN?Y z@oOCE3K(T3P`qJ-&`z*agk$X_I4v_D_cXhA_)e?7F-zuQSPb;2=fCDowdP2&{or)% znkn=1l1mjiTkig8`Dl`bk)_y}XDHz@I#-KOs7+gJOfD9KRB~Ea*Ix~v4h&Rn%*#%` zOMs^!3C328P>N6r_?`%(i}v^jB&h6^T6m3NC6$`&Mld*NRtFO>Z_|0!d}&sIa4{3% zC@H#~h2I$kGK&Sk69ou(<O9&Tpc-ImfRHj;K&cIJS@|@iU0r20?Vq0Gw2`CBKWZr* zJJxSm(u>+|vs39_?bFL!yQq+!3z^S9WVsIvK57*7UqgsKmQEkRcT=BF6HzI;x6yn> zzOX&ro<d<`ej+XFC3O#+L>3R``2!XLbNf!&OVQlTFKJ2bN3EEFj6nFPgMS~728&KN zR<<se4qjJ!3J$NX)H5J7q;Im%GV{4?SlSJ-xFbV3pVa-SJ^eFz{*Pqm!K6ve2G?gc z;?|U;b&BIO?{>P`>L-ki19P&2vQs3$dVIP@-Xk~TSJt$?u;O~H4v%Oynsn#lt?1Rp zS)4k82BlJSbI#p<@>{3Tb!2KQCpfP!rThP4)C?EOfP5Xvwdror;|3Bj5dFKqxNSfv z#Z(Y$h#jnl6O}QVO}rv^KpIm~kumf{dsN|Gq7zU1O>s!`Nh-Ro$G$Xu%bTRUfQ9#3 zs90z}&v9H6QkdTmktar+<%E?@aIxQFNi5;-u=KPe@_WH>Eb{9Pd?<F1X7+c`bWz0u zt>Bshy;$6g5dsNSTEPIPyFJ^)MO=MxOi_n5>2Y$@pJTV)fMWEEHVD@#G7MKeS@%P; zX3uJ2qGmMrJNUC?1S|P$`EpN!i5<8bW3mY_7ZQi~P6$eNJ_%V#)T=@n$$X+Jiz;*b zgabLe6wq;mCZ3o)tn6J{>W?JkAg=NVE(=Yqih{uD?}7iWmMbMF0(V4`5zo%6Z!v64 z{&i9(7+QM8exSO7mfVU~&hrp?-&WC=Z`kG$tWn%x2qYas4ws8X8}85D!V9;|Z|++u z{14l+KCc~@e9zuQFWo^L|FQt|%aB*`Dc*JW{@C6Z^%{DvyFVG4AJTpQSUKGj&MsXg z57@2}6>LO9?c5kyeI$?s9{o*RvD_|(pE!f#|J;UI^fkr~>o(J<+A5e05!{}k3E|qW zS1NM#<bV5@`@8KxO^d>0(u`DQsn{M7g-1n*6jeQwhR`|H&2u5AmdQ9};b)(UvktMs zTk4qjJ3M%#&a?@?NA6*({tJ6J1dy=Y4041yF1GQYWz^`N9&%?V(D`FGkD|lgbKW#D z3#(ogf-r?|@f>U9;hN2JL8X{(6p8zr!?>V#2~7$kz9b%oSTmB{QB8M@0u5IT2y+QV zFGv~!I!Be2!i18_+7=zrt|@;R-GU$5S1=ekx$nKJxaoZ4o4ov(mh(F5L;ia#?ys0c zHV7}KhVn~oOd`KBB50IGC?1C=*QfIy>U;cA;Yx9uX6RsJFbeRSvGs{bo;TF=%M1w8 zI#HE2IkKNaYMn9)%vA}-6nQ7Lnj(_0zH!4_mCwC?(%Os3ir{todf`_`c_9$+;a#k_ z=EOVTjsLGc4I*9P`?3dj)HjRS4ezfaEEY2t8M1Z0tWm~nR!q_}_6h2?74~8@+Q^OM zFog?k6V#dvODNE3EfXWc;%tXjV}B<xNyog`cPZE3^pSUBVaBuH&~tUpv(Qukq8JHz zAONDg2xY)2R@GwWsocbrbK~U=^Q-7S1(8zfN7~52hj{#R_K%{^P9blDm+s3cpPTim z&g(iN?#tvUpS_zQfxD~Qmnp9i3T+0j0gJ`Xv(_oS=be=GyD<j$kuOB>`zQAMF7I7j z0(T2xW)knxo^Jc|Y6G<$I!z2-6Xp1%RatMih(ke+?!S7dsDH<P7m|{lqvS-GA=p<T zLhyRoY!ohyWU$T|tn+dYC>;rZ{1~I}e9Tmm<&IVf;D}RTq8y}=vbE*J;qWxd6=LGm zl>Neu8kN;f-BGL1v@|$NKgIcRgvbHQ;cFe<9#`W8??E`2j2o>9{eHnqBD1ufYGy2# zf=Ls2fjB+|5Emb8-u*gtAvLrFKelX9W!Mafyv{L1irnD#<hUP-WSe!H0aX5iyz%Wf zO>j4k=)uW^WL~wuE0m`6W*<7KB`#_P%Wn@{ER66hfAVH(3m3c<kv|^Z;`;}{qP)dy ziCNqQf<je7mrLb2t%VAyBbP1w?9CpEPuu8_3$30;3NHdU!T9>$%eKF>sffF4hN{RF zbCmt*u1|Jm33wj`S?|JMSezL`YPnh6D^Vj3L6lUM!QkM(#DOrA6o70r;mDJMv@Ir8 z$TDuX2sIfjv^08)r6yb?6T~*N`Z3JCj``ou4ND_Y_3Q?cx7%Z}u=M0>-b@#b#i*U0 zxCf0il9#Ridz}c9M0^3xuTreVF~wY6e$M7}Q5W#q?@B9X>EmpStZ<D&W@s2X<+44v z61dbhMpn%SXYg7Nl_o0^KJ^z4f~^t=4ke<H-3RNd{SQT%r{Tzihcp=s8Ls=g8~1h^ z=iU<`&&Z~gSLwIwm7in<Jd<xvn^`a8$RGPsT^}R9oQI@~pSuGM)8y@M#f?$zZ`egK zo(ttf?OX2Et*1l!e?GDV?AR2ZG~<aJWk$+ktXj|Lr0SmEwrdVj`|>MyZ^WH=OQbSP z@NC~_H|Tf(XXrgvf_M)ixQK4Mjzz*z6a~^oP$YisTs;>2klAm0F0I~h#><VQSKE)5 zdy}hpd*@h_lxfsp))&IiyoD{`mkqPaQ!CpBiaGTdVq;VUvMe80{LE50&<nsKgKMnZ zw|1m1t0mkVzG-c3cRK_Fn9u8Akv*Y9jW<R&<vjq7<|!R|yYtp{o5q;xG!C5S;=Mw# zS!WB5uW?sN8Oov@4q=w(I){64`ePy!Q#z6Xd$Bz6RI+~*73?$Rcsrp|pH8aezt_fz zeSegs#tH)U#I7a=i#`i&Qu5!10xfa5g2LE<BD<JQZM=`0jR;H*+ey~Vceq^Z7km}^ zE$RR6N4N#K0$IDqHD3dvg~`;kzzWFn=t<2w-rTg4d38yqQ4Pl6@xwJ=i_tv{0&nd> zCxgz&>-~grIs2kadE?W44HO0A`mc=f#F7}3=VIlg5;<RzZg;Abi*W!PLdI`-NBK(G zbnM)PVxHI$fz2Nj|8gf196+it`&oy4)-oV-Q+S1@M7}46)*(*qvx$^>Oh6_+T#S9U zKz-cJMnXxaFZY0+h02B#<jZj3ut`d+U1#86vW%r|*RR|WC!AECr0EML(@ZmZDjl${ zI2PVsm6S5;VT?5qIz8|8n?!W|5N|ump2lp)*{=r<`*ZB6m!K4L^3TFWN)ha^nih)X z6TX=AtxE}>$A<gW^pEqY%|DxLqjeis9c*~P^3okPjMNgqD3f>)--Oz}czzmLd>9EP zDW*DOFvcn7F7-_REDgcr>c!gHT$j%qx<$L)W?TbD>n+&ZP)>_^<=o*;&sD+T>cUmF z%f-}fUAr0vOtqJlYBbd%lxS!jmpDk**MU&L{smT@IvfnEVKBS3r!x3_bFbIw%TwS^ zTGoIThFXZis##I^RU8X^d+zq$p=hsl(a`7Rnl@HF?zS9L1!5X)oKV4G3$2NywPxw; z{d?Ifx0!Y5lzqg)!xcP%_R^ZLJNbLBRfBM-zr+ljUd$mdP#Z=vNP%aw0l4(lNRc1} zZ`FoVA3IDw+g5ohO+Hbsd7koqK0VO4nWtwstB;gdr5jF2H^1{l|EpM~<J5{l&br>` zaXX)?*ga~vI!3nNE;q1IVH(x7Py2jG&WIY~cpg1$YrlL~u}r((!H&6&v>?B09rbR) z^g80ZwPYT!_IZ$u7ND{)M>8*Sowh@)v1#|azPd)1zfH1N$FLf8GFaQfowC__8J$Dd z(;bRyFuV^|BDdJG|L{UsZK}*;{`N73z(U_uA(Y%5T^a3Tk?ghf$7TShGzhuVlVbC& z7e|XFDgvSsd||QK!Zi0P`Dys4{#E*%tt<{ls$^FfMm4X=>a6a%xj2v2TM|JQOMvWD zC|_onVxFBMqJXciBi+{L4`Q7)K3)3r_cLybcU+GXB?|BNoraVTr}VhWL5ob#a-H5< z)&j3s`$d$%@=-9a`(gISL{=!ejKi~n_wF96K}XFrL1zhzfU7L&lzMSIp^RaaQom@v zGOa%#YATogAT-<mUb+aXXL}&9bmMH-sl%4xxp#=Z%j)<(Igh7!;nX;f@n=t0r^!u2 ze&6Zh%StR|S<y*-i2}f{8NFbO23gz4HY^E;e9Tfh-gJCwGOlP^lgz&0Nl{`1=__Ur zIc`<0sg^iOOaW#y;96#f1Cf}xDCdWsJWpLu!y>z8CvU7_9xFFoCOz*9<=RUJz3ciy zPtvX-^Bniw!_|t#dvJGMc3nn7v_?NZsC(U&+Ti_14D1DFym>?{)}0rTHI2`%oQZ5C z$m{xc_4$Z`;Q22g{_(j~1F7bka;$BWYeLU8pvXkinsLO%=Z!+cp_geig<tO`RpD_& zdslYi=hHq1UNlc*4|dnz-QDagGJ7^${Iq>B2K})xik<^l#7j3Fq3U$TcH>|g-+~dY z!voXQoI>Ufk*AlGwzap)uk=<bg)j*hJ6wxZhii3T##YGFs1Te-yLWYh9y{xXqQ8kO zwS#2HTdwk$=vz6B?x}mgwi5Y%=Q>D>zN1cu6Tl)!@_R>yIYvcQF+_|ZN0f_gh!2yR zr}xVi;k#Z45LzgtHQMu<AGe&+j&~`Ll1yLP|6i?bjMd$7E8RX7#dU*qmix&fLeqff zOHu0Ts|GER_fFse5ZOPKuAF&KtJC1;=jRNc!F|Ld`>j_2?%Ufnq^o)|YqmPKr#V<+ zrK%t(PRT?MtSSXb!*;I5$S<n*>ED^{5s)fL03&{Kq8y%Q;4(VWh5Qo5q4()$K$+ZV zLe+Y^@j`4pDlFcn$G&#|UK+9SUfrh8!rbno2Pc*I7mWviXpAD-kL4C$-#0CxQ`;_4 z2PtNs#VQ3B$>((PB>KZX;EA1SrwYtfh}SL~W#(Y%HA!by{Xu;mC#k<ma(0XnfQ`aB z=Sa*W7$ZKry+*Lmyo4+4Z-k>!Us^_P6(6AKA9heH*_}eQp|RwJKR6zz9r1**Xivf% zUPJeiL~1L73%JkHb%~$pTOnTu115qUjG|$j_S}TIf}8phH8VnJ%LQHH$|S}T4RzeK z0e~@3*!i~A_Ap9%ju>z}zTjIwoy41{bBub3?U}zb{sL!3<FqlxD0@_enBU*NxD^b8 z3B%cQO(eEHqWStPtfzZ`6i`%x;n1A%cozp9=ynIE5*exNLM}N=0#X`9xk?&Zz|Tkg z!=V(KFytfo^!XjD>oX`wLJn)^lk;geyB}K4CPoqVrsg_SRAvX#0<|E|nWryoXv*hd zzM6Bl!+jE6YjS*vGJSVLHFUT;+xL^xH1EovBP*fxp^dyXw`OJaPBVWQ7j1k$tf2V0 z%m!bE8b=8I3fC%rJA+~jWAW11S_2Lj(Syh}NxGld=uc0icqs;+T)}|x`=80FGmnA_ zm-jnteup0Y9^$Wo`o*=ABP)5VyB$>(UANJtGMl%Z-xiUOD|wg$dEt%f**#4!i&0kp zUjW|~AnH)C@dU@~e}0H0i{)&5XQ)QiRv;QrhkDmw25!rBwPIlB*1#YAUP-T;N7v~3 zT6;QPea!$tqmM+I8jKCN$`OK+rm@>pr3Xz&Yy)edaxu;TX0RoBAUZA^L|kM@eINu+ zo;L_V@wN4y*MKn@B47!)s!N)rRBG`UtW~rs5g)MR1Y@Iip^jD^LPcsLx98Lmh#|kM z1X3$hK7chba7(bDF+QR-8O|H5p^m6hM(@)QKois@q&A}{`lOANswTPw#n=)J4kOX4 z6cc@JLP+sSj341G#z2x3F~|!^6m$kx&-)o7N$pi>W4)p^q28mi{Le%j4@-yP;&v<| zAo2CpDr||7nIq*|C@Cs9H{*{zVdp1a{_^8K)NJxlv%!uuV>U^(D<=3PNvefP_k*Ra z*$aR3mzWQ3`}TRhedM`b<&=!{1QB~ifC(g8VR=_-VuKhw1dk!kPQFr7YjIUUBTWg; zMOT0USD;{P?x1#;U)WFvg^+j(7jWIYqL_c*kom|@zW-gn@}xI2KyN-+=fm25X(oC- zIpVH6r!RibzwUg+(9rrLgXVFjA3W?xY!_evLYI|m=6T7Fu4H^7_P-E={zikLMJta` zpC4at{aHs6+Vqg)L+|TQm7~#Kp^jFxH&IaHuD5#~+M_es2XQtzQ0^Y=DKVIB4vazW z;zsQ6Sbc-YqT`FdKN<E{Zhx(+dwyie7GZy7*-xDua#=AFqi~Dai+f}63Sz0fj{hKV zz(q>^3<mvE7(~yi`(7Q@8|xxZ5e!BX%Koh1c;e1aUiZplKiF*YP@}=lEMw+BgeY9~ z#v88bwU79dis56kq|r>QMiGoA(NnT!m-7sK)x+YEV89CrIaVy8icb4V9s5ufTN8pf z0JYYo4x+6~y~ko8_@G7CJ(27D&wS_|C&qoZ4gtM+jYOehqT4k`-hJ2f1@C#+<SW|k z^&5g_@vaw9f<@j^aoJ+}gv!&(Q*2U_Wr5%##}yg7TIVl5T9Va{<0hoh@l<2Dv7$0m zRf<WPI8T&R*Tyn?u!l|k!D8_s{`Wyqbb(k6KKFWfi@qP|_+soCdV78^#{RDHWXCx` zefz)uV1v4NOSPp~eU8fhX7C>*WYP0j^jzu*G}`LddyNQqjk`_<5yaMJ^ueGmMYQLS zId<#EU-4tdez^7TAPW16T^GS8qplko>w-2bt7(XApvNEt=dmU_m{cW*G!SXwy(O^? zob&h)Ww;olK?GmhXnSjLCdLNws8*utMAaG83wR?aqP{9h!`%0t3PIR|y7vm$gsu_m zjTp3^@u3cNy~L<1asmk^9bvxLVs>tf$;o9*&yF)QH_puL1T(YCn4MY1?Cb<{Go#GT zjWRns#?0I(GqdAN&n{zbZaKaF5R#;nu2=6nI3NeQC_%vCDeL6$)cb4fm7+;`OoQ?P zUz?>lsc@!`lLCjw#T8m@XH*cRPoRjl@~XANrzh?%SQ0dv(Z=NKvW}n{!=MqUOrKz8 zq8-4%oI(}V0;R;^>UvzPlQPyd*o#4<H{zb;>qPy#jCHAt!A};>adlo<ABzJzKAAp2 zdW-HsYojx_kkA--H>TRtwVr_XdL6PS3Dm6L4?ab$!yfI!AR#qdZM61F9{ks6L^e=` ziml!H!B|0!_hNkCM0R*U^5jqr`JS}UuKB62QFiV(+H)avy59GDK9sJk<_MwV`@K2u zod?bFuIZ|(<&ZH~xKx8lDZHm!725ZXqH_Jx`yxQ)penp~J?C7{`EIAIif-kK`J$NV zx~fw_*$-8}kp5iB%%3c6*TG=oCPI}&OKg`|=B&sraP|5%b_`Wl@8h`F*+@tU0c@t& zT+!6Ucz|)wT(B{Ss*!*(uHGuo#207-#ztRwD^Wk4nv9%$Aqea~5K}9-2hKSIdKTBs zG41I@F<wkvc41LD2v@%#x!Kd{#njGLgFP<lJhcl>Sc9T_kBU7raqLe?tY7Nmp`NxR z9^W&N>h@48?V*l#IjD0{oA)}FEYuZ$YkXc(vyy{Y74_v~9L&MFwGY2W>w|@Rkeb(C zz~FnmR2@vkOYZkS6?+kh!M)bTRfFd?*dSPl$3uxVfy6`(TWU}L#CXbLes`;F9;w&J z`{{5`j>S)Fzc~BNkG_t4>`$wzoHvQJ1Xro=el@lBPBiUUo30Z{FGJGPT^V{-NDY3M z!CkLa^+=xQ#yMT%oxj?M9AzXF-Z>*7+>zPjo1#4CilV7r&k!|NT9f1kO+zSyHRT7t z__xRZ*QISb7}TlsdOFeT>#BZfR&U<y&i=}mreFE+18mIFWsRbYTfn86P=yi`8VlzN zwLQEll2l+kK3Ied21}m$J;r~&j@DGiJ2V06^<8SgRXz&;)SyOD8)x?gES3}<5R2dI zU=Y+T8T8|YPQBNGMaN8Jhb6?k#oKfaI;2w9t1;RXk#ML+Q}!SMBSkdI(QJXfg<427 zXxW}?FK)x&bLssK?rq87l|g?Vw5=w1gEA7Lv6t4wLTeYmx~e_r*UxG&?qSJuq7KJj zA79jj7^+PcwYx5}&-X>g7T?+-qwX{HB68trX*^<xwiJf=j$*J}SBDKu>N8`X4xvwy z?RxN8&sqD~(@xL6(roCaMlO>{%6yV&&)85MZ27R?TX^BmesFloSM7QCM5lSo8{LlH z^c&JFeZ6-&+wF9Jccj(1F~IRYRO>2N+&S7>Iqh8fhDM|L(?zfMoo=u5YtDBkhnhnd zWJyzIrslr2e0X@wn&i(k`18uL_xC2aw`X~CqAZK!aelJ|?o3E85wU-$UX#A>{+<ro zk2S08QtP@a8)3(HuK$ON4`~PLP^$Dxo#^#g*)L>Or^|-#e0%#dzw*V|r{(#|b!ZD~ z6THUwenPsJ0ZWwc#8<P|T7Rz&!+y&sG1U3N%SFUv`+W_IO6?Cz&RN`7_wdK{AdiD0 z<}W(Frx8oa>z)CLK{c|b2r+UqaTAq6ohq?Q$GaH_H3yBUFQP0Go({<3B8~u-+>`F- z_~JSj5t9QF$N`qLWdTcn?~SFx$3w&31ABiM<nJjLpU2>wrRN%=JGF?!CtUl-sF&zx zV(RB^DvJK(%n?TyU;UBi9CgR4HQ}aKOExzevOBSKl2m(#B2!rW7I@BEZk*WFTlPj6 zdag-I?e^!&QkH#f*Sve{ilOFO6Z~w`Fzl1;H`TbaRH`flKkIyW&t#|k^CMQQI;&q5 z52pBwB!u5I!7f*yNMf>Gs^O1vW4`RfpHOr=cL?(HiLoywgr<muey_N>>=$nyYYvIW zjD*B=gZke|RL;&#YP8>*&h55uW%i*reEM&Hw70n3OW{hDs$jg|XQEfKYObRjcJ0zL zZ@zKc<+t9{J-*RgIg%s|$|?q?h_>*HSk8Jq8`<}zwLf{8sH{BHy4aUfSm-JBpjdp) z!c1Dvo=}G-U!=Vla4!t}U6Oj1U3}g^Z#w9mgBg`Yd7<WlV#KY1)<uX~A{OqGxCV~% z*urcU??09sc!|d9ea(dcn(uv2gZowX5RgG#11#nskiF~PE5E)cwTto>)xTHyJ=yzU z@$>&dK<hTtx3l;#^`XHk$1qUEMlJ%4nkzvdlob7`&ct%}*d<r4edNRw&4=@rZXas# zc;1l7#L}^8=o_Q%DG`M$e*LcZ&iJwC2FadKSL{fw9S_nx%2je}XSVl`BNHaY``<FO zM#So^CiR;_@aGgo*jN_kV+r;njfS2TLgyFNSG$H=BVYBUX$B|fI%P#r{U=qvBf-B& zBs|j^9!`zDDY5DColfthqA0gkfj?;4e6*RGpRuMq*7><_TQjyf(friROs@0&`=0gX ze|qlSi`%^vu2gXqBSoL_qGV#O7ml2p=a_9<<l=k2KXclhw|8(=x@Ks2bjbSvI?(SA z1~U7fC2DH@WMy<<U~`aidmw{XU;nH>YggSpW#XqmbmFN^`$Us^y)SzPgZR3>nytn} z4T(5(VUXyea#ELFG;<G#0#dW6b&YDFjwBS_(c_XNM!B|8t-R2V!MzOHps4iYo{lQ0 zHfuSBMscaQJ?+t2))6aMloma!1;qBp93S_45Eq||=5<{VeIA#d`@bJcdI0SA4kI@( zAkM)kM&rE(=X}3Aw|V_~GkN-%tHbdp*pD|`Y#kZXN1F|{WSPvQiFRzFeKGpfIE72z z^xZdveEG@F_dasvl_!4dt~<ILcTE;QXEb?<_kN_CYf#bMZJ++*>apS9`Q-m6{Y!p( z?u>q?`Xlk?iquN#eLq0|?q<&a{Mzpv^<jXke`DrHXS?p#L#U1pzH}P2E5_cCB-!uY z^k*w?dC6bs(BqFz{yMI@&IdQ*U1c-amHPSjv|Hc%z0dyDYdV*{?)w{)ASdPNiceqv z*DLn1*Io=QRVqib=rdk8mUYWw&3w<Uo}D(QOz$!$ZhpA4e9M+<)k6<XZMQaC6;u*1 z7$Xul8Hm;_8hibodNsI%mvQb;>e|~-Zcmqp%3I<9sy`Rl<AuYzXuvL+3DG4>fqF|Q z<7*aR!1nJcx4_vfS<}ZZ7)uaq9_**LkAOBV8Z3h?u|)=p3Pob@_gI6tMQxA!Mxa3> z5n5EI4wTkPEfHLd+G?jBErV|ixD!v*y_lL)vV-TcxSl1?f8p?+<NGu3*mreM|E`Pf z)6}@Sigrc|Y)LJx5JABXgc^%hU-31^Sx68O5mgOA)d#OZ#R|p*^}atlHs08N)Y0Q7 zA9YlI_quh-J<V46=;&znV3vp3M#JpLGiH)R=WHT{NKk7BPWk)CzBgTC)z9BNw%v9* zS0tBf(w@84&_89TYTA|b%OkzUcROL~M5lhe(e@p~8NG&-FG!7BQx-ZUS>v<YX6GhH z^89@36O793X{$Zz`a7?&+RdCZkB~LKURD#WG|7+k{qA&ItNW7{XKR?fr1IS=1bf@g z&bF_#^RZJ!(y@*U_ucpQGoM)6&I6(BYO^dEEgfUsvb(xh$jV-)v9dEOM|5Y|Fh3hc z=Q`C;<z-prXoWyl2YZbH`}PB|>JC=MrrJG}x)$}TeR|PiEX_Q?BIJNrdj9_KWECFh z{Jn<JqVGQlEN$Nbt~V%lfb6}oXk;&;*8AWf*$2g*_Qaiy7ad--jN5Z~(XTpFqGBPE z2vspu)=(Kkm8ZHpO_JW|n4KRP<-wsLzp2se?`RJt+p;v7YUFlTnlYay%q0n>?Bg-K zFZR0Oqerk~*M0U?X8eR#b!}_hCQbZY_%}cM=%3yHwln7eF8Lk5q2KTSd9Rp1RnjDN zU7b!s=k2q9b=2Q(t{=b|zdZNc%J<%!Bw>~7IT~r}3FqAJ-0?RnzX0%->oK4H^ke_6 z(xF$llBC^C6YcK0AuXqW^_%ZF>j{7}f90;DwQT=ZUg|kjS$f+rJwxZ?<LT6&T>n>B zJt_O+svzFeb`@>srCk;}(kpajuPZByo{aaqtmyZ3RlkrGm8b0-P48&b(Vq{f&$X8F zU}dtL*+Z%8Fb?A>K!T7MsEpu5@Ww`>kXZUz&Qz<(w!Eo3n@!!-Y|75O!H!lgwRtn$ z+Dyoa;E*8J+Pzu5Mc9idJo6WB`lDI1`jtJCbi8CcQkyO>L%AHnm-?OJ@A6@WMdU5s zvs#_pm)W5iN;%er-f+p>`(3afY)XD<F0Efq63Y2v_Lg8slaQViN^zPLf4bZ4ykq6i z$WNxe@j|L(Ge#av6SrPNv7s#domI)7wew~!!M-uK*(s(!f0tOD^y1dGo2*K8$8$dO zw@-UgnSutDs?yx~!QKzj>h~G%7p$lXMvA_U^-DidmNMqNX*;KR@Z=$gCHiRXH-vPO zX!l@cvRtPQrLMy`jHd(v5pe=4f-^=-Yt-39yLm3tja+tSIdfS<rW-kvS;lmpG8I*k z^y_%aE=k3C@5K)G71$5<A_~ua(;aW_xc2#_@$Xrlg>Mz)$M1ICpD04(>cS5<umugK zJ6Y(xUxNGd8~@_st<V0g`Dg5!oBy?`qB>ErrX^m6d~ciUPrdb~f4<-!0nY#V2Y+I2 zp4Yl8Sr@dBmT}~vb4MQBpM2}>7k}*;zxKU#y-xD0eLwWPUe(A_(X>&`&o_PXg^4D= z{o%hqWAnAI|L&QpdP1Y!|I|nR<Z1g2IJp?E($skxA<*y@&9Y>;s95Go+GWX5Rne|0 zMk~jVkL9uu7!2feVXay({!lbY=pC#~mN9cEb-}{wv{p?##r&nme$e@`3;mzdzW@0A zSmJ+IJ_L~kx0?Z{P^1Z+G-WQDG1E&k=Ch2MEM+>ibZkP`CKM7m47JJrtmpPdyznCY z*w6pv_`Cn=7p4ZkpZD{>JF-2w<~fqCI47V*uCq5RzvB<S`q9t5cVS>&{c8`NFw?hJ ziEu*dyN|WYUEhA~v6p}6NB_S)>!}NV{_gX8l{veW*)`IierS{@zVW$#c)=rs{Ga?E zcaA(X*}SH}ToNb><{tmn>h!B$``FumcV<xLslYq6K}mfe_Z1EAXjBzLm1Cr;XnRM~ zd793X2TvB1RO_((L8&)iKv7f$BZ}ID{=v$mDRYNXSN-H=kq+}eBOi^MBmJ=Fhk79V zUy;A?PS`8o06fY03;7y1BM)`*BB(@ffx;L{n`oIO%-TeIX+|eWq?0Bxmn8Izp)!`j z7`(9umnQ)At2qR`_}BlX(a!Sl&fk2+egiWAyzDnW)%w8yytcda_+tFnFaKWl?mzo) z2d?AI?`aYy!w3H84F`>za4<NhX;2dH$U`9aj=XXVdmo8}kHjDkJ|sa&QHf&Wy~O={ zU`z-HE0fqz97<h>aTrex3+fg%Xb^)pMk-?{t<^HI+DQ_+HqpW+(znL+tfj1F3Du!+ z2m>54QTRU%A*h6)Ru!v=4S^(h(%{K`AX85o0*MQup+SujWdH<`AW|FBGq83M5H%*0 z2P<QZ?;T2A#EE0@UG~n8ng9O$gVq0kYW`mL{O`#BLD&C-$`7)~a78eR7bDIXsjQ_E z(I{iETG&JiV<^Rl7tzR7h<IzG53=`_Sep*6wO`261OGR{xge@)M8v3y4N4M%rXkdO zg+>iQqH#(WMPmH=s2DeO4;p+A#sq)RGB!r^I9R#**^5La{UPS7*54Q9#{kNE=WD&C z(9--^e|_wL`3J85$<MFT0rL-jzG{qepmjKxrTK&U7w7MJKKsA^!SeT4|5M3-O7*ko z*#6ExK)zau?=-{_D=I=TA|AnuXfT2k6Pz)WCK7}YjY$*{2?N36|MNs)0PoePVuEU_ z8Z1O@ZwMM=vtb6tMWQMuMgm-TNej@p3(Aw0!RR5?br^?ns8CeUI&!F(K%D&p3L+AJ s8}&x03>pxP#z{s1#oFYMmkt2`KX8P&!CP8(DgXcg07*qoM6N<$f{ccxE&u=k literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 50a66b4..cdde509 100644 --- a/readme.md +++ b/readme.md @@ -66,6 +66,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/dockur/windows) +##### Via a graphical installer: + +[![Download WinBoat](https://github.com/dockur/windows/raw/dev/.github/winboat.png)](https://winboat.app) + ## FAQ 💬 ### How do I use it? From 44dd2b67c8b7ca3af5b18826089dad0c2a5e49c4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 11 Oct 2025 17:33:02 +0200 Subject: [PATCH 472/505] docs: Update image link (#1468) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index cdde509..ed27dc3 100644 --- a/readme.md +++ b/readme.md @@ -68,7 +68,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ##### Via a graphical installer: -[![Download WinBoat](https://github.com/dockur/windows/raw/dev/.github/winboat.png)](https://winboat.app) +[![Download WinBoat](https://github.com/dockur/windows/raw/master/.github/winboat.png)](https://winboat.app) ## FAQ 💬 From 8846aad171a415697e8b5a17410907abf1899db4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 12 Oct 2025 00:22:18 +0200 Subject: [PATCH 473/505] build: Run check for all files (#1469) Removed specific paths from pull request triggers. --- .github/workflows/test.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4903636..c275f1a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,12 +1,6 @@ on: workflow_dispatch: pull_request: - paths: - - '**/*.sh' - - '**/*.xml' - - '.github/workflows/test.yml' - - '.github/workflows/check.yml' - - 'Dockerfile' name: "Test" permissions: {} From 3c029582d64593851d36470046b2b83b1924d906 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 12 Oct 2025 02:03:16 +0200 Subject: [PATCH 474/505] build: Update QEMU base image version to v7.23 (#1470) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 686fb85..59ea59f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.22 / / +COPY --from=qemux/qemu:7.23 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 5e2ca4c1b6d822fdd2f4b4b7909e9d33ee19c25b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 13 Oct 2025 15:06:21 +0200 Subject: [PATCH 475/505] build: Update QEMU base image to v7.24 (#1476) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 59ea59f..9fa65be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.23 / / +COPY --from=qemux/qemu:7.24 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 70dce80aec8576e3cfeeb2a803c0bcc9a826f1c2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 Oct 2025 13:15:31 +0200 Subject: [PATCH 476/505] docs: Readme (#1484) --- readme.md | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/readme.md b/readme.md index ed27dc3..4256727 100644 --- a/readme.md +++ b/readme.md @@ -160,7 +160,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I change the amount of CPU or RAM? - By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM. + By default, Windows will be allowed to use 2 CPU cores and 4 GB of RAM. If you want to adjust this, you can specify the desired amount using the following environment variables: @@ -172,9 +172,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I configure the username and password? - By default, a user called `Docker` is created during installation and its password is `admin`. + By default, a user called `Docker` is created and its password is `admin`. - If you want to use different credentials, you can configure them in your compose file (only before installation): + If you want to use different credentials during installation, you can configure them in your compose file: ```yaml environment: @@ -186,7 +186,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas By default, the English version of Windows will be downloaded. - But before installation you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: + But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language to be downloaded: ```yaml environment: @@ -197,7 +197,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I select the keyboard layout? - If you want to use a keyboard layout or locale that is not the default for your selected language, you can add `KEYBOARD` and `REGION` variables like this (before installation): + If you want to use a keyboard layout or locale that is not the default for your selected language, you can add `KEYBOARD` and `REGION` variables like this: ```yaml environment: @@ -205,15 +205,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas KEYBOARD: "en-US" ``` -### How do I select the edition? - - Windows Server offers a minimalistic Core edition without a GUI. To select those non-standard editions, you can add a `EDITION` variable like this (before installation): - - ```yaml - environment: - EDITION: "core" - ``` - ### How do I install a custom image? In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable: From ab457abc3c6a12bbbfd6c6ffd9ce00e63cf500bc Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 Oct 2025 21:54:52 +0200 Subject: [PATCH 477/505] feat: Add custom .yml for Github Codespaces (#1486) --- .devcontainer.json | 2 +- .github/codespaces.yml | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 .github/codespaces.yml diff --git a/.devcontainer.json b/.devcontainer.json index 14d70b4..a7eeaf5 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -2,5 +2,5 @@ "name": "windows", "service": "windows", "forwardPorts": [8006], - "dockerComposeFile": "compose.yml" + "dockerComposeFile": ".github/codespaces.yml" } diff --git a/.github/codespaces.yml b/.github/codespaces.yml new file mode 100644 index 0000000..7aaba65 --- /dev/null +++ b/.github/codespaces.yml @@ -0,0 +1,22 @@ +services: + windows: + image: dockurr/windows + container_name: windows + environment: + VERSION: "11" + RAM_SIZE: "max" + DISK_SIZE: "max" + CPU_CORES: "max" + devices: + - /dev/kvm + - /dev/net/tun + cap_add: + - NET_ADMIN + ports: + - 8006:8006 + - 3389:3389/tcp + - 3389:3389/udp + volumes: + - ./windows:/storage + restart: on-failure + stop_grace_period: 2m From 8472d700dc2083bebdfdba8610072f21f7eb1a65 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 Oct 2025 23:47:29 +0200 Subject: [PATCH 478/505] feat: Improve Github Codespaces configuration (#1487) --- .devcontainer.json | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/.devcontainer.json b/.devcontainer.json index a7eeaf5..b70743f 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -1,6 +1,21 @@ { - "name": "windows", + "name": "Windows 11 Pro", "service": "windows", - "forwardPorts": [8006], + "containerEnv": { + "VERSION": "11" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, "dockerComposeFile": ".github/codespaces.yml" } From 0b0de7de142761383e68c80c8176c5056ff34d0e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 16 Oct 2025 00:03:24 +0200 Subject: [PATCH 479/505] feat: Improve Github Codespaces configuration (#1488) --- .devcontainer.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.devcontainer.json b/.devcontainer.json index b70743f..3d8577f 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -2,7 +2,10 @@ "name": "Windows 11 Pro", "service": "windows", "containerEnv": { - "VERSION": "11" + "VERSION": "11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" }, "forwardPorts": [8006], "portsAttributes": { From 42a149d7b91a329fc1a0fd7073b5ff3b78e5fe73 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 16 Oct 2025 10:54:06 +0200 Subject: [PATCH 480/505] feat: Make Windows version selectable in Codespaces (#1489) --- .../10/devcontainer.json | 6 ++--- .devcontainer/10e/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/10l/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/11e/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/11l/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2003/devcontainer.json | 21 ++++++++++++++++ .devcontainer/2008/devcontainer.json | 21 ++++++++++++++++ .devcontainer/2012/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2016/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2019/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2022/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2025/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2k/devcontainer.json | 21 ++++++++++++++++ .devcontainer/7u/devcontainer.json | 21 ++++++++++++++++ .devcontainer/7u32/devcontainer.json | 21 ++++++++++++++++ .devcontainer/8e/devcontainer.json | 24 +++++++++++++++++++ {.github => .devcontainer}/codespaces.yml | 0 .devcontainer/core11/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/nano11/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/tiny10/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/tiny11/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/vu/devcontainer.json | 21 ++++++++++++++++ .devcontainer/vu32/devcontainer.json | 21 ++++++++++++++++ .devcontainer/xp/devcontainer.json | 21 ++++++++++++++++ .devcontainer/xp64/devcontainer.json | 21 ++++++++++++++++ 26 files changed, 552 insertions(+), 3 deletions(-) rename .devcontainer.json => .devcontainer/10/devcontainer.json (79%) create mode 100644 .devcontainer/10e/devcontainer.json create mode 100644 .devcontainer/10l/devcontainer.json create mode 100644 .devcontainer/11e/devcontainer.json create mode 100644 .devcontainer/11l/devcontainer.json create mode 100644 .devcontainer/2003/devcontainer.json create mode 100644 .devcontainer/2008/devcontainer.json create mode 100644 .devcontainer/2012/devcontainer.json create mode 100644 .devcontainer/2016/devcontainer.json create mode 100644 .devcontainer/2019/devcontainer.json create mode 100644 .devcontainer/2022/devcontainer.json create mode 100644 .devcontainer/2025/devcontainer.json create mode 100644 .devcontainer/2k/devcontainer.json create mode 100644 .devcontainer/7u/devcontainer.json create mode 100644 .devcontainer/7u32/devcontainer.json create mode 100644 .devcontainer/8e/devcontainer.json rename {.github => .devcontainer}/codespaces.yml (100%) create mode 100644 .devcontainer/core11/devcontainer.json create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/nano11/devcontainer.json create mode 100644 .devcontainer/tiny10/devcontainer.json create mode 100644 .devcontainer/tiny11/devcontainer.json create mode 100644 .devcontainer/vu/devcontainer.json create mode 100644 .devcontainer/vu32/devcontainer.json create mode 100644 .devcontainer/xp/devcontainer.json create mode 100644 .devcontainer/xp64/devcontainer.json diff --git a/.devcontainer.json b/.devcontainer/10/devcontainer.json similarity index 79% rename from .devcontainer.json rename to .devcontainer/10/devcontainer.json index 3d8577f..bdc023e 100644 --- a/.devcontainer.json +++ b/.devcontainer/10/devcontainer.json @@ -1,8 +1,8 @@ { - "name": "Windows 11 Pro", + "name": "Windows 10 Pro", "service": "windows", "containerEnv": { - "VERSION": "11", + "VERSION": "10", "RAM_SIZE": "max", "DISK_SIZE": "max", "CPU_CORES": "max" @@ -20,5 +20,5 @@ "hostRequirements": { "storage": "64gb" }, - "dockerComposeFile": ".github/codespaces.yml" + "dockerComposeFile": "../codespaces.yml" } diff --git a/.devcontainer/10e/devcontainer.json b/.devcontainer/10e/devcontainer.json new file mode 100644 index 0000000..e401fea --- /dev/null +++ b/.devcontainer/10e/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 10 Enterprise", + "service": "windows", + "containerEnv": { + "VERSION": "10e", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/10l/devcontainer.json b/.devcontainer/10l/devcontainer.json new file mode 100644 index 0000000..25109bb --- /dev/null +++ b/.devcontainer/10l/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 10 LTSC", + "service": "windows", + "containerEnv": { + "VERSION": "10l", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/11e/devcontainer.json b/.devcontainer/11e/devcontainer.json new file mode 100644 index 0000000..c67781a --- /dev/null +++ b/.devcontainer/11e/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 11 Enterprise", + "service": "windows", + "containerEnv": { + "VERSION": "11e", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/11l/devcontainer.json b/.devcontainer/11l/devcontainer.json new file mode 100644 index 0000000..6cda36c --- /dev/null +++ b/.devcontainer/11l/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 11 LTSC", + "service": "windows", + "containerEnv": { + "VERSION": "11l", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2003/devcontainer.json b/.devcontainer/2003/devcontainer.json new file mode 100644 index 0000000..ffe7dc5 --- /dev/null +++ b/.devcontainer/2003/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Server 2003", + "service": "windows", + "containerEnv": { + "VERSION": "2003", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2008/devcontainer.json b/.devcontainer/2008/devcontainer.json new file mode 100644 index 0000000..5930e9c --- /dev/null +++ b/.devcontainer/2008/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Server 2008 R2", + "service": "windows", + "containerEnv": { + "VERSION": "2008", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2012/devcontainer.json b/.devcontainer/2012/devcontainer.json new file mode 100644 index 0000000..8d3519c --- /dev/null +++ b/.devcontainer/2012/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2012 R2", + "service": "windows", + "containerEnv": { + "VERSION": "2012", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2016/devcontainer.json b/.devcontainer/2016/devcontainer.json new file mode 100644 index 0000000..2ede9d5 --- /dev/null +++ b/.devcontainer/2016/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2016", + "service": "windows", + "containerEnv": { + "VERSION": "2016", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2019/devcontainer.json b/.devcontainer/2019/devcontainer.json new file mode 100644 index 0000000..68e2829 --- /dev/null +++ b/.devcontainer/2019/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2019", + "service": "windows", + "containerEnv": { + "VERSION": "2019", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2022/devcontainer.json b/.devcontainer/2022/devcontainer.json new file mode 100644 index 0000000..5c66d43 --- /dev/null +++ b/.devcontainer/2022/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2022", + "service": "windows", + "containerEnv": { + "VERSION": "2022", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2025/devcontainer.json b/.devcontainer/2025/devcontainer.json new file mode 100644 index 0000000..f5b2984 --- /dev/null +++ b/.devcontainer/2025/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2025", + "service": "windows", + "containerEnv": { + "VERSION": "2025", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2k/devcontainer.json b/.devcontainer/2k/devcontainer.json new file mode 100644 index 0000000..2aa0e55 --- /dev/null +++ b/.devcontainer/2k/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows 2000 Professional", + "service": "windows", + "containerEnv": { + "VERSION": "2k", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/7u/devcontainer.json b/.devcontainer/7u/devcontainer.json new file mode 100644 index 0000000..ac4314c --- /dev/null +++ b/.devcontainer/7u/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows 7 Ultimate (64-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "7u", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/7u32/devcontainer.json b/.devcontainer/7u32/devcontainer.json new file mode 100644 index 0000000..612ddc2 --- /dev/null +++ b/.devcontainer/7u32/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows 7 Ultimate (32-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "7ux86", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/8e/devcontainer.json b/.devcontainer/8e/devcontainer.json new file mode 100644 index 0000000..d27348b --- /dev/null +++ b/.devcontainer/8e/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 8.1 Enterprise", + "service": "windows", + "containerEnv": { + "VERSION": "8e", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.github/codespaces.yml b/.devcontainer/codespaces.yml similarity index 100% rename from .github/codespaces.yml rename to .devcontainer/codespaces.yml diff --git a/.devcontainer/core11/devcontainer.json b/.devcontainer/core11/devcontainer.json new file mode 100644 index 0000000..44ba15f --- /dev/null +++ b/.devcontainer/core11/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 11 Core", + "service": "windows", + "containerEnv": { + "VERSION": "core11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..7a9ad96 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 11 Pro", + "service": "windows", + "containerEnv": { + "VERSION": "11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "codespaces.yml" +} diff --git a/.devcontainer/nano11/devcontainer.json b/.devcontainer/nano11/devcontainer.json new file mode 100644 index 0000000..a5ea04a --- /dev/null +++ b/.devcontainer/nano11/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 11 Nano", + "service": "windows", + "containerEnv": { + "VERSION": "nano11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/tiny10/devcontainer.json b/.devcontainer/tiny10/devcontainer.json new file mode 100644 index 0000000..9b7dd6b --- /dev/null +++ b/.devcontainer/tiny10/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 10", + "service": "windows", + "containerEnv": { + "VERSION": "tiny10", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/tiny11/devcontainer.json b/.devcontainer/tiny11/devcontainer.json new file mode 100644 index 0000000..a659705 --- /dev/null +++ b/.devcontainer/tiny11/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 11", + "service": "windows", + "containerEnv": { + "VERSION": "tiny11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/vu/devcontainer.json b/.devcontainer/vu/devcontainer.json new file mode 100644 index 0000000..2b9e871 --- /dev/null +++ b/.devcontainer/vu/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Vista Ultimate (64-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "vu", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/vu32/devcontainer.json b/.devcontainer/vu32/devcontainer.json new file mode 100644 index 0000000..7c5be1c --- /dev/null +++ b/.devcontainer/vu32/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Vista Ultimate (32-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "vux86", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/xp/devcontainer.json b/.devcontainer/xp/devcontainer.json new file mode 100644 index 0000000..d7a8dfd --- /dev/null +++ b/.devcontainer/xp/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows XP (32-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "xp", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/xp64/devcontainer.json b/.devcontainer/xp64/devcontainer.json new file mode 100644 index 0000000..a03df31 --- /dev/null +++ b/.devcontainer/xp64/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows XP (64-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "xp64", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} From 0ab3198ded9678c96389e113d9dd9352d5039ae8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 10:05:12 +0200 Subject: [PATCH 481/505] build: Validate JSON and YML files (#1493) --- .dockerignore | 1 + .github/workflows/check.yml | 26 ++++++++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/.dockerignore b/.dockerignore index 258778b..154d44a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,5 @@ .dockerignore +.devcontainer .git .github .gitignore diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 788a2b0..9e9d278 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -7,19 +7,29 @@ jobs: name: shellcheck runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 - - name: Run ShellCheck + - + name: Checkout + uses: actions/checkout@v5 + - + name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 -e SC2028 - - name: Validate XML - uses: action-pack/valid-xml@v1 - with: - path: "assets" - file-endings: ".xml" - - name: Lint Dockerfile + - + name: Lint Dockerfile uses: hadolint/hadolint-action@v3.3.0 with: dockerfile: Dockerfile ignore: DL3006,DL3008 failure-threshold: warning + - + name: Validate XML + uses: action-pack/valid-xml@v1 + with: + path: "assets" + file-endings: ".xml" + - + name: Validate JSON and YML files + uses: GrantBirki/json-yaml-validate@v4 + with: + yaml_exclude_regex: ".*\\kubernetes\\.yml$" From f1ea8ee227c4943e1729610e64dd9681bcd2234a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 12:53:48 +0200 Subject: [PATCH 482/505] build: Update VirtIO drivers to v1.9.48 (#1494) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9fa65be..2a58348 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,7 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.47-0/virtio-win-1.9.47.tar.xz /var/drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.48-0/virtio-win-1.9.48.tar.xz /var/drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} From c6a8c0b702d921caff883d839f8d79d6832c717f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 13:38:11 +0200 Subject: [PATCH 483/505] feat: Load memory module (#1495) --- src/entry.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/entry.sh b/src/entry.sh index 1b440a0..2929503 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -22,7 +22,9 @@ cd /run . boot.sh # Configure boot . proc.sh # Initialize processor . power.sh # Configure shutdown +. memory.sh # Check available memory . config.sh # Configure arguments +. finish.sh # Finish initialization trap - ERR From c997bf7765faba8ba497898cf289b34d45b97b1a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 13:42:41 +0200 Subject: [PATCH 484/505] feat: Improve Github Codespaces configuration (#1497) --- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 7 ++---- .../devcontainer.json | 18 ++++++++++++++ .../devcontainer.json | 18 ++++++++++++++ .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 7 ++---- .../devcontainer.json | 7 ++---- .../devcontainer.json | 7 ++---- .devcontainer/210 - Tiny10/devcontainer.json | 21 ++++++++++++++++ .devcontainer/7u/devcontainer.json | 21 ---------------- .devcontainer/7u32/devcontainer.json | 21 ---------------- .devcontainer/codespaces.yml | 3 ++- .devcontainer/devcontainer.json | 5 +--- .devcontainer/nano11/devcontainer.json | 24 ------------------- .devcontainer/vu/devcontainer.json | 21 ---------------- .devcontainer/vu32/devcontainer.json | 21 ---------------- .devcontainer/xp64/devcontainer.json | 21 ---------------- 29 files changed, 82 insertions(+), 210 deletions(-) rename .devcontainer/{11e => 010 - Windows 11 Enterprise}/devcontainer.json (80%) rename .devcontainer/{11l => 020 - Windows 11 LTSC}/devcontainer.json (79%) rename .devcontainer/{10 => 030 - Windows 10 Pro}/devcontainer.json (79%) rename .devcontainer/{10e => 040 - Windows 10 Enterprise}/devcontainer.json (80%) rename .devcontainer/{10l => 050 - Windows 10 LTSC}/devcontainer.json (79%) rename .devcontainer/{8e => 060 - Windows 8.1 Enterprise}/devcontainer.json (80%) rename .devcontainer/{xp => 070 - Windows 7 Ultimate}/devcontainer.json (69%) create mode 100644 .devcontainer/080 - Windows Vista Ultimate/devcontainer.json create mode 100644 .devcontainer/090 - Windows XP Professional/devcontainer.json rename .devcontainer/{2k => 100 - Windows 2000 Professional}/devcontainer.json (77%) rename .devcontainer/{2025 => 110 - Windows Server 2025}/devcontainer.json (79%) rename .devcontainer/{2022 => 120 - Windows Server 2022}/devcontainer.json (79%) rename .devcontainer/{2019 => 130 - Windows Server 2019}/devcontainer.json (79%) rename .devcontainer/{2016 => 140 - Windows Server 2016}/devcontainer.json (79%) rename .devcontainer/{2012 => 150 - Windows Server 2012 R2}/devcontainer.json (79%) rename .devcontainer/{2008 => 160 - Windows Server 2008 R2}/devcontainer.json (77%) rename .devcontainer/{2003 => 170 - Windows Server 2003}/devcontainer.json (77%) rename .devcontainer/{tiny10 => 180 - Tiny11}/devcontainer.json (74%) rename .devcontainer/{tiny11 => 190 - Tiny11 Core}/devcontainer.json (74%) rename .devcontainer/{core11 => 200 - Tiny11 Nano}/devcontainer.json (73%) create mode 100644 .devcontainer/210 - Tiny10/devcontainer.json delete mode 100644 .devcontainer/7u/devcontainer.json delete mode 100644 .devcontainer/7u32/devcontainer.json delete mode 100644 .devcontainer/nano11/devcontainer.json delete mode 100644 .devcontainer/vu/devcontainer.json delete mode 100644 .devcontainer/vu32/devcontainer.json delete mode 100644 .devcontainer/xp64/devcontainer.json diff --git a/.devcontainer/11e/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json similarity index 80% rename from .devcontainer/11e/devcontainer.json rename to .devcontainer/010 - Windows 11 Enterprise/devcontainer.json index c67781a..4e67f1a 100644 --- a/.devcontainer/11e/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 11 Enterprise", "service": "windows", "containerEnv": { - "VERSION": "11e", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "11e" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/11l/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json similarity index 79% rename from .devcontainer/11l/devcontainer.json rename to .devcontainer/020 - Windows 11 LTSC/devcontainer.json index 6cda36c..e93fbf1 100644 --- a/.devcontainer/11l/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 11 LTSC", "service": "windows", "containerEnv": { - "VERSION": "11l", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "11l" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/10/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json similarity index 79% rename from .devcontainer/10/devcontainer.json rename to .devcontainer/030 - Windows 10 Pro/devcontainer.json index bdc023e..573f6ab 100644 --- a/.devcontainer/10/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 10 Pro", "service": "windows", "containerEnv": { - "VERSION": "10", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "10" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/10e/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json similarity index 80% rename from .devcontainer/10e/devcontainer.json rename to .devcontainer/040 - Windows 10 Enterprise/devcontainer.json index e401fea..b5ef076 100644 --- a/.devcontainer/10e/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 10 Enterprise", "service": "windows", "containerEnv": { - "VERSION": "10e", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "10e" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/10l/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json similarity index 79% rename from .devcontainer/10l/devcontainer.json rename to .devcontainer/050 - Windows 10 LTSC/devcontainer.json index 25109bb..30ced2a 100644 --- a/.devcontainer/10l/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 10 LTSC", "service": "windows", "containerEnv": { - "VERSION": "10l", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "10l" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/8e/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json similarity index 80% rename from .devcontainer/8e/devcontainer.json rename to .devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index d27348b..41870d0 100644 --- a/.devcontainer/8e/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 8.1 Enterprise", "service": "windows", "containerEnv": { - "VERSION": "8e", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "8e" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/xp/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json similarity index 69% rename from .devcontainer/xp/devcontainer.json rename to .devcontainer/070 - Windows 7 Ultimate/devcontainer.json index d7a8dfd..ffaf504 100644 --- a/.devcontainer/xp/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Windows XP (32-bit)", + "name": "Windows 7 Ultimate", "service": "windows", "containerEnv": { - "VERSION": "xp", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "7u" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json new file mode 100644 index 0000000..2cdfe89 --- /dev/null +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -0,0 +1,18 @@ +{ + "name": "Windows Vista Ultimate", + "service": "windows", + "containerEnv": { + "VERSION": "vu" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json new file mode 100644 index 0000000..1e375ff --- /dev/null +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -0,0 +1,18 @@ +{ + "name": "Windows XP Professional", + "service": "windows", + "containerEnv": { + "VERSION": "xp" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2k/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json similarity index 77% rename from .devcontainer/2k/devcontainer.json rename to .devcontainer/100 - Windows 2000 Professional/devcontainer.json index 2aa0e55..9ee27cb 100644 --- a/.devcontainer/2k/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 2000 Professional", "service": "windows", "containerEnv": { - "VERSION": "2k", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2k" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json similarity index 79% rename from .devcontainer/2025/devcontainer.json rename to .devcontainer/110 - Windows Server 2025/devcontainer.json index f5b2984..2ef30e8 100644 --- a/.devcontainer/2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2025", "service": "windows", "containerEnv": { - "VERSION": "2025", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2025" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json similarity index 79% rename from .devcontainer/2022/devcontainer.json rename to .devcontainer/120 - Windows Server 2022/devcontainer.json index 5c66d43..4994c5f 100644 --- a/.devcontainer/2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2022", "service": "windows", "containerEnv": { - "VERSION": "2022", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2022" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json similarity index 79% rename from .devcontainer/2019/devcontainer.json rename to .devcontainer/130 - Windows Server 2019/devcontainer.json index 68e2829..333902b 100644 --- a/.devcontainer/2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2019", "service": "windows", "containerEnv": { - "VERSION": "2019", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2019" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json similarity index 79% rename from .devcontainer/2016/devcontainer.json rename to .devcontainer/140 - Windows Server 2016/devcontainer.json index 2ede9d5..f611b12 100644 --- a/.devcontainer/2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2016", "service": "windows", "containerEnv": { - "VERSION": "2016", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2016" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2012/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json similarity index 79% rename from .devcontainer/2012/devcontainer.json rename to .devcontainer/150 - Windows Server 2012 R2/devcontainer.json index 8d3519c..d9d72f5 100644 --- a/.devcontainer/2012/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2012 R2", "service": "windows", "containerEnv": { - "VERSION": "2012", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2012" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2008/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json similarity index 77% rename from .devcontainer/2008/devcontainer.json rename to .devcontainer/160 - Windows Server 2008 R2/devcontainer.json index 5930e9c..cca5f42 100644 --- a/.devcontainer/2008/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2008 R2", "service": "windows", "containerEnv": { - "VERSION": "2008", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2008" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json similarity index 77% rename from .devcontainer/2003/devcontainer.json rename to .devcontainer/170 - Windows Server 2003/devcontainer.json index ffe7dc5..14eb337 100644 --- a/.devcontainer/2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2003", "service": "windows", "containerEnv": { - "VERSION": "2003", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2003" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/tiny10/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json similarity index 74% rename from .devcontainer/tiny10/devcontainer.json rename to .devcontainer/180 - Tiny11/devcontainer.json index 9b7dd6b..0ed1384 100644 --- a/.devcontainer/tiny10/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Tiny 10", + "name": "Tiny11", "service": "windows", "containerEnv": { - "VERSION": "tiny10", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "tiny11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/tiny11/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json similarity index 74% rename from .devcontainer/tiny11/devcontainer.json rename to .devcontainer/190 - Tiny11 Core/devcontainer.json index a659705..1873cbc 100644 --- a/.devcontainer/tiny11/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Tiny 11", + "name": "Tiny11 Core", "service": "windows", "containerEnv": { - "VERSION": "tiny11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "core11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/core11/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json similarity index 73% rename from .devcontainer/core11/devcontainer.json rename to .devcontainer/200 - Tiny11 Nano/devcontainer.json index 44ba15f..f05b707 100644 --- a/.devcontainer/core11/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Tiny 11 Core", + "name": "Tiny11 Nano", "service": "windows", "containerEnv": { - "VERSION": "core11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "nano11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json new file mode 100644 index 0000000..5039698 --- /dev/null +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Tiny10", + "service": "windows", + "containerEnv": { + "VERSION": "tiny10" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/7u/devcontainer.json b/.devcontainer/7u/devcontainer.json deleted file mode 100644 index ac4314c..0000000 --- a/.devcontainer/7u/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows 7 Ultimate (64-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "7u", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/7u32/devcontainer.json b/.devcontainer/7u32/devcontainer.json deleted file mode 100644 index 612ddc2..0000000 --- a/.devcontainer/7u32/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows 7 Ultimate (32-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "7ux86", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/codespaces.yml b/.devcontainer/codespaces.yml index 7aaba65..f9682d1 100644 --- a/.devcontainer/codespaces.yml +++ b/.devcontainer/codespaces.yml @@ -4,7 +4,8 @@ services: container_name: windows environment: VERSION: "11" - RAM_SIZE: "max" + ALLOCATE: "Y" + RAM_SIZE: "half" DISK_SIZE: "max" CPU_CORES: "max" devices: diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 7a9ad96..5de96d5 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 11 Pro", "service": "windows", "containerEnv": { - "VERSION": "11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/nano11/devcontainer.json b/.devcontainer/nano11/devcontainer.json deleted file mode 100644 index a5ea04a..0000000 --- a/.devcontainer/nano11/devcontainer.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Tiny 11 Nano", - "service": "windows", - "containerEnv": { - "VERSION": "nano11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/vu/devcontainer.json b/.devcontainer/vu/devcontainer.json deleted file mode 100644 index 2b9e871..0000000 --- a/.devcontainer/vu/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows Vista Ultimate (64-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "vu", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/vu32/devcontainer.json b/.devcontainer/vu32/devcontainer.json deleted file mode 100644 index 7c5be1c..0000000 --- a/.devcontainer/vu32/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows Vista Ultimate (32-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "vux86", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/xp64/devcontainer.json b/.devcontainer/xp64/devcontainer.json deleted file mode 100644 index a03df31..0000000 --- a/.devcontainer/xp64/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows XP (64-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "xp64", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} From 6f84823117bd5e79b94a69854e378ba1a0bce43d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 13:45:46 +0200 Subject: [PATCH 485/505] build: Update QEMU base image version to v7.25 (#1496) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2a58348..1f8a231 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.24 / / +COPY --from=qemux/qemu:7.25 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From b998cd4c7fbee6d8e1be74024b5004c02d5cde7a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 19:03:03 +0200 Subject: [PATCH 486/505] fix: Remove version variable in Codespaces (#1500) --- .devcontainer/codespaces.yml | 1 - .devcontainer/devcontainer.json | 3 --- 2 files changed, 4 deletions(-) diff --git a/.devcontainer/codespaces.yml b/.devcontainer/codespaces.yml index f9682d1..02c57be 100644 --- a/.devcontainer/codespaces.yml +++ b/.devcontainer/codespaces.yml @@ -3,7 +3,6 @@ services: image: dockurr/windows container_name: windows environment: - VERSION: "11" ALLOCATE: "Y" RAM_SIZE: "half" DISK_SIZE: "max" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5de96d5..9772d1c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,8 +14,5 @@ "otherPortsAttributes": { "onAutoForward": "silent" }, - "hostRequirements": { - "storage": "64gb" - }, "dockerComposeFile": "codespaces.yml" } From 10449a3d2968ae07db4567bae5e2f4fe29689829 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 01:31:23 +0200 Subject: [PATCH 487/505] feat: Improve Github Codespaces configuration (#1506) --- .../010 - Windows 11 Enterprise/devcontainer.json | 8 +++----- .devcontainer/020 - Windows 11 LTSC/devcontainer.json | 8 +++----- .devcontainer/030 - Windows 10 Pro/devcontainer.json | 8 +++----- .../040 - Windows 10 Enterprise/devcontainer.json | 8 +++----- .devcontainer/050 - Windows 10 LTSC/devcontainer.json | 8 +++----- .../060 - Windows 8.1 Enterprise/devcontainer.json | 8 +++----- .devcontainer/070 - Windows 7 Ultimate/devcontainer.json | 7 ++++--- .../080 - Windows Vista Ultimate/devcontainer.json | 7 ++++--- .../090 - Windows XP Professional/devcontainer.json | 7 ++++--- .../100 - Windows 2000 Professional/devcontainer.json | 7 ++++--- .devcontainer/110 - Windows Server 2025/devcontainer.json | 8 +++----- .devcontainer/120 - Windows Server 2022/devcontainer.json | 8 +++----- .devcontainer/130 - Windows Server 2019/devcontainer.json | 8 +++----- .devcontainer/140 - Windows Server 2016/devcontainer.json | 8 +++----- .../150 - Windows Server 2012 R2/devcontainer.json | 8 +++----- .../160 - Windows Server 2008 R2/devcontainer.json | 7 ++++--- .devcontainer/170 - Windows Server 2003/devcontainer.json | 7 ++++--- .devcontainer/180 - Tiny11/devcontainer.json | 8 +++----- .devcontainer/190 - Tiny11 Core/devcontainer.json | 8 +++----- .devcontainer/200 - Tiny11 Nano/devcontainer.json | 8 +++----- .devcontainer/210 - Tiny10/devcontainer.json | 8 +++----- .devcontainer/devcontainer.json | 7 ++++--- 22 files changed, 73 insertions(+), 96 deletions(-) diff --git a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json index 4e67f1a..0c80313 100644 --- a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json index e93fbf1..07a560e 100644 --- a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/030 - Windows 10 Pro/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json index 573f6ab..579209b 100644 --- a/.devcontainer/030 - Windows 10 Pro/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json index b5ef076..891be73 100644 --- a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json index 30ced2a..d18b867 100644 --- a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index 41870d0..77debb3 100644 --- a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json index ffaf504..b6da3da 100644 --- a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json index 2cdfe89..1b907fe 100644 --- a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json index 1e375ff..560ad6b 100644 --- a/.devcontainer/090 - Windows XP Professional/devcontainer.json +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json index 9ee27cb..7faee4b 100644 --- a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/110 - Windows Server 2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json index 2ef30e8..547c1ac 100644 --- a/.devcontainer/110 - Windows Server 2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/120 - Windows Server 2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json index 4994c5f..a490a66 100644 --- a/.devcontainer/120 - Windows Server 2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/130 - Windows Server 2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json index 333902b..fbcd4bf 100644 --- a/.devcontainer/130 - Windows Server 2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/140 - Windows Server 2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json index f611b12..eb48544 100644 --- a/.devcontainer/140 - Windows Server 2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json index d9d72f5..c2dd726 100644 --- a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json index cca5f42..2f5d724 100644 --- a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/170 - Windows Server 2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json index 14eb337..f06440f 100644 --- a/.devcontainer/170 - Windows Server 2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/180 - Tiny11/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json index 0ed1384..cf91e35 100644 --- a/.devcontainer/180 - Tiny11/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/190 - Tiny11 Core/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json index 1873cbc..969072d 100644 --- a/.devcontainer/190 - Tiny11 Core/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/200 - Tiny11 Nano/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json index f05b707..cb35030 100644 --- a/.devcontainer/200 - Tiny11 Nano/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json index 5039698..2111084 100644 --- a/.devcontainer/210 - Tiny10/devcontainer.json +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 9772d1c..533b39e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "codespaces.yml", + "initializeCommand": "docker system prune --all --force" } From c3ba25bfb7f658f5a93ac19095446fd2780fc7b4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 10:50:46 +0200 Subject: [PATCH 488/505] feat: Improve Github Codespaces configuration (#1510) --- .devcontainer/010 - Windows 11 Enterprise/devcontainer.json | 4 ++-- .devcontainer/020 - Windows 11 LTSC/devcontainer.json | 4 ++-- .devcontainer/030 - Windows 10 Pro/devcontainer.json | 4 ++-- .devcontainer/040 - Windows 10 Enterprise/devcontainer.json | 4 ++-- .devcontainer/050 - Windows 10 LTSC/devcontainer.json | 4 ++-- .../060 - Windows 8.1 Enterprise/devcontainer.json | 4 ++-- .devcontainer/070 - Windows 7 Ultimate/devcontainer.json | 4 ++-- .../080 - Windows Vista Ultimate/devcontainer.json | 4 ++-- .../090 - Windows XP Professional/devcontainer.json | 4 ++-- .../100 - Windows 2000 Professional/devcontainer.json | 4 ++-- .devcontainer/110 - Windows Server 2025/devcontainer.json | 4 ++-- .devcontainer/120 - Windows Server 2022/devcontainer.json | 4 ++-- .devcontainer/130 - Windows Server 2019/devcontainer.json | 4 ++-- .devcontainer/140 - Windows Server 2016/devcontainer.json | 4 ++-- .../150 - Windows Server 2012 R2/devcontainer.json | 4 ++-- .../160 - Windows Server 2008 R2/devcontainer.json | 4 ++-- .devcontainer/170 - Windows Server 2003/devcontainer.json | 4 ++-- .devcontainer/180 - Tiny11/devcontainer.json | 4 ++-- .devcontainer/190 - Tiny11 Core/devcontainer.json | 4 ++-- .devcontainer/200 - Tiny11 Nano/devcontainer.json | 4 ++-- .devcontainer/210 - Tiny10/devcontainer.json | 4 ++-- .devcontainer/codespaces.yml | 3 +-- .devcontainer/devcontainer.json | 6 +++--- 23 files changed, 46 insertions(+), 47 deletions(-) diff --git a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json index 0c80313..a5ddea1 100644 --- a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "11e" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json index 07a560e..eef73ca 100644 --- a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "11l" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/030 - Windows 10 Pro/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json index 579209b..4a37735 100644 --- a/.devcontainer/030 - Windows 10 Pro/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "10" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json index 891be73..14f1ce6 100644 --- a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "10e" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json index d18b867..d5755e9 100644 --- a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "10l" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index 77debb3..ec1ed4d 100644 --- a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "8e" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json index b6da3da..0ad77d6 100644 --- a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "7u" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json index 1b907fe..e8514f8 100644 --- a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "vu" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json index 560ad6b..43322dc 100644 --- a/.devcontainer/090 - Windows XP Professional/devcontainer.json +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "xp" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json index 7faee4b..c730760 100644 --- a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2k" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/110 - Windows Server 2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json index 547c1ac..73e5edd 100644 --- a/.devcontainer/110 - Windows Server 2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2025" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/120 - Windows Server 2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json index a490a66..4586bf8 100644 --- a/.devcontainer/120 - Windows Server 2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2022" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/130 - Windows Server 2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json index fbcd4bf..9bc29ff 100644 --- a/.devcontainer/130 - Windows Server 2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2019" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/140 - Windows Server 2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json index eb48544..94629c4 100644 --- a/.devcontainer/140 - Windows Server 2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2016" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json index c2dd726..bd12659 100644 --- a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2012" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json index 2f5d724..0af33f4 100644 --- a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2008" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/170 - Windows Server 2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json index f06440f..f02be87 100644 --- a/.devcontainer/170 - Windows Server 2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2003" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/180 - Tiny11/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json index cf91e35..1224be1 100644 --- a/.devcontainer/180 - Tiny11/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "tiny11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/190 - Tiny11 Core/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json index 969072d..f928c24 100644 --- a/.devcontainer/190 - Tiny11 Core/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "core11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/200 - Tiny11 Nano/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json index cb35030..e7afeae 100644 --- a/.devcontainer/200 - Tiny11 Nano/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "nano11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json index 2111084..4f39fe0 100644 --- a/.devcontainer/210 - Tiny10/devcontainer.json +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "tiny10" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/codespaces.yml b/.devcontainer/codespaces.yml index 02c57be..85e3f64 100644 --- a/.devcontainer/codespaces.yml +++ b/.devcontainer/codespaces.yml @@ -1,9 +1,8 @@ services: windows: - image: dockurr/windows container_name: windows + image: ghcr.io/dockur/windows environment: - ALLOCATE: "Y" RAM_SIZE: "half" DISK_SIZE: "max" CPU_CORES: "max" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 533b39e..10cf271 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" - }, + }, "dockerComposeFile": "codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } From 4e0a29605befce06cef110ae41141f2506f5d3c5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 11:08:57 +0200 Subject: [PATCH 489/505] feat: Display extraction progress (#1511) --- src/install.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/install.sh b/src/install.sh index 50cf7ea..a9cbb2f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -460,11 +460,15 @@ extractImage() { fi rm -rf "$dir" + /run/progress.sh "$dir" "$size" "$msg ([P])..." & if ! 7z x "$iso" -o"$dir" > /dev/null; then + fKill "progress.sh" error "Failed to extract ISO file: $iso" && return 1 fi + fKill "progress.sh" + if [[ "${UNPACK:-}" != [Yy1]* ]]; then LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p') @@ -1095,6 +1099,8 @@ buildImage() { error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1 fi + /run/progress.sh "$out" "$size" "$msg ([P])..." & + if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ @@ -1115,6 +1121,8 @@ buildImage() { fi + fKill "progress.sh" + if [ -n "$failed" ]; then [ -s "$log" ] && echo "$(<"$log")" error "Failed to build image!" && return 1 From 0caa4d76b8784a2b15fd9ffffed21f030779c55d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 12:49:32 +0200 Subject: [PATCH 490/505] feat: Improve Github Codespaces configuration (#1512) --- .devcontainer/010 - Windows 11 Enterprise/devcontainer.json | 3 ++- .devcontainer/020 - Windows 11 LTSC/devcontainer.json | 3 ++- .devcontainer/030 - Windows 10 Pro/devcontainer.json | 3 ++- .devcontainer/040 - Windows 10 Enterprise/devcontainer.json | 3 ++- .devcontainer/050 - Windows 10 LTSC/devcontainer.json | 3 ++- .devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json | 3 ++- .devcontainer/070 - Windows 7 Ultimate/devcontainer.json | 3 ++- .devcontainer/080 - Windows Vista Ultimate/devcontainer.json | 3 ++- .devcontainer/090 - Windows XP Professional/devcontainer.json | 3 ++- .../100 - Windows 2000 Professional/devcontainer.json | 3 ++- .devcontainer/110 - Windows Server 2025/devcontainer.json | 3 ++- .devcontainer/120 - Windows Server 2022/devcontainer.json | 3 ++- .devcontainer/130 - Windows Server 2019/devcontainer.json | 3 ++- .devcontainer/140 - Windows Server 2016/devcontainer.json | 3 ++- .devcontainer/150 - Windows Server 2012 R2/devcontainer.json | 3 ++- .devcontainer/160 - Windows Server 2008 R2/devcontainer.json | 3 ++- .devcontainer/170 - Windows Server 2003/devcontainer.json | 3 ++- .devcontainer/180 - Tiny11/devcontainer.json | 3 ++- .devcontainer/190 - Tiny11 Core/devcontainer.json | 3 ++- .devcontainer/200 - Tiny11 Nano/devcontainer.json | 3 ++- .devcontainer/210 - Tiny10/devcontainer.json | 3 ++- .devcontainer/devcontainer.json | 1 + 22 files changed, 43 insertions(+), 21 deletions(-) diff --git a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json index a5ddea1..cc0e5ae 100644 --- a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "11e" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json index eef73ca..23e54ff 100644 --- a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "11l" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/030 - Windows 10 Pro/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json index 4a37735..c5a647b 100644 --- a/.devcontainer/030 - Windows 10 Pro/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "10" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json index 14f1ce6..1466e11 100644 --- a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "10e" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json index d5755e9..dfc8f5c 100644 --- a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "10l" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index ec1ed4d..e58f7ad 100644 --- a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "8e" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json index 0ad77d6..85878f0 100644 --- a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "7u" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json index e8514f8..b99c942 100644 --- a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "vu" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json index 43322dc..a2c51c4 100644 --- a/.devcontainer/090 - Windows XP Professional/devcontainer.json +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "xp" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json index c730760..e5fab13 100644 --- a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2k" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/110 - Windows Server 2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json index 73e5edd..96089cc 100644 --- a/.devcontainer/110 - Windows Server 2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2025" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/120 - Windows Server 2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json index 4586bf8..9897a67 100644 --- a/.devcontainer/120 - Windows Server 2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2022" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/130 - Windows Server 2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json index 9bc29ff..9903599 100644 --- a/.devcontainer/130 - Windows Server 2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2019" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/140 - Windows Server 2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json index 94629c4..614b171 100644 --- a/.devcontainer/140 - Windows Server 2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2016" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json index bd12659..158036c 100644 --- a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2012" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json index 0af33f4..5dc1af6 100644 --- a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2008" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/170 - Windows Server 2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json index f02be87..c47effb 100644 --- a/.devcontainer/170 - Windows Server 2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2003" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/180 - Tiny11/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json index 1224be1..225a746 100644 --- a/.devcontainer/180 - Tiny11/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "tiny11" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/190 - Tiny11 Core/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json index f928c24..78da098 100644 --- a/.devcontainer/190 - Tiny11 Core/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "core11" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/200 - Tiny11 Nano/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json index e7afeae..c7fdca9 100644 --- a/.devcontainer/200 - Tiny11 Nano/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "nano11" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json index 4f39fe0..3df1b88 100644 --- a/.devcontainer/210 - Tiny10/devcontainer.json +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "tiny10" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 10cf271..d7c98a8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -4,6 +4,7 @@ "containerEnv": { "VERSION": "11" }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", From 54767605515a040d106d7f4eea83b78a3a9a9bbe Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 13:16:22 +0200 Subject: [PATCH 491/505] feat: Update Tiny11 version to 25H2 (#1513) --- src/define.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/define.sh b/src/define.sh index 9198389..3db2069 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1108,14 +1108,14 @@ getLink4() { url="nano11_25h2/nano11%2025h2.iso" ;; "core11" ) - size=2159738880 - sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" - url="tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" + size=3176654848 + sum="29c055fcfb7b089abd9e007e7abe4bb82c70a03aac9d65e56a38b87ab32d04d2" + url="tiny11_25H2/tiny11core_25H2_Oct25.iso" ;; "tiny11" ) - size=3788177408 - sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280" - url="tiny11-2311/tiny11%202311%20x64.iso" + size=5514559488 + sum="92484f2b7f707e42383294402a9eabbadeaa5ede80ac633390ae7f3537e36275" + url="tiny11_25H2/tiny11_25H2_Oct25.iso" ;; "tiny10" ) size=3839819776 @@ -1123,9 +1123,9 @@ getLink4() { url="tiny-10-23-h2/tiny10%20x64%2023h2.iso" ;; "win11x64" ) - size=5819484160 - sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" - url="windows-11-24h2-x64/Windows%2011%2024H2%20x64.iso" + size=7736125440 + sum="d141f6030fed50f75e2b03e1eb2e53646c4b21e5386047cb860af5223f102a32" + url="W11x64_26200.6584/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENT_CONSUMER_x64FRE_en-us.iso" ;; "win11x64-enterprise" | "win11x64-enterprise-eval" ) size=6209064960 From 0e95680704f32a6f0e8739ae099235d25da11991 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 16:59:48 +0200 Subject: [PATCH 492/505] fix: Kill QEMU after 5 seconds when it hangs (#1515) --- src/power.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/power.sh b/src/power.sh index 1c2c223..72b60fd 100644 --- a/src/power.sh +++ b/src/power.sh @@ -74,6 +74,7 @@ ready() { finish() { local pid + local cnt=0 local reason=$1 touch "$QEMU_END" @@ -85,10 +86,20 @@ finish() { { kill -15 "$pid" || true; } 2>/dev/null while isAlive "$pid"; do + sleep 1 + cnt=$((cnt+1)) + # Workaround for zombie pid [ ! -s "$QEMU_PID" ] && break + + if [ "$cnt" == "5" ]; then + error "QEMU did not terminate itself, forcefully killing process..." + { kill -9 "$pid" || true; } 2>/dev/null + fi + done + fi if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then From ac106067bd3dcc79d1534df9b966d0ef6e7dd39d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 17:47:44 +0200 Subject: [PATCH 493/505] feat: Display ESD processing progress (#1514) --- src/install.sh | 90 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 24 deletions(-) diff --git a/src/install.sh b/src/install.sh index a9cbb2f..f9bd402 100644 --- a/src/install.sh +++ b/src/install.sh @@ -339,10 +339,12 @@ extractESD() { local dir="$2" local version="$3" local desc="$4" - local size size_gb space space_gb desc + local size size_gb sizes space space_gb + local desc total total1 total2 total3 total4 + local imageIndex links links1 links2 links3 links4 - local msg="Extracting $desc bootdisk..." - info "$msg" && html "$msg" + local msg="Extracting $desc bootdisk" + info "$msg..." && html "$msg..." if [ "$(stat -c%s "$iso")" -lt 100000000 ]; then error "Invalid ESD file: Size is smaller than 100 MB" && return 1 @@ -351,7 +353,7 @@ extractESD() { rm -rf "$dir" mkdir -p "$dir" - size=16106127360 + size=9606127360 size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$dir" | tail -n 1) space_gb=$(formatBytes "$space") @@ -367,40 +369,68 @@ extractESD() { error "Cannot read the image count in ESD file!" && return 1 fi - wimlib-imagex apply "$iso" 1 "$dir" --quiet 2>/dev/null || { + sizes=$(wimlib-imagex info "$iso" | grep "Total Bytes:") + links=$(wimlib-imagex info "$iso" | grep "Hard Link Bytes:") + + total1=$(awk "NR==1{ print; }" <<< "$sizes" | cut -d':' -f2 | sed 's/^ *//') + links1=$(awk "NR==1{ print; }" <<< "$links" | cut -d':' -f2 | sed 's/^ *//') + total=$(( total1 - links1 )) + + total3=$(awk "NR==3{ print; }" <<< "$sizes" | cut -d':' -f2 | sed 's/^ *//') + links3=$(awk "NR==3{ print; }" <<< "$links" | cut -d':' -f2 | sed 's/^ *//') + total3=$(( total3 - links3 )) + total3=$(( total3 + 60000000 )) + + /run/progress.sh "$dir" "$total" "$msg ([P])..." & + + imageIndex="1" + wimlib-imagex apply "$iso" "$imageIndex" "$dir" --quiet 2>/dev/null || { retVal=$? - error "Extracting $desc bootdisk failed" && return $retVal + fKill "progress.sh" + error "Extracting $desc bootdisk failed ($retVal)" && return 1 } + fKill "progress.sh" + local bootWimFile="$dir/sources/boot.wim" local installWimFile="$dir/sources/install.wim" - local msg="Extracting $desc environment..." - info "$msg" && html "$msg" + local msg="Extracting $desc environment" + info "$msg..." && html "$msg..." - wimlib-imagex export "$iso" 2 "$bootWimFile" --compress=none --quiet || { + imageIndex="2" + /run/progress.sh "$bootWimFile" "$total3" "$msg ([P])..." & + + wimlib-imagex export "$iso" "$imageIndex" "$bootWimFile" --compress=none --quiet || { retVal=$? - error "Adding WinPE failed" && return ${retVal} + fKill "progress.sh" + error "Adding WinPE failed ($retVal)" && return 1 } - local msg="Extracting $desc setup..." - info "$msg" && html "$msg" + local msg="Extracting $desc setup" + info "$msg..." - wimlib-imagex export "$iso" 3 "$bootWimFile" --compress=none --boot --quiet || { + imageIndex="3" + /run/progress.sh "$bootWimFile" "$total3" "$msg ([P])..." & + + wimlib-imagex export "$iso" "$imageIndex" "$bootWimFile" --compress=none --boot --quiet || { retVal=$? - error "Adding Windows Setup failed" && return ${retVal} + fKill "progress.sh" + error "Adding Windows Setup failed ($retVal)" && return 1 } + fKill "progress.sh" + if [[ "${PLATFORM,,}" == "x64" ]]; then LABEL="CCCOMA_X64FRE_EN-US_DV9" else LABEL="CPBA_A64FRE_EN-US_DV9" fi - local msg="Extracting $desc image..." - info "$msg" && html "$msg" + local msg="Extracting $desc image" + info "$msg..." && html "$msg..." - local edition imageIndex imageEdition + local edition imageEdition edition=$(getCatalog "$version" "name") if [ -z "$edition" ]; then @@ -408,15 +438,27 @@ extractESD() { fi for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do - imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//') + + imageEdition=$(wimlib-imagex info "$iso" "$imageIndex" | grep '^Description:' | sed 's/Description:[ \t]*//') [[ "${imageEdition,,}" != "${edition,,}" ]] && continue - wimlib-imagex export "$iso" ${imageIndex} "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || { + + total4=$(du -sb "$iso" | cut -f1) + total4=$(( total4 + 3000000 )) + + /run/progress.sh "$installWimFile" "$total4" "$msg ([P])..." & + + wimlib-imagex export "$iso" "$imageIndex" "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || { retVal=$? - error "Addition of $imageIndex to the $desc image failed" && return $retVal + fKill "progress.sh" + error "Addition of $imageIndex to the $desc image failed ($retVal)" && return 1 } + + fKill "progress.sh" return 0 + done + fKill "progress.sh" error "Failed to find product '$edition' in install.wim!" && return 1 } @@ -440,8 +482,8 @@ extractImage() { return 1 fi - local msg="Extracting $desc image..." - info "$msg" && html "$msg" + local msg="Extracting $desc image" + info "$msg..." && html "$msg..." rm -rf "$dir" mkdir -p "$dir" @@ -1081,8 +1123,8 @@ buildImage() { desc=$(printVersion "$DETECTED" "ISO") - local msg="Building $desc image..." - info "$msg" && html "$msg" + local msg="Building $desc image" + info "$msg..." && html "$msg..." [ -z "$LABEL" ] && LABEL="Windows" From 4cb7e1074f2e5453b46b73f2a88ca5b142eeec40 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 17:57:18 +0200 Subject: [PATCH 494/505] fix: Kill QEMU after 5 seconds if it hangs (#1516) --- src/power.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/power.sh b/src/power.sh index 72b60fd..8acb57b 100644 --- a/src/power.sh +++ b/src/power.sh @@ -82,22 +82,22 @@ finish() { if [ -s "$QEMU_PID" ]; then pid=$(<"$QEMU_PID") - error "Forcefully terminating Windows, reason: $reason..." + echo && error "Forcefully terminating Windows, reason: $reason..." { kill -15 "$pid" || true; } 2>/dev/null while isAlive "$pid"; do sleep 1 cnt=$((cnt+1)) - + # Workaround for zombie pid [ ! -s "$QEMU_PID" ] && break - + if [ "$cnt" == "5" ]; then - error "QEMU did not terminate itself, forcefully killing process..." + echo && error "QEMU did not terminate itself, forcefully killing process..." { kill -9 "$pid" || true; } 2>/dev/null fi - + done fi From b244fa544fbe3a8ae1af566b8afecbf279ed4497 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 18:01:17 +0200 Subject: [PATCH 495/505] build: Update QEMU base image to v7.26 (#1517) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1f8a231..7fef6a8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.25 / / +COPY --from=qemux/qemu:7.26 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From e3cf3ccf3d07ef3dfe90641010b942f2b0b7f95b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 20 Oct 2025 12:29:03 +0200 Subject: [PATCH 496/505] docs: Update docker run command (#1519) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 4256727..adbb6bf 100644 --- a/readme.md +++ b/readme.md @@ -53,7 +53,7 @@ services: ##### Via Docker CLI: ```bash -docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -e "VERSION=11" -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 docker.io/dockurr/windows ``` ##### Via Kubernetes: From 8790b4ec7c1baa03de11336c5716efce2f88eb0e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 20 Oct 2025 13:59:27 +0200 Subject: [PATCH 497/505] fix: Remove SeaBIOS control characters (#1520) --- src/entry.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/entry.sh b/src/entry.sh index 2929503..71e939e 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -39,6 +39,8 @@ terminal tail -fn +0 "$QEMU_LOG" --pid=$$ 2>/dev/null & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \ sed -u -e 's/\x1B\[[=0-9;]*[a-z]//gi' \ +-e 's/\x1B\x63//g' -e 's/\x1B\[[=?]7l//g' \ +-e '/^$/d' -e 's/\x44\x53\x73//g' \ -e 's/failed to load Boot/skipped Boot/g' \ -e 's/0): Not Found/0)/g' & wait $! || : From fa606aec5379b97ee9187ef23b27f1c11f006fc9 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 20 Oct 2025 14:48:46 +0200 Subject: [PATCH 498/505] build: Update wsddn package to v1.22 (#1521) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 7fef6a8..6dd3afd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ RUN set -eu && \ cabextract \ libxml2-utils \ libarchive-tools && \ - wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \ + wget "https://github.com/gershnik/wsdd-native/releases/download/v1.22/wsddn_1.22_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \ dpkg -i /tmp/wsddn.deb && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* From 9236127a865707de886c878aeb7f13fa204f21cb Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 20 Oct 2025 14:50:37 +0200 Subject: [PATCH 499/505] fix: Add SELinux warning for shared folder (#1522) --- src/samba.sh | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index d70cb1a..45228f9 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -46,10 +46,14 @@ addShare() { local cfg="$5" local owner="" - mkdir -p "$dir" || return 1 + if ! mkdir -p "$dir"; then + error "Failed to create directory $dir." && return 1 + fi if ! ls -A "$dir" >/dev/null 2>&1; then - error "Failed to access directory $dir" && return 1 + msg="Failed to access directory $dir." + msg+=" If SELinux is active, you need to add the \":Z\" flag to the bind mount." + error "$msg" && return 1 fi if [ -z "$(ls -A "$dir")" ]; then @@ -136,26 +140,21 @@ share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" [ ! -d "$share" ] && share="$tmp" -m1="Failed to add shared folder" -m2="Please check its permissions." - -if ! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG"; then - error "$m1 '$share'. $m2" && return 0 -fi +! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG" && return 0 if [ -d "/shared2" ]; then - addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared2'. $m2" + addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || : else if [ -d "/data2" ]; then - addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data2'. $m2." + addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || : fi fi if [ -d "/shared3" ]; then - addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared3'. $m2" + addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || : else if [ -d "/data3" ]; then - addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data3'. $m2" + addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || : fi fi From a0bcd719bed4b71228213a00d7b8690e3b44bbd4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 21 Oct 2025 22:46:06 +0200 Subject: [PATCH 500/505] build: Add review workflow for shell formatting (#1527) --- .github/workflows/review.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/review.yml diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml new file mode 100644 index 0000000..e18ca8c --- /dev/null +++ b/.github/workflows/review.yml @@ -0,0 +1,19 @@ +on: + pull_request: + +name: "Review" + +jobs: + review: + name: review + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v5 + - + name: Review + uses: reviewdog/action-shfmt@v1 + with: + shfmt_flags: "-i 2 -ci -bn" + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} From f661df3abc0b6bebe97f03919336f1763109308a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 21 Oct 2025 23:19:54 +0200 Subject: [PATCH 501/505] build: Update QEMU base image to v7.27 (#1528) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6dd3afd..bf6dab2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.26 / / +COPY --from=qemux/qemu:7.27 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From c1c44c4da760d8e9c686db90c6841f9da7b3c4fd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 22 Oct 2025 01:23:25 +0200 Subject: [PATCH 502/505] build: Add code quality checks (#1529) --- .github/workflows/review.yml | 49 +++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml index e18ca8c..51f8503 100644 --- a/.github/workflows/review.yml +++ b/.github/workflows/review.yml @@ -3,6 +3,11 @@ on: name: "Review" +permissions: + contents: read + pull-requests: write + checks: write + jobs: review: name: review @@ -12,8 +17,50 @@ jobs: name: Checkout uses: actions/checkout@v5 - - name: Review + name: Spelling + uses: reviewdog/action-misspell@v1 + with: + locale: "US" + level: warning + pattern: | + *.md + *.sh + reporter: github-pr-review + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Hadolint + uses: reviewdog/action-hadolint@v1 + with: + level: warning + reporter: github-pr-review + hadolint_ignore: DL3006 DL3008 + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: YamlLint + uses: reviewdog/action-yamllint@v1 + with: + level: warning + reporter: github-pr-review + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: ActionLint + uses: reviewdog/action-actionlint@v1 + with: + level: warning + reporter: github-pr-review + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Shellformat uses: reviewdog/action-shfmt@v1 with: + level: warning shfmt_flags: "-i 2 -ci -bn" github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Shellcheck + uses: reviewdog/action-shellcheck@v1 + with: + level: warning + reporter: github-pr-review + shellcheck_flags: -x -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 -e SC2028 + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} From 122d1ff98ed91a0813c8b31637289f7f5e89d05d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 22 Oct 2025 10:06:26 +0200 Subject: [PATCH 503/505] fix: Inherit owner from parent folder (#1526) --- src/install.sh | 84 ++++++++++++++++++++++++++++++++++++++++---------- src/mido.sh | 5 ++- src/power.sh | 4 ++- 3 files changed, 74 insertions(+), 19 deletions(-) diff --git a/src/install.sh b/src/install.sh index f9bd402..89d1795 100644 --- a/src/install.sh +++ b/src/install.sh @@ -22,7 +22,11 @@ backup () { fi - mkdir -p "$root" + if ! makeDir "$root"; then + error "Failed to create directory \"$root\" !" + return 1 + fi + local folder="$name" local dir="$root/$folder" @@ -34,7 +38,11 @@ backup () { done rm -rf "$dir" - mkdir -p "$dir" + + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" + return 1 + fi [ -f "$iso" ] && mv -f "$iso" "$dir/" find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \; @@ -156,7 +164,9 @@ startInstall() { ! backup "" && error "Backup failed!" fi - mkdir -p "$TMP" + if ! makeDir "$TMP"; then + error "Failed to create directory \"$TMP\" !" + fi if [ -z "$CUSTOM" ]; then @@ -178,6 +188,20 @@ startInstall() { return 0 } +writeFile() { + + local txt="$1" + local path="$2" + + echo "$txt" >"$path" + + if ! setOwner "$path"; then + error "Failed to set the owner for \"$path\" !" + fi + + return 0 +} + finishInstall() { local iso="$1" @@ -188,6 +212,10 @@ finishInstall() { error "Failed to find ISO file: $iso" && return 1 fi + if [[ "$iso" == "$STORAGE/"* ]]; then + ! setOwner "$iso" && error "Failed to set the owner for \"$iso\" !" + fi + if [[ "$aborted" != [Yy1]* ]]; then # Mark ISO as prepared via magic byte byte="16" && [[ "$MANUAL" == [Yy1]* ]] && byte="17" @@ -196,56 +224,68 @@ finishInstall() { fi fi - cp -f /run/version "$STORAGE/windows.ver" + local file="$STORAGE/windows.ver" + cp -f /run/version "$file" + ! setOwner "$file" && error "Failed to set the owner for \"$file\" !" if [[ "$iso" == "$STORAGE/"* ]]; then if [[ "$aborted" != [Yy1]* ]] || [ -z "$CUSTOM" ]; then base=$(basename "$iso") - echo "$base" > "$STORAGE/windows.base" + file="$STORAGE/windows.base" + writeFile "$base" "$file" fi fi if [[ "${PLATFORM,,}" == "x64" ]]; then if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + file="$STORAGE/windows.mode" + writeFile "$BOOT_MODE" "$file" if [[ "${MACHINE,,}" != "q35" ]]; then - echo "$MACHINE" > "$STORAGE/windows.old" + file="$STORAGE/windows.old" + writeFile "$MACHINE" "$file" fi else # Enable secure boot + TPM on manual installs as Win11 requires if [[ "$MANUAL" == [Yy1]* || "$aborted" == [Yy1]* ]]; then if [[ "${DETECTED,,}" == "win11"* ]]; then BOOT_MODE="windows_secure" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + file="$STORAGE/windows.mode" + writeFile "$BOOT_MODE" "$file" fi fi # Enable secure boot on multi-socket systems to workaround freeze if [ -n "$SOCKETS" ] && [[ "$SOCKETS" != "1" ]]; then BOOT_MODE="windows_secure" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + file="$STORAGE/windows.mode" + writeFile "$BOOT_MODE" "$file" fi fi fi if [ -n "${ARGS:-}" ]; then ARGUMENTS="$ARGS ${ARGUMENTS:-}" - echo "$ARGS" > "$STORAGE/windows.args" + file="$STORAGE/windows.args" + writeFile "$ARGS" "$file" fi if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio"* ]]; then - echo "$VGA" > "$STORAGE/windows.vga" + file="$STORAGE/windows.vga" + writeFile "$VGA" "$file" fi if [ -n "${USB:-}" ] && [[ "${USB:-}" != "qemu-xhci"* ]]; then - echo "$USB" > "$STORAGE/windows.usb" + file="$STORAGE/windows.usb" + writeFile "$USB" "$file" fi if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then - echo "$DISK_TYPE" > "$STORAGE/windows.type" + file="$STORAGE/windows.type" + writeFile "$DISK_TYPE" "$file" fi if [ -n "${ADAPTER:-}" ] && [[ "${ADAPTER:-}" != "virtio-net-pci" ]]; then - echo "$ADAPTER" > "$STORAGE/windows.net" + file="$STORAGE/windows.net" + writeFile "$ADAPTER" "$file" fi rm -rf "$TMP" @@ -351,7 +391,10 @@ extractESD() { fi rm -rf "$dir" - mkdir -p "$dir" + + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" && return 1 + fi size=9606127360 size_gb=$(formatBytes "$size") @@ -407,6 +450,8 @@ extractESD() { error "Adding WinPE failed ($retVal)" && return 1 } + fKill "progress.sh" + local msg="Extracting $desc setup" info "$msg..." @@ -486,14 +531,17 @@ extractImage() { info "$msg..." && html "$msg..." rm -rf "$dir" - mkdir -p "$dir" + + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" && return 1 + fi size=$(stat -c%s "$iso") size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$dir" | tail -n 1) space_gb=$(formatBytes "$space") - if ((size<100000000)); then + if (( size < 100000000 )); then error "Invalid ISO file: Size is smaller than 100 MB" && return 1 fi @@ -1177,6 +1225,8 @@ buildImage() { [[ "$error" != "$hide" ]] && echo "$error" mv -f "$out" "$BOOT" || return 1 + ! setOwner "$BOOT" && error "Failed to set the owner for \"$BOOT\" !" + return 0 } diff --git a/src/mido.sh b/src/mido.sh index cc5b251..369fc17 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -487,8 +487,11 @@ getESD() { info "$msg" && html "$msg" rm -rf "$dir" - mkdir -p "$dir" + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" && return 1 + fi + local xFile="products.xml" local eFile="esd_edition.xml" local fFile="products_filter.xml" diff --git a/src/power.sh b/src/power.sh index 8acb57b..98a6f73 100644 --- a/src/power.sh +++ b/src/power.sh @@ -105,7 +105,9 @@ finish() { if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then # Remove CD-ROM ISO after install if ready; then - touch "$STORAGE/windows.boot" + local file="$STORAGE/windows.boot" + touch "$file" + ! setOwner "$file" && error "Failed to set the owner for \"$file\" !" if [[ "$REMOVE" != [Nn]* ]]; then rm -f "$BOOT" 2>/dev/null || true fi From 544501107af0d4c4ede89ffb2e108ccbfd5f8028 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 22 Oct 2025 12:19:39 +0200 Subject: [PATCH 504/505] feat: Check if shared folder is writeable (#1531) --- src/samba.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 45228f9..7cd3210 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -46,16 +46,23 @@ addShare() { local cfg="$5" local owner="" - if ! mkdir -p "$dir"; then - error "Failed to create directory $dir." && return 1 + if [ ! -d "$dir" ]; then + if ! mkdir -p "$dir"; then + error "Failed to create shared folder ($dir)." && return 1 + fi fi if ! ls -A "$dir" >/dev/null 2>&1; then - msg="Failed to access directory $dir." + msg="No permission to access shared folder ($dir)." msg+=" If SELinux is active, you need to add the \":Z\" flag to the bind mount." error "$msg" && return 1 fi + if [ ! -w "$dir" ]; then + msg="shared folder ($dir) is not writeable!" + warn "$msg" + fi + if [ -z "$(ls -A "$dir")" ]; then if ! chmod 2777 "$dir"; then error "Failed to set permissions for directory $dir" && return 1 From 11a19f6a9d88857be72ccf0fa6215daeef5c4f4f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 24 Oct 2025 04:33:47 +0200 Subject: [PATCH 505/505] 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._-]/_}"