From d9211a77df67a659bac9458636da76a96a31d4a4 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 18 Sep 2025 22:53:16 +0200 Subject: [PATCH 01/76] 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 @@ 5 - cmd /C wmic useraccount where name="Docker" set PasswordExpires=false + powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1 Password Never Expires 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 @@ 5 - cmd /C wmic useraccount where name="Docker" set PasswordExpires=false + powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1 Password Never Expires 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 @@ 5 - cmd /C wmic useraccount where name="Docker" set PasswordExpires=false + powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1 Password Never Expires 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 @@ 5 - cmd /C wmic useraccount where name="Docker" set PasswordExpires=false + powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1 Password Never Expires 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 @@ 5 - cmd /C wmic useraccount where name="Docker" set PasswordExpires=false + powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1 Password Never Expires 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 @@ 5 - cmd /C wmic useraccount where name="Docker" set PasswordExpires=false + powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1 Password Never Expires 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 @@ 5 - cmd /C wmic useraccount where name="Docker" set PasswordExpires=false + powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1 Password Never Expires 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/Docker<\/Name>/$user<\/Name>/g" "$asset" sed -i "s/where name=\"Docker\"/where name=\"$user\"/g" "$asset" sed -i "s/Docker<\/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 02/76] 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 Date: Sat, 20 Sep 2025 13:51:51 +0200 Subject: [PATCH 03/76] 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 Date: Sat, 20 Sep 2025 23:54:03 +0200 Subject: [PATCH 04/76] 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 Date: Sun, 21 Sep 2025 04:45:36 +0200 Subject: [PATCH 05/76] 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 Date: Sun, 21 Sep 2025 15:15:46 +0200 Subject: [PATCH 06/76] 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 Date: Sun, 21 Sep 2025 23:04:29 +0200 Subject: [PATCH 07/76] 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 Date: Mon, 22 Sep 2025 08:25:53 +0200 Subject: [PATCH 08/76] 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 Date: Mon, 22 Sep 2025 09:33:42 +0200 Subject: [PATCH 09/76] 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 10/76] 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 Date: Mon, 22 Sep 2025 21:38:24 +0200 Subject: [PATCH 11/76] 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 Date: Tue, 23 Sep 2025 16:17:31 +0200 Subject: [PATCH 12/76] 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 Date: Tue, 23 Sep 2025 16:55:11 +0200 Subject: [PATCH 13/76] 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 Date: Wed, 24 Sep 2025 16:38:22 +0200 Subject: [PATCH 14/76] 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 15/76] 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 Date: Tue, 30 Sep 2025 10:08:39 +0200 Subject: [PATCH 16/76] 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 11 + 12 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 12 + 13 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - 13 + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 21 cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts Add entry in hosts file - 21 + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 11 + 12 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 12 + 13 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - 13 + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 21 cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts Add entry in hosts file - 21 + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 11 + 12 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 12 + 13 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - 13 + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 21 cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts Add entry in hosts file - 21 + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 11 + 12 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 12 + 13 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - 13 + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 21 cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts Add entry in hosts file - 21 + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 11 + 12 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 12 + 13 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - 13 + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 21 cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts Add entry in hosts file - 21 + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f Show file extensions in Explorer - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 11 + 12 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 12 + 13 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 13 + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 21 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 21 + 22 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 22 + 23 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 23 + 24 cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts Add entry in hosts file - 24 + 25 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f Show file extensions in Explorer - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 11 + 12 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 12 + 13 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 13 + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 21 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 21 + 22 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 22 + 23 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 23 + 24 cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts Add entry in hosts file - 24 + 25 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f Show file extensions in Explorer - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 11 + 12 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 12 + 13 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 13 + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 21 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 21 + 22 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 22 + 23 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 23 + 24 cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts Add entry in hosts file - 24 + 25 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f Show file extensions in Explorer - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 11 + 12 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 12 + 13 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 13 + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 21 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 21 + 22 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 22 + 23 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 23 + 24 cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts Add entry in hosts file - 24 + 25 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f Show file extensions in Explorer - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 11 + 12 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 12 + 13 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 13 + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 21 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 21 + 22 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 22 + 23 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 23 + 24 cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts Add entry in hosts file - 24 + 25 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f Show file extensions in Explorer - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 11 + 12 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 12 + 13 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 13 + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - - 14 - reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f - Remove Search from the Taskbar - 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f 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 @@ 9 + reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f + Hide Copilot button + + + 10 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f Show file extensions in Explorer - 10 + 11 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f Zero Hibernation File - 11 + 12 reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f Disable Hibernation - 12 + 13 cmd /C POWERCFG -X -standby-timeout-ac 0 Disable Sleep - 13 + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f Enable RemoteAPP to launch unlisted programs - - 14 - reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f - Remove Search from the Taskbar - 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f From b308de3472828bc6f51da0156c22cf83bc8f709e Mon Sep 17 00:00:00 2001 From: Kroese Date: Tue, 30 Sep 2025 10:28:37 +0200 Subject: [PATCH 17/76] 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 Date: Wed, 1 Oct 2025 13:17:26 +0200 Subject: [PATCH 18/76] 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 Date: Wed, 1 Oct 2025 16:58:49 +0200 Subject: [PATCH 19/76] 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 20/76] 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 Date: Wed, 1 Oct 2025 17:34:13 +0200 Subject: [PATCH 21/76] 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 Date: Thu, 2 Oct 2025 10:46:20 +0200 Subject: [PATCH 22/76] 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 Date: Thu, 2 Oct 2025 20:04:15 +0200 Subject: [PATCH 23/76] 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 Date: Fri, 3 Oct 2025 00:00:08 +0200 Subject: [PATCH 24/76] 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 Date: Fri, 3 Oct 2025 00:02:03 +0200 Subject: [PATCH 25/76] 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 @@ 22 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 22 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 22 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 22 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 22 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 25 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 26 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 25 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 26 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 25 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 26 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 25 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 26 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 25 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 26 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 20 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 21 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 20 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 21 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 17 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 17 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 21 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -335,3 +340,4 @@ + 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 @@ 21 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -338,3 +343,4 @@ + 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 @@ 21 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -339,3 +344,4 @@ + 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 @@ 21 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -344,3 +349,4 @@ + 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 @@ 21 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 21 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -339,3 +344,4 @@ + 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 @@ 21 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -342,3 +347,4 @@ + 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 @@ 23 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -354,3 +359,4 @@ + 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 @@ 23 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 18 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 18 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 18 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 18 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 18 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 18 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 18 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 17 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -300,3 +305,4 @@ + 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 @@ 17 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 17 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 23 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 23 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -259,3 +264,4 @@ + 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 @@ 23 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -259,3 +264,4 @@ + 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 @@ 23 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -259,3 +264,4 @@ + 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 @@ 23 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 23 + cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data + Create desktop shortcut to shared folder + + + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -259,3 +264,4 @@ + From f29208af3f0a7d5fddc45f79b752bbf11f814484 Mon Sep 17 00:00:00 2001 From: Kroese Date: Fri, 3 Oct 2025 02:50:59 +0200 Subject: [PATCH 26/76] 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 Date: Fri, 3 Oct 2025 03:13:12 +0200 Subject: [PATCH 27/76] 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 Date: Fri, 3 Oct 2025 11:41:40 +0200 Subject: [PATCH 28/76] 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$( "$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 Date: Sat, 4 Oct 2025 09:47:08 +0200 Subject: [PATCH 29/76] 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 Date: Sun, 5 Oct 2025 07:47:19 +0200 Subject: [PATCH 30/76] 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 Date: Sun, 5 Oct 2025 18:58:17 +0200 Subject: [PATCH 31/76] 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 Date: Mon, 6 Oct 2025 13:22:28 +0200 Subject: [PATCH 32/76] 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 Date: Mon, 6 Oct 2025 13:44:05 +0200 Subject: [PATCH 33/76] 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 Date: Mon, 6 Oct 2025 13:45:14 +0200 Subject: [PATCH 34/76] 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 @@ 21 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 23 + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 21 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 23 + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 21 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 23 + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 21 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 23 + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 21 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 23 + 22 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 24 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 25 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 26 + 25 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 24 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 25 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 26 + 25 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 24 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 25 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 26 + 25 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 24 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 25 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 26 + 25 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 24 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 25 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 26 + 25 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 19 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 20 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 21 + 20 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 19 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 20 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 21 + 20 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 16 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 17 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 18 + 17 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 16 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 17 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 18 + 17 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 20 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 21 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 21 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -340,4 +335,3 @@ - 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 @@ 20 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 21 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 21 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -343,4 +338,3 @@ - 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 @@ 20 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 21 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 21 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -344,4 +339,3 @@ - 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 @@ 20 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 21 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 21 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -349,4 +344,3 @@ - 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 @@ 20 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 21 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 21 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 20 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 21 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 21 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -344,4 +339,3 @@ - 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 @@ 20 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 21 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 21 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -347,4 +342,3 @@ - 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 @@ 22 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 24 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -359,4 +354,3 @@ - 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 @@ 22 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 24 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 17 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 19 + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 17 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 19 + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 17 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 19 + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 17 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 19 + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 17 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 19 + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 17 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 19 + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 17 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 19 + 18 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 16 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 17 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 18 + 17 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -305,4 +300,3 @@ - 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 @@ 16 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 17 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 18 + 17 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 16 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 17 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 18 + 17 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 22 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 24 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 22 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 24 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -264,4 +259,3 @@ - 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 @@ 22 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 24 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -264,4 +259,3 @@ - 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 @@ 22 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 24 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -264,4 +259,3 @@ - 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 @@ 22 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 24 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 22 - cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts - Add entry in hosts file - - - 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 24 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists @@ -264,4 +259,3 @@ - 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 Date: Tue, 7 Oct 2025 01:10:52 +0200 Subject: [PATCH 35/76] 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 Date: Tue, 7 Oct 2025 12:39:17 +0200 Subject: [PATCH 36/76] 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 $ENGINE1080<\/VerticalResolution>/$HEIGHT<\/VerticalResolution>/g" "$asset" sed -i "s/1920<\/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$( Date: Tue, 7 Oct 2025 15:29:33 +0200 Subject: [PATCH 37/76] 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 @@ 13 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 14 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 22 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 13 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 14 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 22 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 13 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 14 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 22 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 13 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 14 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 22 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 13 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 14 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 22 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 22 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 15 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 22 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 22 + 23 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 23 + 24 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 24 + 25 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 25 + 26 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 15 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 22 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 22 + 23 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 23 + 24 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 24 + 25 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 25 + 26 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 15 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 22 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 22 + 23 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 23 + 24 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 24 + 25 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 25 + 26 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 15 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 22 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 22 + 23 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 23 + 24 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 24 + 25 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 25 + 26 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 15 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 22 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 22 + 23 reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f Disable unsupported hardware notifications - 23 + 24 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 24 + 25 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - 25 + 26 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 15 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 16 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 17 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 17 + 18 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 19 + 20 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 20 + 21 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 15 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 16 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 17 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 17 + 18 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 19 + 20 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 20 + 21 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 14 + 15 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 15 + 16 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 17 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 16 + 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 17 + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 14 + 15 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 15 + 16 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 17 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 16 + 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 17 + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 21 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 21 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 21 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 21 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 21 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 21 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f Remove Search from the Taskbar - 14 + 15 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 15 + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 17 + 18 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 18 + 19 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 19 + 20 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 20 + 22 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 21 + 23 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 15 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 22 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 22 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 23 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 15 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 16 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f Remove Task View from the Taskbar - 16 + 17 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f Remove Widgets from the Taskbar - 17 + 18 reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f Remove Chat from the Taskbar - 18 + 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 19 + 20 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 20 + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 21 + 22 cmd /C rd /q C:\Windows.old Remove empty Windows.old folder - 22 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 23 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 14 + 15 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 15 + 16 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 17 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 16 + 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 17 + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 14 + 15 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 15 + 16 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 17 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 16 + 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 17 + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 12 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 13 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 14 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f Turn off Windows Update auto download - 14 + 15 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 15 + 16 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f + Disable Network Discovery popup + + + 17 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 16 + 18 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 17 + 19 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 20 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 21 + 22 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 22 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 23 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 20 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 21 + 22 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 22 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 23 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 20 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 21 + 22 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 22 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 23 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 20 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 21 + 22 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 22 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 23 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 20 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 21 + 22 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 22 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 23 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists 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 @@ 19 reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f - Enable RemoteAPP to launch unlisted programs + Enable RemoteApp to launch unlisted programs 20 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f + Disable RemoteApp allowlist + + + 21 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes Enable Network Discovery - 21 + 22 netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes Enable File Sharing - 22 + 23 cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data Create desktop shortcut to shared folder - + - 23 + 24 cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat" Execute custom script from the OEM folder if exists From ccc0d4ea64cd99267b4ad35d39d085b21cc43e31 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 8 Oct 2025 08:14:36 +0200 Subject: [PATCH 38/76] 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 Date: Wed, 8 Oct 2025 22:08:11 +0200 Subject: [PATCH 39/76] 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 Date: Thu, 9 Oct 2025 12:24:51 +0200 Subject: [PATCH 40/76] 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 Date: Fri, 10 Oct 2025 06:28:20 +0200 Subject: [PATCH 41/76] 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$( "$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 Date: Sat, 11 Oct 2025 17:31:14 +0200 Subject: [PATCH 42/76] 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 Date: Sat, 11 Oct 2025 17:33:02 +0200 Subject: [PATCH 43/76] 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 Date: Sun, 12 Oct 2025 00:22:18 +0200 Subject: [PATCH 44/76] 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 Date: Sun, 12 Oct 2025 02:03:16 +0200 Subject: [PATCH 45/76] 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 Date: Mon, 13 Oct 2025 15:06:21 +0200 Subject: [PATCH 46/76] 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 Date: Wed, 15 Oct 2025 13:15:31 +0200 Subject: [PATCH 47/76] 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 Date: Wed, 15 Oct 2025 21:54:52 +0200 Subject: [PATCH 48/76] 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 Date: Wed, 15 Oct 2025 23:47:29 +0200 Subject: [PATCH 49/76] feat: Improve Github Codespaces configuration (#1487) --- .devcontainer.json | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/.devcontainer.json b/.devcontainer.json index a7eeaf5..b70743f 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -1,6 +1,21 @@ { - "name": "windows", + "name": "Windows 11 Pro", "service": "windows", - "forwardPorts": [8006], + "containerEnv": { + "VERSION": "11" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, "dockerComposeFile": ".github/codespaces.yml" } From 0b0de7de142761383e68c80c8176c5056ff34d0e Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Oct 2025 00:03:24 +0200 Subject: [PATCH 50/76] feat: Improve Github Codespaces configuration (#1488) --- .devcontainer.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.devcontainer.json b/.devcontainer.json index b70743f..3d8577f 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -2,7 +2,10 @@ "name": "Windows 11 Pro", "service": "windows", "containerEnv": { - "VERSION": "11" + "VERSION": "11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" }, "forwardPorts": [8006], "portsAttributes": { From 42a149d7b91a329fc1a0fd7073b5ff3b78e5fe73 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Oct 2025 10:54:06 +0200 Subject: [PATCH 51/76] feat: Make Windows version selectable in Codespaces (#1489) --- .../10/devcontainer.json | 6 ++--- .devcontainer/10e/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/10l/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/11e/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/11l/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2003/devcontainer.json | 21 ++++++++++++++++ .devcontainer/2008/devcontainer.json | 21 ++++++++++++++++ .devcontainer/2012/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2016/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2019/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2022/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2025/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2k/devcontainer.json | 21 ++++++++++++++++ .devcontainer/7u/devcontainer.json | 21 ++++++++++++++++ .devcontainer/7u32/devcontainer.json | 21 ++++++++++++++++ .devcontainer/8e/devcontainer.json | 24 +++++++++++++++++++ {.github => .devcontainer}/codespaces.yml | 0 .devcontainer/core11/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/nano11/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/tiny10/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/tiny11/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/vu/devcontainer.json | 21 ++++++++++++++++ .devcontainer/vu32/devcontainer.json | 21 ++++++++++++++++ .devcontainer/xp/devcontainer.json | 21 ++++++++++++++++ .devcontainer/xp64/devcontainer.json | 21 ++++++++++++++++ 26 files changed, 552 insertions(+), 3 deletions(-) rename .devcontainer.json => .devcontainer/10/devcontainer.json (79%) create mode 100644 .devcontainer/10e/devcontainer.json create mode 100644 .devcontainer/10l/devcontainer.json create mode 100644 .devcontainer/11e/devcontainer.json create mode 100644 .devcontainer/11l/devcontainer.json create mode 100644 .devcontainer/2003/devcontainer.json create mode 100644 .devcontainer/2008/devcontainer.json create mode 100644 .devcontainer/2012/devcontainer.json create mode 100644 .devcontainer/2016/devcontainer.json create mode 100644 .devcontainer/2019/devcontainer.json create mode 100644 .devcontainer/2022/devcontainer.json create mode 100644 .devcontainer/2025/devcontainer.json create mode 100644 .devcontainer/2k/devcontainer.json create mode 100644 .devcontainer/7u/devcontainer.json create mode 100644 .devcontainer/7u32/devcontainer.json create mode 100644 .devcontainer/8e/devcontainer.json rename {.github => .devcontainer}/codespaces.yml (100%) create mode 100644 .devcontainer/core11/devcontainer.json create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/nano11/devcontainer.json create mode 100644 .devcontainer/tiny10/devcontainer.json create mode 100644 .devcontainer/tiny11/devcontainer.json create mode 100644 .devcontainer/vu/devcontainer.json create mode 100644 .devcontainer/vu32/devcontainer.json create mode 100644 .devcontainer/xp/devcontainer.json create mode 100644 .devcontainer/xp64/devcontainer.json diff --git a/.devcontainer.json b/.devcontainer/10/devcontainer.json similarity index 79% rename from .devcontainer.json rename to .devcontainer/10/devcontainer.json index 3d8577f..bdc023e 100644 --- a/.devcontainer.json +++ b/.devcontainer/10/devcontainer.json @@ -1,8 +1,8 @@ { - "name": "Windows 11 Pro", + "name": "Windows 10 Pro", "service": "windows", "containerEnv": { - "VERSION": "11", + "VERSION": "10", "RAM_SIZE": "max", "DISK_SIZE": "max", "CPU_CORES": "max" @@ -20,5 +20,5 @@ "hostRequirements": { "storage": "64gb" }, - "dockerComposeFile": ".github/codespaces.yml" + "dockerComposeFile": "../codespaces.yml" } diff --git a/.devcontainer/10e/devcontainer.json b/.devcontainer/10e/devcontainer.json new file mode 100644 index 0000000..e401fea --- /dev/null +++ b/.devcontainer/10e/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 10 Enterprise", + "service": "windows", + "containerEnv": { + "VERSION": "10e", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/10l/devcontainer.json b/.devcontainer/10l/devcontainer.json new file mode 100644 index 0000000..25109bb --- /dev/null +++ b/.devcontainer/10l/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 10 LTSC", + "service": "windows", + "containerEnv": { + "VERSION": "10l", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/11e/devcontainer.json b/.devcontainer/11e/devcontainer.json new file mode 100644 index 0000000..c67781a --- /dev/null +++ b/.devcontainer/11e/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 11 Enterprise", + "service": "windows", + "containerEnv": { + "VERSION": "11e", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/11l/devcontainer.json b/.devcontainer/11l/devcontainer.json new file mode 100644 index 0000000..6cda36c --- /dev/null +++ b/.devcontainer/11l/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 11 LTSC", + "service": "windows", + "containerEnv": { + "VERSION": "11l", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2003/devcontainer.json b/.devcontainer/2003/devcontainer.json new file mode 100644 index 0000000..ffe7dc5 --- /dev/null +++ b/.devcontainer/2003/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Server 2003", + "service": "windows", + "containerEnv": { + "VERSION": "2003", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2008/devcontainer.json b/.devcontainer/2008/devcontainer.json new file mode 100644 index 0000000..5930e9c --- /dev/null +++ b/.devcontainer/2008/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Server 2008 R2", + "service": "windows", + "containerEnv": { + "VERSION": "2008", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2012/devcontainer.json b/.devcontainer/2012/devcontainer.json new file mode 100644 index 0000000..8d3519c --- /dev/null +++ b/.devcontainer/2012/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2012 R2", + "service": "windows", + "containerEnv": { + "VERSION": "2012", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2016/devcontainer.json b/.devcontainer/2016/devcontainer.json new file mode 100644 index 0000000..2ede9d5 --- /dev/null +++ b/.devcontainer/2016/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2016", + "service": "windows", + "containerEnv": { + "VERSION": "2016", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2019/devcontainer.json b/.devcontainer/2019/devcontainer.json new file mode 100644 index 0000000..68e2829 --- /dev/null +++ b/.devcontainer/2019/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2019", + "service": "windows", + "containerEnv": { + "VERSION": "2019", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2022/devcontainer.json b/.devcontainer/2022/devcontainer.json new file mode 100644 index 0000000..5c66d43 --- /dev/null +++ b/.devcontainer/2022/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2022", + "service": "windows", + "containerEnv": { + "VERSION": "2022", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2025/devcontainer.json b/.devcontainer/2025/devcontainer.json new file mode 100644 index 0000000..f5b2984 --- /dev/null +++ b/.devcontainer/2025/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2025", + "service": "windows", + "containerEnv": { + "VERSION": "2025", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2k/devcontainer.json b/.devcontainer/2k/devcontainer.json new file mode 100644 index 0000000..2aa0e55 --- /dev/null +++ b/.devcontainer/2k/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows 2000 Professional", + "service": "windows", + "containerEnv": { + "VERSION": "2k", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/7u/devcontainer.json b/.devcontainer/7u/devcontainer.json new file mode 100644 index 0000000..ac4314c --- /dev/null +++ b/.devcontainer/7u/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows 7 Ultimate (64-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "7u", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/7u32/devcontainer.json b/.devcontainer/7u32/devcontainer.json new file mode 100644 index 0000000..612ddc2 --- /dev/null +++ b/.devcontainer/7u32/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows 7 Ultimate (32-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "7ux86", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/8e/devcontainer.json b/.devcontainer/8e/devcontainer.json new file mode 100644 index 0000000..d27348b --- /dev/null +++ b/.devcontainer/8e/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 8.1 Enterprise", + "service": "windows", + "containerEnv": { + "VERSION": "8e", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.github/codespaces.yml b/.devcontainer/codespaces.yml similarity index 100% rename from .github/codespaces.yml rename to .devcontainer/codespaces.yml diff --git a/.devcontainer/core11/devcontainer.json b/.devcontainer/core11/devcontainer.json new file mode 100644 index 0000000..44ba15f --- /dev/null +++ b/.devcontainer/core11/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 11 Core", + "service": "windows", + "containerEnv": { + "VERSION": "core11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..7a9ad96 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 11 Pro", + "service": "windows", + "containerEnv": { + "VERSION": "11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "codespaces.yml" +} diff --git a/.devcontainer/nano11/devcontainer.json b/.devcontainer/nano11/devcontainer.json new file mode 100644 index 0000000..a5ea04a --- /dev/null +++ b/.devcontainer/nano11/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 11 Nano", + "service": "windows", + "containerEnv": { + "VERSION": "nano11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/tiny10/devcontainer.json b/.devcontainer/tiny10/devcontainer.json new file mode 100644 index 0000000..9b7dd6b --- /dev/null +++ b/.devcontainer/tiny10/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 10", + "service": "windows", + "containerEnv": { + "VERSION": "tiny10", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/tiny11/devcontainer.json b/.devcontainer/tiny11/devcontainer.json new file mode 100644 index 0000000..a659705 --- /dev/null +++ b/.devcontainer/tiny11/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 11", + "service": "windows", + "containerEnv": { + "VERSION": "tiny11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/vu/devcontainer.json b/.devcontainer/vu/devcontainer.json new file mode 100644 index 0000000..2b9e871 --- /dev/null +++ b/.devcontainer/vu/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Vista Ultimate (64-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "vu", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/vu32/devcontainer.json b/.devcontainer/vu32/devcontainer.json new file mode 100644 index 0000000..7c5be1c --- /dev/null +++ b/.devcontainer/vu32/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Vista Ultimate (32-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "vux86", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/xp/devcontainer.json b/.devcontainer/xp/devcontainer.json new file mode 100644 index 0000000..d7a8dfd --- /dev/null +++ b/.devcontainer/xp/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows XP (32-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "xp", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/xp64/devcontainer.json b/.devcontainer/xp64/devcontainer.json new file mode 100644 index 0000000..a03df31 --- /dev/null +++ b/.devcontainer/xp64/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows XP (64-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "xp64", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} From 0ab3198ded9678c96389e113d9dd9352d5039ae8 Mon Sep 17 00:00:00 2001 From: Kroese Date: Fri, 17 Oct 2025 10:05:12 +0200 Subject: [PATCH 52/76] build: Validate JSON and YML files (#1493) --- .dockerignore | 1 + .github/workflows/check.yml | 26 ++++++++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/.dockerignore b/.dockerignore index 258778b..154d44a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,5 @@ .dockerignore +.devcontainer .git .github .gitignore diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 788a2b0..9e9d278 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -7,19 +7,29 @@ jobs: name: shellcheck runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 - - name: Run ShellCheck + - + name: Checkout + uses: actions/checkout@v5 + - + name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 -e SC2028 - - name: Validate XML - uses: action-pack/valid-xml@v1 - with: - path: "assets" - file-endings: ".xml" - - name: Lint Dockerfile + - + name: Lint Dockerfile uses: hadolint/hadolint-action@v3.3.0 with: dockerfile: Dockerfile ignore: DL3006,DL3008 failure-threshold: warning + - + name: Validate XML + uses: action-pack/valid-xml@v1 + with: + path: "assets" + file-endings: ".xml" + - + name: Validate JSON and YML files + uses: GrantBirki/json-yaml-validate@v4 + with: + yaml_exclude_regex: ".*\\kubernetes\\.yml$" From f1ea8ee227c4943e1729610e64dd9681bcd2234a Mon Sep 17 00:00:00 2001 From: Kroese Date: Fri, 17 Oct 2025 12:53:48 +0200 Subject: [PATCH 53/76] build: Update VirtIO drivers to v1.9.48 (#1494) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9fa65be..2a58348 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,7 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.47-0/virtio-win-1.9.47.tar.xz /var/drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.48-0/virtio-win-1.9.48.tar.xz /var/drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} From c6a8c0b702d921caff883d839f8d79d6832c717f Mon Sep 17 00:00:00 2001 From: Kroese Date: Fri, 17 Oct 2025 13:38:11 +0200 Subject: [PATCH 54/76] feat: Load memory module (#1495) --- src/entry.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/entry.sh b/src/entry.sh index 1b440a0..2929503 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -22,7 +22,9 @@ cd /run . boot.sh # Configure boot . proc.sh # Initialize processor . power.sh # Configure shutdown +. memory.sh # Check available memory . config.sh # Configure arguments +. finish.sh # Finish initialization trap - ERR From c997bf7765faba8ba497898cf289b34d45b97b1a Mon Sep 17 00:00:00 2001 From: Kroese Date: Fri, 17 Oct 2025 13:42:41 +0200 Subject: [PATCH 55/76] feat: Improve Github Codespaces configuration (#1497) --- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 7 ++---- .../devcontainer.json | 18 ++++++++++++++ .../devcontainer.json | 18 ++++++++++++++ .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 7 ++---- .../devcontainer.json | 7 ++---- .../devcontainer.json | 7 ++---- .devcontainer/210 - Tiny10/devcontainer.json | 21 ++++++++++++++++ .devcontainer/7u/devcontainer.json | 21 ---------------- .devcontainer/7u32/devcontainer.json | 21 ---------------- .devcontainer/codespaces.yml | 3 ++- .devcontainer/devcontainer.json | 5 +--- .devcontainer/nano11/devcontainer.json | 24 ------------------- .devcontainer/vu/devcontainer.json | 21 ---------------- .devcontainer/vu32/devcontainer.json | 21 ---------------- .devcontainer/xp64/devcontainer.json | 21 ---------------- 29 files changed, 82 insertions(+), 210 deletions(-) rename .devcontainer/{11e => 010 - Windows 11 Enterprise}/devcontainer.json (80%) rename .devcontainer/{11l => 020 - Windows 11 LTSC}/devcontainer.json (79%) rename .devcontainer/{10 => 030 - Windows 10 Pro}/devcontainer.json (79%) rename .devcontainer/{10e => 040 - Windows 10 Enterprise}/devcontainer.json (80%) rename .devcontainer/{10l => 050 - Windows 10 LTSC}/devcontainer.json (79%) rename .devcontainer/{8e => 060 - Windows 8.1 Enterprise}/devcontainer.json (80%) rename .devcontainer/{xp => 070 - Windows 7 Ultimate}/devcontainer.json (69%) create mode 100644 .devcontainer/080 - Windows Vista Ultimate/devcontainer.json create mode 100644 .devcontainer/090 - Windows XP Professional/devcontainer.json rename .devcontainer/{2k => 100 - Windows 2000 Professional}/devcontainer.json (77%) rename .devcontainer/{2025 => 110 - Windows Server 2025}/devcontainer.json (79%) rename .devcontainer/{2022 => 120 - Windows Server 2022}/devcontainer.json (79%) rename .devcontainer/{2019 => 130 - Windows Server 2019}/devcontainer.json (79%) rename .devcontainer/{2016 => 140 - Windows Server 2016}/devcontainer.json (79%) rename .devcontainer/{2012 => 150 - Windows Server 2012 R2}/devcontainer.json (79%) rename .devcontainer/{2008 => 160 - Windows Server 2008 R2}/devcontainer.json (77%) rename .devcontainer/{2003 => 170 - Windows Server 2003}/devcontainer.json (77%) rename .devcontainer/{tiny10 => 180 - Tiny11}/devcontainer.json (74%) rename .devcontainer/{tiny11 => 190 - Tiny11 Core}/devcontainer.json (74%) rename .devcontainer/{core11 => 200 - Tiny11 Nano}/devcontainer.json (73%) create mode 100644 .devcontainer/210 - Tiny10/devcontainer.json delete mode 100644 .devcontainer/7u/devcontainer.json delete mode 100644 .devcontainer/7u32/devcontainer.json delete mode 100644 .devcontainer/nano11/devcontainer.json delete mode 100644 .devcontainer/vu/devcontainer.json delete mode 100644 .devcontainer/vu32/devcontainer.json delete mode 100644 .devcontainer/xp64/devcontainer.json diff --git a/.devcontainer/11e/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json similarity index 80% rename from .devcontainer/11e/devcontainer.json rename to .devcontainer/010 - Windows 11 Enterprise/devcontainer.json index c67781a..4e67f1a 100644 --- a/.devcontainer/11e/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 11 Enterprise", "service": "windows", "containerEnv": { - "VERSION": "11e", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "11e" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/11l/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json similarity index 79% rename from .devcontainer/11l/devcontainer.json rename to .devcontainer/020 - Windows 11 LTSC/devcontainer.json index 6cda36c..e93fbf1 100644 --- a/.devcontainer/11l/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 11 LTSC", "service": "windows", "containerEnv": { - "VERSION": "11l", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "11l" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/10/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json similarity index 79% rename from .devcontainer/10/devcontainer.json rename to .devcontainer/030 - Windows 10 Pro/devcontainer.json index bdc023e..573f6ab 100644 --- a/.devcontainer/10/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 10 Pro", "service": "windows", "containerEnv": { - "VERSION": "10", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "10" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/10e/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json similarity index 80% rename from .devcontainer/10e/devcontainer.json rename to .devcontainer/040 - Windows 10 Enterprise/devcontainer.json index e401fea..b5ef076 100644 --- a/.devcontainer/10e/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 10 Enterprise", "service": "windows", "containerEnv": { - "VERSION": "10e", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "10e" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/10l/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json similarity index 79% rename from .devcontainer/10l/devcontainer.json rename to .devcontainer/050 - Windows 10 LTSC/devcontainer.json index 25109bb..30ced2a 100644 --- a/.devcontainer/10l/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 10 LTSC", "service": "windows", "containerEnv": { - "VERSION": "10l", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "10l" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/8e/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json similarity index 80% rename from .devcontainer/8e/devcontainer.json rename to .devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index d27348b..41870d0 100644 --- a/.devcontainer/8e/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 8.1 Enterprise", "service": "windows", "containerEnv": { - "VERSION": "8e", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "8e" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/xp/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json similarity index 69% rename from .devcontainer/xp/devcontainer.json rename to .devcontainer/070 - Windows 7 Ultimate/devcontainer.json index d7a8dfd..ffaf504 100644 --- a/.devcontainer/xp/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Windows XP (32-bit)", + "name": "Windows 7 Ultimate", "service": "windows", "containerEnv": { - "VERSION": "xp", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "7u" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json new file mode 100644 index 0000000..2cdfe89 --- /dev/null +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -0,0 +1,18 @@ +{ + "name": "Windows Vista Ultimate", + "service": "windows", + "containerEnv": { + "VERSION": "vu" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json new file mode 100644 index 0000000..1e375ff --- /dev/null +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -0,0 +1,18 @@ +{ + "name": "Windows XP Professional", + "service": "windows", + "containerEnv": { + "VERSION": "xp" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2k/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json similarity index 77% rename from .devcontainer/2k/devcontainer.json rename to .devcontainer/100 - Windows 2000 Professional/devcontainer.json index 2aa0e55..9ee27cb 100644 --- a/.devcontainer/2k/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 2000 Professional", "service": "windows", "containerEnv": { - "VERSION": "2k", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2k" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json similarity index 79% rename from .devcontainer/2025/devcontainer.json rename to .devcontainer/110 - Windows Server 2025/devcontainer.json index f5b2984..2ef30e8 100644 --- a/.devcontainer/2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2025", "service": "windows", "containerEnv": { - "VERSION": "2025", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2025" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json similarity index 79% rename from .devcontainer/2022/devcontainer.json rename to .devcontainer/120 - Windows Server 2022/devcontainer.json index 5c66d43..4994c5f 100644 --- a/.devcontainer/2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2022", "service": "windows", "containerEnv": { - "VERSION": "2022", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2022" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json similarity index 79% rename from .devcontainer/2019/devcontainer.json rename to .devcontainer/130 - Windows Server 2019/devcontainer.json index 68e2829..333902b 100644 --- a/.devcontainer/2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2019", "service": "windows", "containerEnv": { - "VERSION": "2019", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2019" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json similarity index 79% rename from .devcontainer/2016/devcontainer.json rename to .devcontainer/140 - Windows Server 2016/devcontainer.json index 2ede9d5..f611b12 100644 --- a/.devcontainer/2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2016", "service": "windows", "containerEnv": { - "VERSION": "2016", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2016" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2012/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json similarity index 79% rename from .devcontainer/2012/devcontainer.json rename to .devcontainer/150 - Windows Server 2012 R2/devcontainer.json index 8d3519c..d9d72f5 100644 --- a/.devcontainer/2012/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2012 R2", "service": "windows", "containerEnv": { - "VERSION": "2012", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2012" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2008/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json similarity index 77% rename from .devcontainer/2008/devcontainer.json rename to .devcontainer/160 - Windows Server 2008 R2/devcontainer.json index 5930e9c..cca5f42 100644 --- a/.devcontainer/2008/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2008 R2", "service": "windows", "containerEnv": { - "VERSION": "2008", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2008" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json similarity index 77% rename from .devcontainer/2003/devcontainer.json rename to .devcontainer/170 - Windows Server 2003/devcontainer.json index ffe7dc5..14eb337 100644 --- a/.devcontainer/2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2003", "service": "windows", "containerEnv": { - "VERSION": "2003", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2003" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/tiny10/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json similarity index 74% rename from .devcontainer/tiny10/devcontainer.json rename to .devcontainer/180 - Tiny11/devcontainer.json index 9b7dd6b..0ed1384 100644 --- a/.devcontainer/tiny10/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Tiny 10", + "name": "Tiny11", "service": "windows", "containerEnv": { - "VERSION": "tiny10", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "tiny11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/tiny11/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json similarity index 74% rename from .devcontainer/tiny11/devcontainer.json rename to .devcontainer/190 - Tiny11 Core/devcontainer.json index a659705..1873cbc 100644 --- a/.devcontainer/tiny11/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Tiny 11", + "name": "Tiny11 Core", "service": "windows", "containerEnv": { - "VERSION": "tiny11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "core11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/core11/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json similarity index 73% rename from .devcontainer/core11/devcontainer.json rename to .devcontainer/200 - Tiny11 Nano/devcontainer.json index 44ba15f..f05b707 100644 --- a/.devcontainer/core11/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Tiny 11 Core", + "name": "Tiny11 Nano", "service": "windows", "containerEnv": { - "VERSION": "core11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "nano11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json new file mode 100644 index 0000000..5039698 --- /dev/null +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Tiny10", + "service": "windows", + "containerEnv": { + "VERSION": "tiny10" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/7u/devcontainer.json b/.devcontainer/7u/devcontainer.json deleted file mode 100644 index ac4314c..0000000 --- a/.devcontainer/7u/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows 7 Ultimate (64-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "7u", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/7u32/devcontainer.json b/.devcontainer/7u32/devcontainer.json deleted file mode 100644 index 612ddc2..0000000 --- a/.devcontainer/7u32/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows 7 Ultimate (32-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "7ux86", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/codespaces.yml b/.devcontainer/codespaces.yml index 7aaba65..f9682d1 100644 --- a/.devcontainer/codespaces.yml +++ b/.devcontainer/codespaces.yml @@ -4,7 +4,8 @@ services: container_name: windows environment: VERSION: "11" - RAM_SIZE: "max" + ALLOCATE: "Y" + RAM_SIZE: "half" DISK_SIZE: "max" CPU_CORES: "max" devices: diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 7a9ad96..5de96d5 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 11 Pro", "service": "windows", "containerEnv": { - "VERSION": "11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/nano11/devcontainer.json b/.devcontainer/nano11/devcontainer.json deleted file mode 100644 index a5ea04a..0000000 --- a/.devcontainer/nano11/devcontainer.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Tiny 11 Nano", - "service": "windows", - "containerEnv": { - "VERSION": "nano11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/vu/devcontainer.json b/.devcontainer/vu/devcontainer.json deleted file mode 100644 index 2b9e871..0000000 --- a/.devcontainer/vu/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows Vista Ultimate (64-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "vu", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/vu32/devcontainer.json b/.devcontainer/vu32/devcontainer.json deleted file mode 100644 index 7c5be1c..0000000 --- a/.devcontainer/vu32/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows Vista Ultimate (32-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "vux86", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/xp64/devcontainer.json b/.devcontainer/xp64/devcontainer.json deleted file mode 100644 index a03df31..0000000 --- a/.devcontainer/xp64/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows XP (64-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "xp64", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} From 6f84823117bd5e79b94a69854e378ba1a0bce43d Mon Sep 17 00:00:00 2001 From: Kroese Date: Fri, 17 Oct 2025 13:45:46 +0200 Subject: [PATCH 56/76] build: Update QEMU base image version to v7.25 (#1496) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2a58348..1f8a231 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.24 / / +COPY --from=qemux/qemu:7.25 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From b998cd4c7fbee6d8e1be74024b5004c02d5cde7a Mon Sep 17 00:00:00 2001 From: Kroese Date: Fri, 17 Oct 2025 19:03:03 +0200 Subject: [PATCH 57/76] fix: Remove version variable in Codespaces (#1500) --- .devcontainer/codespaces.yml | 1 - .devcontainer/devcontainer.json | 3 --- 2 files changed, 4 deletions(-) diff --git a/.devcontainer/codespaces.yml b/.devcontainer/codespaces.yml index f9682d1..02c57be 100644 --- a/.devcontainer/codespaces.yml +++ b/.devcontainer/codespaces.yml @@ -3,7 +3,6 @@ services: image: dockurr/windows container_name: windows environment: - VERSION: "11" ALLOCATE: "Y" RAM_SIZE: "half" DISK_SIZE: "max" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5de96d5..9772d1c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,8 +14,5 @@ "otherPortsAttributes": { "onAutoForward": "silent" }, - "hostRequirements": { - "storage": "64gb" - }, "dockerComposeFile": "codespaces.yml" } From 10449a3d2968ae07db4567bae5e2f4fe29689829 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 19 Oct 2025 01:31:23 +0200 Subject: [PATCH 58/76] feat: Improve Github Codespaces configuration (#1506) --- .../010 - Windows 11 Enterprise/devcontainer.json | 8 +++----- .devcontainer/020 - Windows 11 LTSC/devcontainer.json | 8 +++----- .devcontainer/030 - Windows 10 Pro/devcontainer.json | 8 +++----- .../040 - Windows 10 Enterprise/devcontainer.json | 8 +++----- .devcontainer/050 - Windows 10 LTSC/devcontainer.json | 8 +++----- .../060 - Windows 8.1 Enterprise/devcontainer.json | 8 +++----- .devcontainer/070 - Windows 7 Ultimate/devcontainer.json | 7 ++++--- .../080 - Windows Vista Ultimate/devcontainer.json | 7 ++++--- .../090 - Windows XP Professional/devcontainer.json | 7 ++++--- .../100 - Windows 2000 Professional/devcontainer.json | 7 ++++--- .devcontainer/110 - Windows Server 2025/devcontainer.json | 8 +++----- .devcontainer/120 - Windows Server 2022/devcontainer.json | 8 +++----- .devcontainer/130 - Windows Server 2019/devcontainer.json | 8 +++----- .devcontainer/140 - Windows Server 2016/devcontainer.json | 8 +++----- .../150 - Windows Server 2012 R2/devcontainer.json | 8 +++----- .../160 - Windows Server 2008 R2/devcontainer.json | 7 ++++--- .devcontainer/170 - Windows Server 2003/devcontainer.json | 7 ++++--- .devcontainer/180 - Tiny11/devcontainer.json | 8 +++----- .devcontainer/190 - Tiny11 Core/devcontainer.json | 8 +++----- .devcontainer/200 - Tiny11 Nano/devcontainer.json | 8 +++----- .devcontainer/210 - Tiny10/devcontainer.json | 8 +++----- .devcontainer/devcontainer.json | 7 ++++--- 22 files changed, 73 insertions(+), 96 deletions(-) diff --git a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json index 4e67f1a..0c80313 100644 --- a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json index e93fbf1..07a560e 100644 --- a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/030 - Windows 10 Pro/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json index 573f6ab..579209b 100644 --- a/.devcontainer/030 - Windows 10 Pro/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json index b5ef076..891be73 100644 --- a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json index 30ced2a..d18b867 100644 --- a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index 41870d0..77debb3 100644 --- a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json index ffaf504..b6da3da 100644 --- a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json index 2cdfe89..1b907fe 100644 --- a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json index 1e375ff..560ad6b 100644 --- a/.devcontainer/090 - Windows XP Professional/devcontainer.json +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json index 9ee27cb..7faee4b 100644 --- a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/110 - Windows Server 2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json index 2ef30e8..547c1ac 100644 --- a/.devcontainer/110 - Windows Server 2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/120 - Windows Server 2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json index 4994c5f..a490a66 100644 --- a/.devcontainer/120 - Windows Server 2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/130 - Windows Server 2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json index 333902b..fbcd4bf 100644 --- a/.devcontainer/130 - Windows Server 2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/140 - Windows Server 2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json index f611b12..eb48544 100644 --- a/.devcontainer/140 - Windows Server 2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json index d9d72f5..c2dd726 100644 --- a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json index cca5f42..2f5d724 100644 --- a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/170 - Windows Server 2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json index 14eb337..f06440f 100644 --- a/.devcontainer/170 - Windows Server 2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/180 - Tiny11/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json index 0ed1384..cf91e35 100644 --- a/.devcontainer/180 - Tiny11/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/190 - Tiny11 Core/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json index 1873cbc..969072d 100644 --- a/.devcontainer/190 - Tiny11 Core/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/200 - Tiny11 Nano/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json index f05b707..cb35030 100644 --- a/.devcontainer/200 - Tiny11 Nano/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json index 5039698..2111084 100644 --- a/.devcontainer/210 - Tiny10/devcontainer.json +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 9772d1c..533b39e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "codespaces.yml", + "initializeCommand": "docker system prune --all --force" } From c3ba25bfb7f658f5a93ac19095446fd2780fc7b4 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 19 Oct 2025 10:50:46 +0200 Subject: [PATCH 59/76] feat: Improve Github Codespaces configuration (#1510) --- .devcontainer/010 - Windows 11 Enterprise/devcontainer.json | 4 ++-- .devcontainer/020 - Windows 11 LTSC/devcontainer.json | 4 ++-- .devcontainer/030 - Windows 10 Pro/devcontainer.json | 4 ++-- .devcontainer/040 - Windows 10 Enterprise/devcontainer.json | 4 ++-- .devcontainer/050 - Windows 10 LTSC/devcontainer.json | 4 ++-- .../060 - Windows 8.1 Enterprise/devcontainer.json | 4 ++-- .devcontainer/070 - Windows 7 Ultimate/devcontainer.json | 4 ++-- .../080 - Windows Vista Ultimate/devcontainer.json | 4 ++-- .../090 - Windows XP Professional/devcontainer.json | 4 ++-- .../100 - Windows 2000 Professional/devcontainer.json | 4 ++-- .devcontainer/110 - Windows Server 2025/devcontainer.json | 4 ++-- .devcontainer/120 - Windows Server 2022/devcontainer.json | 4 ++-- .devcontainer/130 - Windows Server 2019/devcontainer.json | 4 ++-- .devcontainer/140 - Windows Server 2016/devcontainer.json | 4 ++-- .../150 - Windows Server 2012 R2/devcontainer.json | 4 ++-- .../160 - Windows Server 2008 R2/devcontainer.json | 4 ++-- .devcontainer/170 - Windows Server 2003/devcontainer.json | 4 ++-- .devcontainer/180 - Tiny11/devcontainer.json | 4 ++-- .devcontainer/190 - Tiny11 Core/devcontainer.json | 4 ++-- .devcontainer/200 - Tiny11 Nano/devcontainer.json | 4 ++-- .devcontainer/210 - Tiny10/devcontainer.json | 4 ++-- .devcontainer/codespaces.yml | 3 +-- .devcontainer/devcontainer.json | 6 +++--- 23 files changed, 46 insertions(+), 47 deletions(-) diff --git a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json index 0c80313..a5ddea1 100644 --- a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "11e" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json index 07a560e..eef73ca 100644 --- a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "11l" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/030 - Windows 10 Pro/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json index 579209b..4a37735 100644 --- a/.devcontainer/030 - Windows 10 Pro/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "10" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json index 891be73..14f1ce6 100644 --- a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "10e" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json index d18b867..d5755e9 100644 --- a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "10l" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index 77debb3..ec1ed4d 100644 --- a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "8e" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json index b6da3da..0ad77d6 100644 --- a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "7u" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json index 1b907fe..e8514f8 100644 --- a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "vu" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json index 560ad6b..43322dc 100644 --- a/.devcontainer/090 - Windows XP Professional/devcontainer.json +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "xp" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json index 7faee4b..c730760 100644 --- a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2k" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/110 - Windows Server 2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json index 547c1ac..73e5edd 100644 --- a/.devcontainer/110 - Windows Server 2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2025" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/120 - Windows Server 2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json index a490a66..4586bf8 100644 --- a/.devcontainer/120 - Windows Server 2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2022" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/130 - Windows Server 2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json index fbcd4bf..9bc29ff 100644 --- a/.devcontainer/130 - Windows Server 2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2019" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/140 - Windows Server 2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json index eb48544..94629c4 100644 --- a/.devcontainer/140 - Windows Server 2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2016" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json index c2dd726..bd12659 100644 --- a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2012" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json index 2f5d724..0af33f4 100644 --- a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2008" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/170 - Windows Server 2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json index f06440f..f02be87 100644 --- a/.devcontainer/170 - Windows Server 2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2003" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/180 - Tiny11/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json index cf91e35..1224be1 100644 --- a/.devcontainer/180 - Tiny11/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "tiny11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/190 - Tiny11 Core/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json index 969072d..f928c24 100644 --- a/.devcontainer/190 - Tiny11 Core/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "core11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/200 - Tiny11 Nano/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json index cb35030..e7afeae 100644 --- a/.devcontainer/200 - Tiny11 Nano/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "nano11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json index 2111084..4f39fe0 100644 --- a/.devcontainer/210 - Tiny10/devcontainer.json +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "tiny10" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/codespaces.yml b/.devcontainer/codespaces.yml index 02c57be..85e3f64 100644 --- a/.devcontainer/codespaces.yml +++ b/.devcontainer/codespaces.yml @@ -1,9 +1,8 @@ services: windows: - image: dockurr/windows container_name: windows + image: ghcr.io/dockur/windows environment: - ALLOCATE: "Y" RAM_SIZE: "half" DISK_SIZE: "max" CPU_CORES: "max" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 533b39e..10cf271 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" - }, + }, "dockerComposeFile": "codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } From 4e0a29605befce06cef110ae41141f2506f5d3c5 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 19 Oct 2025 11:08:57 +0200 Subject: [PATCH 60/76] feat: Display extraction progress (#1511) --- src/install.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/install.sh b/src/install.sh index 50cf7ea..a9cbb2f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -460,11 +460,15 @@ extractImage() { fi rm -rf "$dir" + /run/progress.sh "$dir" "$size" "$msg ([P])..." & if ! 7z x "$iso" -o"$dir" > /dev/null; then + fKill "progress.sh" error "Failed to extract ISO file: $iso" && return 1 fi + fKill "progress.sh" + if [[ "${UNPACK:-}" != [Yy1]* ]]; then LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p') @@ -1095,6 +1099,8 @@ buildImage() { error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1 fi + /run/progress.sh "$out" "$size" "$msg ([P])..." & + if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ @@ -1115,6 +1121,8 @@ buildImage() { fi + fKill "progress.sh" + if [ -n "$failed" ]; then [ -s "$log" ] && echo "$(<"$log")" error "Failed to build image!" && return 1 From 0caa4d76b8784a2b15fd9ffffed21f030779c55d Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 19 Oct 2025 12:49:32 +0200 Subject: [PATCH 61/76] feat: Improve Github Codespaces configuration (#1512) --- .devcontainer/010 - Windows 11 Enterprise/devcontainer.json | 3 ++- .devcontainer/020 - Windows 11 LTSC/devcontainer.json | 3 ++- .devcontainer/030 - Windows 10 Pro/devcontainer.json | 3 ++- .devcontainer/040 - Windows 10 Enterprise/devcontainer.json | 3 ++- .devcontainer/050 - Windows 10 LTSC/devcontainer.json | 3 ++- .devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json | 3 ++- .devcontainer/070 - Windows 7 Ultimate/devcontainer.json | 3 ++- .devcontainer/080 - Windows Vista Ultimate/devcontainer.json | 3 ++- .devcontainer/090 - Windows XP Professional/devcontainer.json | 3 ++- .../100 - Windows 2000 Professional/devcontainer.json | 3 ++- .devcontainer/110 - Windows Server 2025/devcontainer.json | 3 ++- .devcontainer/120 - Windows Server 2022/devcontainer.json | 3 ++- .devcontainer/130 - Windows Server 2019/devcontainer.json | 3 ++- .devcontainer/140 - Windows Server 2016/devcontainer.json | 3 ++- .devcontainer/150 - Windows Server 2012 R2/devcontainer.json | 3 ++- .devcontainer/160 - Windows Server 2008 R2/devcontainer.json | 3 ++- .devcontainer/170 - Windows Server 2003/devcontainer.json | 3 ++- .devcontainer/180 - Tiny11/devcontainer.json | 3 ++- .devcontainer/190 - Tiny11 Core/devcontainer.json | 3 ++- .devcontainer/200 - Tiny11 Nano/devcontainer.json | 3 ++- .devcontainer/210 - Tiny10/devcontainer.json | 3 ++- .devcontainer/devcontainer.json | 1 + 22 files changed, 43 insertions(+), 21 deletions(-) diff --git a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json index a5ddea1..cc0e5ae 100644 --- a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "11e" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json index eef73ca..23e54ff 100644 --- a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "11l" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/030 - Windows 10 Pro/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json index 4a37735..c5a647b 100644 --- a/.devcontainer/030 - Windows 10 Pro/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "10" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json index 14f1ce6..1466e11 100644 --- a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "10e" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json index d5755e9..dfc8f5c 100644 --- a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "10l" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index ec1ed4d..e58f7ad 100644 --- a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "8e" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json index 0ad77d6..85878f0 100644 --- a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "7u" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json index e8514f8..b99c942 100644 --- a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "vu" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json index 43322dc..a2c51c4 100644 --- a/.devcontainer/090 - Windows XP Professional/devcontainer.json +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "xp" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json index c730760..e5fab13 100644 --- a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2k" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/110 - Windows Server 2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json index 73e5edd..96089cc 100644 --- a/.devcontainer/110 - Windows Server 2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2025" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/120 - Windows Server 2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json index 4586bf8..9897a67 100644 --- a/.devcontainer/120 - Windows Server 2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2022" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/130 - Windows Server 2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json index 9bc29ff..9903599 100644 --- a/.devcontainer/130 - Windows Server 2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2019" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/140 - Windows Server 2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json index 94629c4..614b171 100644 --- a/.devcontainer/140 - Windows Server 2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2016" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json index bd12659..158036c 100644 --- a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2012" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json index 0af33f4..5dc1af6 100644 --- a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2008" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/170 - Windows Server 2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json index f02be87..c47effb 100644 --- a/.devcontainer/170 - Windows Server 2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2003" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/180 - Tiny11/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json index 1224be1..225a746 100644 --- a/.devcontainer/180 - Tiny11/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "tiny11" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/190 - Tiny11 Core/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json index f928c24..78da098 100644 --- a/.devcontainer/190 - Tiny11 Core/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "core11" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/200 - Tiny11 Nano/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json index e7afeae..c7fdca9 100644 --- a/.devcontainer/200 - Tiny11 Nano/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "nano11" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json index 4f39fe0..3df1b88 100644 --- a/.devcontainer/210 - Tiny10/devcontainer.json +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "tiny10" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 10cf271..d7c98a8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -4,6 +4,7 @@ "containerEnv": { "VERSION": "11" }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", From 54767605515a040d106d7f4eea83b78a3a9a9bbe Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 19 Oct 2025 13:16:22 +0200 Subject: [PATCH 62/76] feat: Update Tiny11 version to 25H2 (#1513) --- src/define.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/define.sh b/src/define.sh index 9198389..3db2069 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1108,14 +1108,14 @@ getLink4() { url="nano11_25h2/nano11%2025h2.iso" ;; "core11" ) - size=2159738880 - sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" - url="tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" + size=3176654848 + sum="29c055fcfb7b089abd9e007e7abe4bb82c70a03aac9d65e56a38b87ab32d04d2" + url="tiny11_25H2/tiny11core_25H2_Oct25.iso" ;; "tiny11" ) - size=3788177408 - sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280" - url="tiny11-2311/tiny11%202311%20x64.iso" + size=5514559488 + sum="92484f2b7f707e42383294402a9eabbadeaa5ede80ac633390ae7f3537e36275" + url="tiny11_25H2/tiny11_25H2_Oct25.iso" ;; "tiny10" ) size=3839819776 @@ -1123,9 +1123,9 @@ getLink4() { url="tiny-10-23-h2/tiny10%20x64%2023h2.iso" ;; "win11x64" ) - size=5819484160 - sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" - url="windows-11-24h2-x64/Windows%2011%2024H2%20x64.iso" + size=7736125440 + sum="d141f6030fed50f75e2b03e1eb2e53646c4b21e5386047cb860af5223f102a32" + url="W11x64_26200.6584/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENT_CONSUMER_x64FRE_en-us.iso" ;; "win11x64-enterprise" | "win11x64-enterprise-eval" ) size=6209064960 From 0e95680704f32a6f0e8739ae099235d25da11991 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 19 Oct 2025 16:59:48 +0200 Subject: [PATCH 63/76] fix: Kill QEMU after 5 seconds when it hangs (#1515) --- src/power.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/power.sh b/src/power.sh index 1c2c223..72b60fd 100644 --- a/src/power.sh +++ b/src/power.sh @@ -74,6 +74,7 @@ ready() { finish() { local pid + local cnt=0 local reason=$1 touch "$QEMU_END" @@ -85,10 +86,20 @@ finish() { { kill -15 "$pid" || true; } 2>/dev/null while isAlive "$pid"; do + sleep 1 + cnt=$((cnt+1)) + # Workaround for zombie pid [ ! -s "$QEMU_PID" ] && break + + if [ "$cnt" == "5" ]; then + error "QEMU did not terminate itself, forcefully killing process..." + { kill -9 "$pid" || true; } 2>/dev/null + fi + done + fi if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then From ac106067bd3dcc79d1534df9b966d0ef6e7dd39d Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 19 Oct 2025 17:47:44 +0200 Subject: [PATCH 64/76] feat: Display ESD processing progress (#1514) --- src/install.sh | 90 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 24 deletions(-) diff --git a/src/install.sh b/src/install.sh index a9cbb2f..f9bd402 100644 --- a/src/install.sh +++ b/src/install.sh @@ -339,10 +339,12 @@ extractESD() { local dir="$2" local version="$3" local desc="$4" - local size size_gb space space_gb desc + local size size_gb sizes space space_gb + local desc total total1 total2 total3 total4 + local imageIndex links links1 links2 links3 links4 - local msg="Extracting $desc bootdisk..." - info "$msg" && html "$msg" + local msg="Extracting $desc bootdisk" + info "$msg..." && html "$msg..." if [ "$(stat -c%s "$iso")" -lt 100000000 ]; then error "Invalid ESD file: Size is smaller than 100 MB" && return 1 @@ -351,7 +353,7 @@ extractESD() { rm -rf "$dir" mkdir -p "$dir" - size=16106127360 + size=9606127360 size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$dir" | tail -n 1) space_gb=$(formatBytes "$space") @@ -367,40 +369,68 @@ extractESD() { error "Cannot read the image count in ESD file!" && return 1 fi - wimlib-imagex apply "$iso" 1 "$dir" --quiet 2>/dev/null || { + sizes=$(wimlib-imagex info "$iso" | grep "Total Bytes:") + links=$(wimlib-imagex info "$iso" | grep "Hard Link Bytes:") + + total1=$(awk "NR==1{ print; }" <<< "$sizes" | cut -d':' -f2 | sed 's/^ *//') + links1=$(awk "NR==1{ print; }" <<< "$links" | cut -d':' -f2 | sed 's/^ *//') + total=$(( total1 - links1 )) + + total3=$(awk "NR==3{ print; }" <<< "$sizes" | cut -d':' -f2 | sed 's/^ *//') + links3=$(awk "NR==3{ print; }" <<< "$links" | cut -d':' -f2 | sed 's/^ *//') + total3=$(( total3 - links3 )) + total3=$(( total3 + 60000000 )) + + /run/progress.sh "$dir" "$total" "$msg ([P])..." & + + imageIndex="1" + wimlib-imagex apply "$iso" "$imageIndex" "$dir" --quiet 2>/dev/null || { retVal=$? - error "Extracting $desc bootdisk failed" && return $retVal + fKill "progress.sh" + error "Extracting $desc bootdisk failed ($retVal)" && return 1 } + fKill "progress.sh" + local bootWimFile="$dir/sources/boot.wim" local installWimFile="$dir/sources/install.wim" - local msg="Extracting $desc environment..." - info "$msg" && html "$msg" + local msg="Extracting $desc environment" + info "$msg..." && html "$msg..." - wimlib-imagex export "$iso" 2 "$bootWimFile" --compress=none --quiet || { + imageIndex="2" + /run/progress.sh "$bootWimFile" "$total3" "$msg ([P])..." & + + wimlib-imagex export "$iso" "$imageIndex" "$bootWimFile" --compress=none --quiet || { retVal=$? - error "Adding WinPE failed" && return ${retVal} + fKill "progress.sh" + error "Adding WinPE failed ($retVal)" && return 1 } - local msg="Extracting $desc setup..." - info "$msg" && html "$msg" + local msg="Extracting $desc setup" + info "$msg..." - wimlib-imagex export "$iso" 3 "$bootWimFile" --compress=none --boot --quiet || { + imageIndex="3" + /run/progress.sh "$bootWimFile" "$total3" "$msg ([P])..." & + + wimlib-imagex export "$iso" "$imageIndex" "$bootWimFile" --compress=none --boot --quiet || { retVal=$? - error "Adding Windows Setup failed" && return ${retVal} + fKill "progress.sh" + error "Adding Windows Setup failed ($retVal)" && return 1 } + fKill "progress.sh" + if [[ "${PLATFORM,,}" == "x64" ]]; then LABEL="CCCOMA_X64FRE_EN-US_DV9" else LABEL="CPBA_A64FRE_EN-US_DV9" fi - local msg="Extracting $desc image..." - info "$msg" && html "$msg" + local msg="Extracting $desc image" + info "$msg..." && html "$msg..." - local edition imageIndex imageEdition + local edition imageEdition edition=$(getCatalog "$version" "name") if [ -z "$edition" ]; then @@ -408,15 +438,27 @@ extractESD() { fi for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do - imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//') + + imageEdition=$(wimlib-imagex info "$iso" "$imageIndex" | grep '^Description:' | sed 's/Description:[ \t]*//') [[ "${imageEdition,,}" != "${edition,,}" ]] && continue - wimlib-imagex export "$iso" ${imageIndex} "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || { + + total4=$(du -sb "$iso" | cut -f1) + total4=$(( total4 + 3000000 )) + + /run/progress.sh "$installWimFile" "$total4" "$msg ([P])..." & + + wimlib-imagex export "$iso" "$imageIndex" "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || { retVal=$? - error "Addition of $imageIndex to the $desc image failed" && return $retVal + fKill "progress.sh" + error "Addition of $imageIndex to the $desc image failed ($retVal)" && return 1 } + + fKill "progress.sh" return 0 + done + fKill "progress.sh" error "Failed to find product '$edition' in install.wim!" && return 1 } @@ -440,8 +482,8 @@ extractImage() { return 1 fi - local msg="Extracting $desc image..." - info "$msg" && html "$msg" + local msg="Extracting $desc image" + info "$msg..." && html "$msg..." rm -rf "$dir" mkdir -p "$dir" @@ -1081,8 +1123,8 @@ buildImage() { desc=$(printVersion "$DETECTED" "ISO") - local msg="Building $desc image..." - info "$msg" && html "$msg" + local msg="Building $desc image" + info "$msg..." && html "$msg..." [ -z "$LABEL" ] && LABEL="Windows" From 4cb7e1074f2e5453b46b73f2a88ca5b142eeec40 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 19 Oct 2025 17:57:18 +0200 Subject: [PATCH 65/76] fix: Kill QEMU after 5 seconds if it hangs (#1516) --- src/power.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/power.sh b/src/power.sh index 72b60fd..8acb57b 100644 --- a/src/power.sh +++ b/src/power.sh @@ -82,22 +82,22 @@ finish() { if [ -s "$QEMU_PID" ]; then pid=$(<"$QEMU_PID") - error "Forcefully terminating Windows, reason: $reason..." + echo && error "Forcefully terminating Windows, reason: $reason..." { kill -15 "$pid" || true; } 2>/dev/null while isAlive "$pid"; do sleep 1 cnt=$((cnt+1)) - + # Workaround for zombie pid [ ! -s "$QEMU_PID" ] && break - + if [ "$cnt" == "5" ]; then - error "QEMU did not terminate itself, forcefully killing process..." + echo && error "QEMU did not terminate itself, forcefully killing process..." { kill -9 "$pid" || true; } 2>/dev/null fi - + done fi From b244fa544fbe3a8ae1af566b8afecbf279ed4497 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 19 Oct 2025 18:01:17 +0200 Subject: [PATCH 66/76] build: Update QEMU base image to v7.26 (#1517) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1f8a231..7fef6a8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.25 / / +COPY --from=qemux/qemu:7.26 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From e3cf3ccf3d07ef3dfe90641010b942f2b0b7f95b Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 20 Oct 2025 12:29:03 +0200 Subject: [PATCH 67/76] docs: Update docker run command (#1519) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 4256727..adbb6bf 100644 --- a/readme.md +++ b/readme.md @@ -53,7 +53,7 @@ services: ##### Via Docker CLI: ```bash -docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -e "VERSION=11" -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 docker.io/dockurr/windows ``` ##### Via Kubernetes: From 8790b4ec7c1baa03de11336c5716efce2f88eb0e Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 20 Oct 2025 13:59:27 +0200 Subject: [PATCH 68/76] fix: Remove SeaBIOS control characters (#1520) --- src/entry.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/entry.sh b/src/entry.sh index 2929503..71e939e 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -39,6 +39,8 @@ terminal tail -fn +0 "$QEMU_LOG" --pid=$$ 2>/dev/null & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \ sed -u -e 's/\x1B\[[=0-9;]*[a-z]//gi' \ +-e 's/\x1B\x63//g' -e 's/\x1B\[[=?]7l//g' \ +-e '/^$/d' -e 's/\x44\x53\x73//g' \ -e 's/failed to load Boot/skipped Boot/g' \ -e 's/0): Not Found/0)/g' & wait $! || : From fa606aec5379b97ee9187ef23b27f1c11f006fc9 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 20 Oct 2025 14:48:46 +0200 Subject: [PATCH 69/76] build: Update wsddn package to v1.22 (#1521) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 7fef6a8..6dd3afd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ RUN set -eu && \ cabextract \ libxml2-utils \ libarchive-tools && \ - wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \ + wget "https://github.com/gershnik/wsdd-native/releases/download/v1.22/wsddn_1.22_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \ dpkg -i /tmp/wsddn.deb && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* From 9236127a865707de886c878aeb7f13fa204f21cb Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 20 Oct 2025 14:50:37 +0200 Subject: [PATCH 70/76] fix: Add SELinux warning for shared folder (#1522) --- src/samba.sh | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index d70cb1a..45228f9 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -46,10 +46,14 @@ addShare() { local cfg="$5" local owner="" - mkdir -p "$dir" || return 1 + if ! mkdir -p "$dir"; then + error "Failed to create directory $dir." && return 1 + fi if ! ls -A "$dir" >/dev/null 2>&1; then - error "Failed to access directory $dir" && return 1 + msg="Failed to access directory $dir." + msg+=" If SELinux is active, you need to add the \":Z\" flag to the bind mount." + error "$msg" && return 1 fi if [ -z "$(ls -A "$dir")" ]; then @@ -136,26 +140,21 @@ share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" [ ! -d "$share" ] && share="$tmp" -m1="Failed to add shared folder" -m2="Please check its permissions." - -if ! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG"; then - error "$m1 '$share'. $m2" && return 0 -fi +! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG" && return 0 if [ -d "/shared2" ]; then - addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared2'. $m2" + addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || : else if [ -d "/data2" ]; then - addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data2'. $m2." + addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || : fi fi if [ -d "/shared3" ]; then - addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared3'. $m2" + addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || : else if [ -d "/data3" ]; then - addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data3'. $m2" + addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || : fi fi From a0bcd719bed4b71228213a00d7b8690e3b44bbd4 Mon Sep 17 00:00:00 2001 From: Kroese Date: Tue, 21 Oct 2025 22:46:06 +0200 Subject: [PATCH 71/76] build: Add review workflow for shell formatting (#1527) --- .github/workflows/review.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/review.yml diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml new file mode 100644 index 0000000..e18ca8c --- /dev/null +++ b/.github/workflows/review.yml @@ -0,0 +1,19 @@ +on: + pull_request: + +name: "Review" + +jobs: + review: + name: review + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v5 + - + name: Review + uses: reviewdog/action-shfmt@v1 + with: + shfmt_flags: "-i 2 -ci -bn" + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} From f661df3abc0b6bebe97f03919336f1763109308a Mon Sep 17 00:00:00 2001 From: Kroese Date: Tue, 21 Oct 2025 23:19:54 +0200 Subject: [PATCH 72/76] build: Update QEMU base image to v7.27 (#1528) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6dd3afd..bf6dab2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.26 / / +COPY --from=qemux/qemu:7.27 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From c1c44c4da760d8e9c686db90c6841f9da7b3c4fd Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 22 Oct 2025 01:23:25 +0200 Subject: [PATCH 73/76] build: Add code quality checks (#1529) --- .github/workflows/review.yml | 49 +++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml index e18ca8c..51f8503 100644 --- a/.github/workflows/review.yml +++ b/.github/workflows/review.yml @@ -3,6 +3,11 @@ on: name: "Review" +permissions: + contents: read + pull-requests: write + checks: write + jobs: review: name: review @@ -12,8 +17,50 @@ jobs: name: Checkout uses: actions/checkout@v5 - - name: Review + name: Spelling + uses: reviewdog/action-misspell@v1 + with: + locale: "US" + level: warning + pattern: | + *.md + *.sh + reporter: github-pr-review + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Hadolint + uses: reviewdog/action-hadolint@v1 + with: + level: warning + reporter: github-pr-review + hadolint_ignore: DL3006 DL3008 + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: YamlLint + uses: reviewdog/action-yamllint@v1 + with: + level: warning + reporter: github-pr-review + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: ActionLint + uses: reviewdog/action-actionlint@v1 + with: + level: warning + reporter: github-pr-review + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Shellformat uses: reviewdog/action-shfmt@v1 with: + level: warning shfmt_flags: "-i 2 -ci -bn" github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Shellcheck + uses: reviewdog/action-shellcheck@v1 + with: + level: warning + reporter: github-pr-review + shellcheck_flags: -x -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 -e SC2028 + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} From 122d1ff98ed91a0813c8b31637289f7f5e89d05d Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 22 Oct 2025 10:06:26 +0200 Subject: [PATCH 74/76] fix: Inherit owner from parent folder (#1526) --- src/install.sh | 84 ++++++++++++++++++++++++++++++++++++++++---------- src/mido.sh | 5 ++- src/power.sh | 4 ++- 3 files changed, 74 insertions(+), 19 deletions(-) diff --git a/src/install.sh b/src/install.sh index f9bd402..89d1795 100644 --- a/src/install.sh +++ b/src/install.sh @@ -22,7 +22,11 @@ backup () { fi - mkdir -p "$root" + if ! makeDir "$root"; then + error "Failed to create directory \"$root\" !" + return 1 + fi + local folder="$name" local dir="$root/$folder" @@ -34,7 +38,11 @@ backup () { done rm -rf "$dir" - mkdir -p "$dir" + + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" + return 1 + fi [ -f "$iso" ] && mv -f "$iso" "$dir/" find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \; @@ -156,7 +164,9 @@ startInstall() { ! backup "" && error "Backup failed!" fi - mkdir -p "$TMP" + if ! makeDir "$TMP"; then + error "Failed to create directory \"$TMP\" !" + fi if [ -z "$CUSTOM" ]; then @@ -178,6 +188,20 @@ startInstall() { return 0 } +writeFile() { + + local txt="$1" + local path="$2" + + echo "$txt" >"$path" + + if ! setOwner "$path"; then + error "Failed to set the owner for \"$path\" !" + fi + + return 0 +} + finishInstall() { local iso="$1" @@ -188,6 +212,10 @@ finishInstall() { error "Failed to find ISO file: $iso" && return 1 fi + if [[ "$iso" == "$STORAGE/"* ]]; then + ! setOwner "$iso" && error "Failed to set the owner for \"$iso\" !" + fi + if [[ "$aborted" != [Yy1]* ]]; then # Mark ISO as prepared via magic byte byte="16" && [[ "$MANUAL" == [Yy1]* ]] && byte="17" @@ -196,56 +224,68 @@ finishInstall() { fi fi - cp -f /run/version "$STORAGE/windows.ver" + local file="$STORAGE/windows.ver" + cp -f /run/version "$file" + ! setOwner "$file" && error "Failed to set the owner for \"$file\" !" if [[ "$iso" == "$STORAGE/"* ]]; then if [[ "$aborted" != [Yy1]* ]] || [ -z "$CUSTOM" ]; then base=$(basename "$iso") - echo "$base" > "$STORAGE/windows.base" + file="$STORAGE/windows.base" + writeFile "$base" "$file" fi fi if [[ "${PLATFORM,,}" == "x64" ]]; then if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + file="$STORAGE/windows.mode" + writeFile "$BOOT_MODE" "$file" if [[ "${MACHINE,,}" != "q35" ]]; then - echo "$MACHINE" > "$STORAGE/windows.old" + file="$STORAGE/windows.old" + writeFile "$MACHINE" "$file" fi else # Enable secure boot + TPM on manual installs as Win11 requires if [[ "$MANUAL" == [Yy1]* || "$aborted" == [Yy1]* ]]; then if [[ "${DETECTED,,}" == "win11"* ]]; then BOOT_MODE="windows_secure" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + file="$STORAGE/windows.mode" + writeFile "$BOOT_MODE" "$file" fi fi # Enable secure boot on multi-socket systems to workaround freeze if [ -n "$SOCKETS" ] && [[ "$SOCKETS" != "1" ]]; then BOOT_MODE="windows_secure" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + file="$STORAGE/windows.mode" + writeFile "$BOOT_MODE" "$file" fi fi fi if [ -n "${ARGS:-}" ]; then ARGUMENTS="$ARGS ${ARGUMENTS:-}" - echo "$ARGS" > "$STORAGE/windows.args" + file="$STORAGE/windows.args" + writeFile "$ARGS" "$file" fi if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio"* ]]; then - echo "$VGA" > "$STORAGE/windows.vga" + file="$STORAGE/windows.vga" + writeFile "$VGA" "$file" fi if [ -n "${USB:-}" ] && [[ "${USB:-}" != "qemu-xhci"* ]]; then - echo "$USB" > "$STORAGE/windows.usb" + file="$STORAGE/windows.usb" + writeFile "$USB" "$file" fi if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then - echo "$DISK_TYPE" > "$STORAGE/windows.type" + file="$STORAGE/windows.type" + writeFile "$DISK_TYPE" "$file" fi if [ -n "${ADAPTER:-}" ] && [[ "${ADAPTER:-}" != "virtio-net-pci" ]]; then - echo "$ADAPTER" > "$STORAGE/windows.net" + file="$STORAGE/windows.net" + writeFile "$ADAPTER" "$file" fi rm -rf "$TMP" @@ -351,7 +391,10 @@ extractESD() { fi rm -rf "$dir" - mkdir -p "$dir" + + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" && return 1 + fi size=9606127360 size_gb=$(formatBytes "$size") @@ -407,6 +450,8 @@ extractESD() { error "Adding WinPE failed ($retVal)" && return 1 } + fKill "progress.sh" + local msg="Extracting $desc setup" info "$msg..." @@ -486,14 +531,17 @@ extractImage() { info "$msg..." && html "$msg..." rm -rf "$dir" - mkdir -p "$dir" + + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" && return 1 + fi size=$(stat -c%s "$iso") size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$dir" | tail -n 1) space_gb=$(formatBytes "$space") - if ((size<100000000)); then + if (( size < 100000000 )); then error "Invalid ISO file: Size is smaller than 100 MB" && return 1 fi @@ -1177,6 +1225,8 @@ buildImage() { [[ "$error" != "$hide" ]] && echo "$error" mv -f "$out" "$BOOT" || return 1 + ! setOwner "$BOOT" && error "Failed to set the owner for \"$BOOT\" !" + return 0 } diff --git a/src/mido.sh b/src/mido.sh index cc5b251..369fc17 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -487,8 +487,11 @@ getESD() { info "$msg" && html "$msg" rm -rf "$dir" - mkdir -p "$dir" + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" && return 1 + fi + local xFile="products.xml" local eFile="esd_edition.xml" local fFile="products_filter.xml" diff --git a/src/power.sh b/src/power.sh index 8acb57b..98a6f73 100644 --- a/src/power.sh +++ b/src/power.sh @@ -105,7 +105,9 @@ finish() { if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then # Remove CD-ROM ISO after install if ready; then - touch "$STORAGE/windows.boot" + local file="$STORAGE/windows.boot" + touch "$file" + ! setOwner "$file" && error "Failed to set the owner for \"$file\" !" if [[ "$REMOVE" != [Nn]* ]]; then rm -f "$BOOT" 2>/dev/null || true fi From 544501107af0d4c4ede89ffb2e108ccbfd5f8028 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 22 Oct 2025 12:19:39 +0200 Subject: [PATCH 75/76] feat: Check if shared folder is writeable (#1531) --- src/samba.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 45228f9..7cd3210 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -46,16 +46,23 @@ addShare() { local cfg="$5" local owner="" - if ! mkdir -p "$dir"; then - error "Failed to create directory $dir." && return 1 + if [ ! -d "$dir" ]; then + if ! mkdir -p "$dir"; then + error "Failed to create shared folder ($dir)." && return 1 + fi fi if ! ls -A "$dir" >/dev/null 2>&1; then - msg="Failed to access directory $dir." + msg="No permission to access shared folder ($dir)." msg+=" If SELinux is active, you need to add the \":Z\" flag to the bind mount." error "$msg" && return 1 fi + if [ ! -w "$dir" ]; then + msg="shared folder ($dir) is not writeable!" + warn "$msg" + fi + if [ -z "$(ls -A "$dir")" ]; then if ! chmod 2777 "$dir"; then error "Failed to set permissions for directory $dir" && return 1 From 11a19f6a9d88857be72ccf0fa6215daeef5c4f4f Mon Sep 17 00:00:00 2001 From: Kroese Date: Fri, 24 Oct 2025 04:33:47 +0200 Subject: [PATCH 76/76] 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._-]/_}"