feat: Use q35 machine type for Windows XP (#823)

This commit is contained in:
Kroese 2024-10-20 16:20:12 +02:00 committed by GitHub
parent 80c5ba2231
commit bc614fd233
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 30 additions and 29 deletions

View File

@ -1,5 +1,5 @@
FROM scratch AS build-amd64 FROM scratch AS build-amd64
COPY --from=qemux/qemu-docker:6.05 / / COPY --from=qemux/qemu-docker:6.06 / /
ARG VERSION_ARG="0.0" ARG VERSION_ARG="0.0"
ARG DEBCONF_NOWARNINGS="yes" ARG DEBCONF_NOWARNINGS="yes"

View File

@ -2106,39 +2106,37 @@ setMachine() {
local dir="$3" local dir="$3"
local desc="$4" local desc="$4"
case "${id,,}" in
"win9"* | "win2k"* )
MACHINE="pc-i440fx-2.4" ;;
"winxp"* | "win2003"* | "winvistax86"* | "win7x86"* )
MACHINE="pc-q35-2.10" ;;
esac
case "${id,,}" in
"win9"* | "win2k"* | "winxp"* | "win2003"* )
BOOT_MODE="windows_legacy" ;;
"winvista"* | "win7"* | "win2008"* )
BOOT_MODE="windows_legacy" ;;
esac
case "${id,,}" in case "${id,,}" in
"win9"* ) "win9"* )
DISK_TYPE="auto"
ETFS="[BOOT]/Boot-1.44M.img" ;; ETFS="[BOOT]/Boot-1.44M.img" ;;
"win2k"* ) "win2k"* )
DISK_TYPE="auto"
ETFS="[BOOT]/Boot-NoEmul.img" ;; ETFS="[BOOT]/Boot-NoEmul.img" ;;
"winxp"* ) "winxp"* )
DISK_TYPE="blk"
if ! prepareXP "$iso" "$dir" "$desc"; then if ! prepareXP "$iso" "$dir" "$desc"; then
error "Failed to prepare $desc ISO!" && return 1 error "Failed to prepare $desc ISO!" && return 1
fi ;; fi ;;
"win2003"* ) "win2003"* )
DISK_TYPE="blk"
if ! prepare2k3 "$iso" "$dir" "$desc"; then if ! prepare2k3 "$iso" "$dir" "$desc"; then
error "Failed to prepare $desc ISO!" && return 1 error "Failed to prepare $desc ISO!" && return 1
fi ;; fi ;;
esac esac
case "${id,,}" in
"win9"* | "win2k"* )
USB="None"
DISK_TYPE="auto"
MACHINE="pc-i440fx-2.4"
BOOT_MODE="windows_legacy" ;;
"winxp"* | "win2003"* )
USB="None"
DISK_TYPE="blk"
BOOT_MODE="windows_legacy"
# Prevent bluescreen if 64 bit PCI hole size is >2G.
ARGS="-global q35-pcihost.x-pci-hole64-fix=false" ;;
"winvista"* | "win7"* | "win2008"* )
BOOT_MODE="windows_legacy" ;;
esac
return 0 return 0
} }

View File

@ -120,6 +120,7 @@ finishInstall() {
rm -f "$STORAGE/windows.old" rm -f "$STORAGE/windows.old"
rm -f "$STORAGE/windows.vga" rm -f "$STORAGE/windows.vga"
rm -f "$STORAGE/windows.args"
rm -f "$STORAGE/windows.base" rm -f "$STORAGE/windows.base"
rm -f "$STORAGE/windows.boot" rm -f "$STORAGE/windows.boot"
rm -f "$STORAGE/windows.mode" rm -f "$STORAGE/windows.mode"
@ -156,6 +157,11 @@ finishInstall() {
fi fi
fi fi
if [ -n "${ARGS:-}" ]; then
ARGUMENTS="$ARGS ${ARGUMENTS:-}"
echo "$ARGS" > "$STORAGE/windows.args"
fi
if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then
echo "$DISK_TYPE" > "$STORAGE/windows.type" echo "$DISK_TYPE" > "$STORAGE/windows.type"
fi fi
@ -965,6 +971,11 @@ bootWindows() {
rm -rf "$TMP" rm -rf "$TMP"
if [ -f "$STORAGE/windows.args" ]; then
ARGS=$(<"$STORAGE/windows.args")
ARGUMENTS="$ARGS ${ARGUMENTS:-}"
fi
if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then
[ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type") [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type")
fi fi

View File

@ -94,16 +94,8 @@ if ! smbd; then
smbd -i --debug-stdout || true smbd -i --debug-stdout || true
fi fi
legacy="" if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then
# Enable NetBIOS on Windows 7 and lower
if [ -f "$STORAGE/windows.old" ]; then
MT=$(<"$STORAGE/windows.old")
[[ "${MT,,}" == "pc-q35-2"* ]] && legacy="y"
[[ "${MT,,}" == "pc-i440fx-2"* ]] && legacy="y"
fi
if [ -n "$legacy" ]; then
# Enable NetBIOS on Windows XP and lower
if ! nmbd; then if ! nmbd; then
error "NetBIOS daemon failed to start!" error "NetBIOS daemon failed to start!"
nmbd -i --debug-stdout || true nmbd -i --debug-stdout || true