From fa40d30e5def55c01692662e00e9bae90b536a12 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 6 Apr 2025 00:42:46 +0200 Subject: [PATCH 001/116] 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/Docker<\/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/password<\/Value>/$admin<\/Value>/g" "$asset" - sed -i "s/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 002/116] 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 003/116] 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 004/116] 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 005/116] 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 006/116] 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 007/116] 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 008/116] 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 009/116] 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 010/116] 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 011/116] 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 012/116] 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 013/116] 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 014/116] 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 015/116] 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 016/116] 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 017/116] 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 018/116] 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 019/116] 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 020/116] 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 021/116] 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 022/116] 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 023/116] 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 024/116] 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 025/116] 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 026/116] 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 027/116] 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 028/116] 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 029/116] 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 030/116] 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 031/116] 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 032/116] 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 033/116] 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 034/116] 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 035/116] 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 036/116] 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 037/116] 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 038/116] 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 039/116] 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 040/116] 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 041/116] 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 042/116] 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 043/116] 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 044/116] 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 045/116] 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 046/116] 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 047/116] 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 048/116] 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 049/116] 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 050/116] 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 051/116] 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 052/116] 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 053/116] 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 054/116] 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 055/116] 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 056/116] 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 057/116] 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 058/116] 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 059/116] 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 060/116] 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 061/116] 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 062/116] 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 063/116] 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 064/116] 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 065/116] 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 066/116] 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 067/116] 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 068/116] 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 069/116] 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 070/116] 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 071/116] 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 072/116] 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 073/116] 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 074/116] 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 075/116] 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 076/116] 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 077/116] 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 078/116] 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 079/116] 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 080/116] 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 081/116] 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 082/116] 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 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 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 083/116] 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 084/116] 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 085/116] 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 086/116] 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 087/116] 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 088/116] 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 089/116] 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 090/116] 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 091/116] 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 092/116] 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 093/116] 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 094/116] 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 095/116] 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 096/116] 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 097/116] 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 098/116] 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 099/116] 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 100/116] 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 101/116] 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 102/116] 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 103/116] 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 104/116] 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 105/116] 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 106/116] 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 107/116] 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 108/116] 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 109/116] 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 110/116] 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 111/116] 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 112/116] 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 113/116] 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 114/116] 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 115/116] 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 116/116] 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._-]/_}"