Unverified Commit bc614fd2 authored by Kroese's avatar Kroese Committed by GitHub
Browse files

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

parent 80c5ba22
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
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 DEBCONF_NOWARNINGS="yes"
+16 −18
Original line number Diff line number Diff line
@@ -2106,39 +2106,37 @@ setMachine() {
  local dir="$3"
  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
    "win9"* )
      DISK_TYPE="auto"
      ETFS="[BOOT]/Boot-1.44M.img" ;;
    "win2k"* )
      DISK_TYPE="auto"
      ETFS="[BOOT]/Boot-NoEmul.img" ;;
    "winxp"* )
      DISK_TYPE="blk"
      if ! prepareXP "$iso" "$dir" "$desc"; then
        error "Failed to prepare $desc ISO!" && return 1
      fi ;;
    "win2003"* )
      DISK_TYPE="blk"
      if ! prepare2k3 "$iso" "$dir" "$desc"; then
        error "Failed to prepare $desc ISO!" && return 1
      fi ;;
  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
}

+11 −0
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ finishInstall() {

  rm -f "$STORAGE/windows.old"
  rm -f "$STORAGE/windows.vga"
  rm -f "$STORAGE/windows.args"
  rm -f "$STORAGE/windows.base"
  rm -f "$STORAGE/windows.boot"
  rm -f "$STORAGE/windows.mode"
@@ -156,6 +157,11 @@ finishInstall() {
    fi
  fi

  if [ -n "${ARGS:-}" ]; then
    ARGUMENTS="$ARGS ${ARGUMENTS:-}"
    echo "$ARGS" > "$STORAGE/windows.args"
  fi

  if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then
    echo "$DISK_TYPE" > "$STORAGE/windows.type"
  fi
@@ -965,6 +971,11 @@ bootWindows() {

  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
    [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type")
  fi
+2 −10
Original line number Diff line number Diff line
@@ -94,16 +94,8 @@ if ! smbd; then
  smbd -i --debug-stdout || true
fi

legacy=""

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 [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then
  # Enable NetBIOS on Windows 7 and lower
  if ! nmbd; then
    error "NetBIOS daemon failed to start!"
    nmbd -i --debug-stdout || true