feat: Improved compatibility with old CPU's (#397)

This commit is contained in:
Kroese 2024-04-19 00:00:17 +02:00 committed by GitHub
parent 4f575ebff2
commit 968602f9bc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 27 additions and 19 deletions

View File

@ -1,5 +1,5 @@
FROM scratch FROM scratch
COPY --from=qemux/qemu-docker:4.22 / / COPY --from=qemux/qemu-docker:4.23 / /
ARG DEBCONF_NOWARNINGS "yes" ARG DEBCONF_NOWARNINGS "yes"
ARG DEBIAN_FRONTEND "noninteractive" ARG DEBIAN_FRONTEND "noninteractive"

View File

@ -33,6 +33,7 @@ fi
terminal terminal
tail -fn +0 "$QEMU_LOG" 2>/dev/null & 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" & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" &
wait $! || : wait $! || :

View File

@ -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) [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1)
if [ -z "$CUSTOM" ] && [[ "${VERSION,,}" != "http"* ]]; then 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 fi
ESD_URL="" ESD_URL=""
@ -125,9 +127,9 @@ printVersion() {
[[ "$id" == "win2008"* ]] && desc="Windows Server 2008" [[ "$id" == "win2008"* ]] && desc="Windows Server 2008"
[[ "$id" == "win10x64-iot" ]] && desc="Windows 10 IoT" [[ "$id" == "win10x64-iot" ]] && desc="Windows 10 IoT"
[[ "$id" == "win11x64-iot" ]] && desc="Windows 11 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" [[ "$id" == "win11x64-ltsc" ]] && desc="Windows 11 LTSC"
echo "$desc" echo "$desc"
return 0 return 0
} }
@ -234,6 +236,7 @@ skipInstall() {
finishInstall() { finishInstall() {
local iso="$1" local iso="$1"
local aborted="$2"
# Mark ISO as prepared via magic byte # Mark ISO as prepared via magic byte
printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none
@ -247,6 +250,10 @@ finishInstall() {
rm -f "$STORAGE/windows.old" rm -f "$STORAGE/windows.old"
fi fi
if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then
[[ "${DETECTED,,}" == "win11"* ]] && TPM="Y"
fi
rm -rf "$TMP" rm -rf "$TMP"
return 0 return 0
} }
@ -259,7 +266,7 @@ abortInstall() {
mv -f "$iso" "$STORAGE/$BASE" mv -f "$iso" "$STORAGE/$BASE"
fi fi
finishInstall "$STORAGE/$BASE" finishInstall "$STORAGE/$BASE" "Y"
return 0 return 0
} }
@ -310,7 +317,7 @@ startInstall() {
if [[ "$magic" == "16" ]]; then if [[ "$magic" == "16" ]]; then
if hasDisk || [[ "$MANUAL" = [Yy1]* ]]; then if hasDisk || [[ "$MANUAL" == [Yy1]* ]]; then
return 1 return 1
fi fi
@ -447,7 +454,7 @@ downloadImage() {
if (( rc == 0 )); then if (( rc == 0 )); then
[ ! -s "$iso" ] && return 1 [ ! -s "$iso" ] || [ ! -f "$iso" ] && return 1
html "Download finished successfully..." html "Download finished successfully..."
return 0 return 0
@ -490,7 +497,7 @@ downloadImage() {
fKill "progress.sh" fKill "progress.sh"
(( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60 (( 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..." html "Download finished successfully..."
return 0 return 0
@ -645,7 +652,7 @@ detectImage() {
if [ -n "$DETECTED" ]; then if [ -n "$DETECTED" ]; then
if [ -s "/run/assets/$DETECTED.xml" ]; then if [ -f "/run/assets/$DETECTED.xml" ]; then
[[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml"
return 0 return 0
fi fi
@ -664,7 +671,7 @@ detectImage() {
info "Detecting Windows version from ISO image..." 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" DETECTED="winxpx86"
info "Detected: Windows XP" info "Detected: Windows XP"
return 0 return 0
@ -680,9 +687,9 @@ detectImage() {
fi fi
loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1)
[ ! -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" warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB"
BOOT_MODE="windows_legacy" BOOT_MODE="windows_legacy"
return 1 return 1
@ -710,7 +717,7 @@ detectImage() {
desc=$(printVersion "$DETECTED") desc=$(printVersion "$DETECTED")
[ -z "$desc" ] && desc="$DETECTED" [ -z "$desc" ] && desc="$DETECTED"
if [ -s "/run/assets/$DETECTED.xml" ]; then if [ -f "/run/assets/$DETECTED.xml" ]; then
[[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml"
info "Detected: $desc" info "Detected: $desc"
else else
@ -930,7 +937,7 @@ prepareImage() {
if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then
if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; 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 return 0
fi fi
@ -966,7 +973,7 @@ updateImage() {
local asset="/run/assets/$3" local asset="/run/assets/$3"
local path src loc index result 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) path=$(find "$dir" -maxdepth 1 -type f -iname autounattend.xml | head -n 1)
[ -n "$path" ] && cp "$asset" "$path" [ -n "$path" ] && cp "$asset" "$path"
@ -980,9 +987,9 @@ updateImage() {
fi fi
loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1)
[ ! -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" warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB"
BOOT_MODE="windows_legacy" BOOT_MODE="windows_legacy"
return 1 return 1
@ -1091,7 +1098,7 @@ if ! startInstall; then
return 0 return 0
fi fi
if [ ! -s "$ISO" ]; then if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then
rm -f "$ISO" rm -f "$ISO"
if ! downloadImage "$ISO" "$VERSION"; then if ! downloadImage "$ISO" "$VERSION"; then
error "Failed to download $VERSION" error "Failed to download $VERSION"
@ -1126,7 +1133,7 @@ if ! buildImage "$DIR"; then
exit 65 exit 65
fi fi
finishInstall "$STORAGE/$BASE" finishInstall "$STORAGE/$BASE" "N"
html "Successfully prepared image for installation..." html "Successfully prepared image for installation..."
return 0 return 0