From 968602f9bcc8d604b7a3c776289f16a63d032b35 Mon Sep 17 00:00:00 2001 From: Kroese Date: Fri, 19 Apr 2024 00:00:17 +0200 Subject: [PATCH] feat: Improved compatibility with old CPU's (#397) --- Dockerfile | 2 +- src/entry.sh | 1 + src/install.sh | 43 +++++++++++++++++++++++++------------------ 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3e623a8..92e1652 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.22 / / +COPY --from=qemux/qemu-docker:4.23 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/src/entry.sh b/src/entry.sh index 07866ca..1286590 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -33,6 +33,7 @@ fi terminal tail -fn +0 "$QEMU_LOG" 2>/dev/null & +( sleep 6; [ ! -f "$QEMU_END" ] && info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." ) & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & wait $! || : diff --git a/src/install.sh b/src/install.sh index cdaa009..c0cc3a5 100644 --- a/src/install.sh +++ b/src/install.sh @@ -95,7 +95,9 @@ CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1) if [ -z "$CUSTOM" ] && [[ "${VERSION,,}" != "http"* ]]; then - CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "${VERSION/\/storage\//}" -printf "%f\n" | head -n 1) + FN="${VERSION/\/storage\//}" + [[ "$FN" == "."* ]] && FN="${FN:1}" + CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname "$FN" -printf "%f\n" | head -n 1) fi ESD_URL="" @@ -125,9 +127,9 @@ printVersion() { [[ "$id" == "win2008"* ]] && desc="Windows Server 2008" [[ "$id" == "win10x64-iot" ]] && desc="Windows 10 IoT" [[ "$id" == "win11x64-iot" ]] && desc="Windows 11 IoT" - [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC" + [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC" [[ "$id" == "win11x64-ltsc" ]] && desc="Windows 11 LTSC" - + echo "$desc" return 0 } @@ -234,6 +236,7 @@ skipInstall() { finishInstall() { local iso="$1" + local aborted="$2" # Mark ISO as prepared via magic byte printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none @@ -247,6 +250,10 @@ finishInstall() { rm -f "$STORAGE/windows.old" fi + if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then + [[ "${DETECTED,,}" == "win11"* ]] && TPM="Y" + fi + rm -rf "$TMP" return 0 } @@ -259,7 +266,7 @@ abortInstall() { mv -f "$iso" "$STORAGE/$BASE" fi - finishInstall "$STORAGE/$BASE" + finishInstall "$STORAGE/$BASE" "Y" return 0 } @@ -310,7 +317,7 @@ startInstall() { if [[ "$magic" == "16" ]]; then - if hasDisk || [[ "$MANUAL" = [Yy1]* ]]; then + if hasDisk || [[ "$MANUAL" == [Yy1]* ]]; then return 1 fi @@ -447,7 +454,7 @@ downloadImage() { if (( rc == 0 )); then - [ ! -s "$iso" ] && return 1 + [ ! -s "$iso" ] || [ ! -f "$iso" ] && return 1 html "Download finished successfully..." return 0 @@ -490,7 +497,7 @@ downloadImage() { fKill "progress.sh" (( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60 - [ ! -s "$iso" ] && return 1 + [ ! -s "$iso" ] || [ ! -f "$iso" ] && return 1 html "Download finished successfully..." return 0 @@ -645,7 +652,7 @@ detectImage() { if [ -n "$DETECTED" ]; then - if [ -s "/run/assets/$DETECTED.xml" ]; then + if [ -f "/run/assets/$DETECTED.xml" ]; then [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" return 0 fi @@ -664,7 +671,7 @@ detectImage() { info "Detecting Windows version from ISO image..." - if [ -s "$dir/WIN51" ] || [ -s "$dir/SETUPXP.HTM" ]; then + if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then DETECTED="winxpx86" info "Detected: Windows XP" return 0 @@ -680,9 +687,9 @@ detectImage() { fi loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) - [ ! -s "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) + [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) - if [ ! -s "$loc" ]; then + if [ ! -f "$loc" ]; then warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" return 1 @@ -710,7 +717,7 @@ detectImage() { desc=$(printVersion "$DETECTED") [ -z "$desc" ] && desc="$DETECTED" - if [ -s "/run/assets/$DETECTED.xml" ]; then + if [ -f "/run/assets/$DETECTED.xml" ]; then [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" info "Detected: $desc" else @@ -930,7 +937,7 @@ prepareImage() { if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; then - if [ -s "$dir/$ETFS" ] && [ -s "$dir/$EFISYS" ]; then + if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then return 0 fi @@ -966,7 +973,7 @@ updateImage() { local asset="/run/assets/$3" local path src loc index result - [ ! -s "$asset" ] && return 0 + [ ! -s "$asset" ] || [ ! -f "$asset" ] && return 0 path=$(find "$dir" -maxdepth 1 -type f -iname autounattend.xml | head -n 1) [ -n "$path" ] && cp "$asset" "$path" @@ -980,9 +987,9 @@ updateImage() { fi loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) - [ ! -s "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) + [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) - if [ ! -s "$loc" ]; then + if [ ! -f "$loc" ]; then warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" return 1 @@ -1091,7 +1098,7 @@ if ! startInstall; then return 0 fi -if [ ! -s "$ISO" ]; then +if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then rm -f "$ISO" if ! downloadImage "$ISO" "$VERSION"; then error "Failed to download $VERSION" @@ -1126,7 +1133,7 @@ if ! buildImage "$DIR"; then exit 65 fi -finishInstall "$STORAGE/$BASE" +finishInstall "$STORAGE/$BASE" "N" html "Successfully prepared image for installation..." return 0