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

feat: Detect architecture in ISO (#463)

parent b56db857
Loading
Loading
Loading
Loading
+102 −69
Original line number Diff line number Diff line
@@ -6,9 +6,9 @@ set -Eeuo pipefail
: "${REMOVE:=""}"
: "${VERSION:=""}"
: "${DETECTED:=""}"
: "${PLATFORM:="x64"}"

MIRRORS=5
PLATFORM="x64"

parseVersion() {

@@ -50,14 +50,14 @@ parseVersion() {
      VERSION="winvista${PLATFORM,,}"
      DETECTED="winvista${PLATFORM,,}-enterprise"
      ;;
    "vistau" | "winvistau" | "windowsvistau" | "windows vistau" )
    "vistu" | "winvistu" | "windowsvistu" | "windows vistu" )
      VERSION="winvista${PLATFORM,,}-ultimate"
      ;;
    "xp" | "xp32" | "winxp" | "windowsxp" | "windows xp" )
    "xp" | "xp32" | "xpx86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" )
      VERSION="winxpx86"
      ;;
    "xp64" | "winxp64" | "windowsxp64" | "windows xp 64" )
      VERSION="winxpx64"
    "xp64" | "xpx64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" )
      VERSION="winxp${PLATFORM,,}"
      ;;
    "22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022" )
      VERSION="win2022-eval"
@@ -146,75 +146,39 @@ printEdition() {
  [[ "$result" == "x" ]] && echo "$desc" && return 0

  case "${id,,}" in
    "win7${PLATFORM,,}-home"* )
      edition="Home"
      ;;
    "win7${PLATFORM,,}-starter"* )
      edition="Starter"
      ;;
    "win7${PLATFORM,,}-ultimate"* )
      edition="Ultimate"
      ;;
    "win7${PLATFORM,,}-enterprise"* )
      edition="Enterprise"
      ;;
    "win7"* )
      edition="Professional"
      ;;
    "win8${PLATFORM,,}-enterprise"* )
      edition="Enterprise"
      ;;
    "win8"* )
      edition="Pro"
      ;;
    "win10${PLATFORM,,}-iot"* )
    *"-iot" )
      edition="IoT"
      ;;
    "win10${PLATFORM,,}-ltsc"* )
    *"-ltsc" )
      edition="LTSC"
      ;;
    "win10${PLATFORM,,}-home"* )
    *"-home" )
      edition="Home"
      ;;
    "win10${PLATFORM,,}-education"* )
      edition="Education"
      ;;
    "win10${PLATFORM,,}-enterprise"* )
      edition="Enterprise"
      ;;
    "win10"* )
      edition="Pro"
    *"-starter" )
      edition="Starter"
      ;;
    "win11${PLATFORM,,}-iot"* )
      edition="IoT"
    *"-ultimate" )
      edition="Ultimate"
      ;;
    "win11${PLATFORM,,}-home"* )
      edition="Home"
    *"-enterprise" )
      edition="Enterprise"
      ;;
    "win11${PLATFORM,,}-education"* )
    *"-education" )
      edition="Education"
      ;;
    "win11${PLATFORM,,}-enterprise"* )
      edition="Enterprise"
    *"-enterprise-eval" )
      edition="Enterprise (Evaluation)"
      ;;
    "win11"* )
    "win7"* )
      edition="Professional"
      ;;
    "win8"* | "win10"* | "win11"* )
      edition="Pro"
      ;;
    "winxp"* )
      edition="Professional"
      ;;
    "winvista${PLATFORM,,}-home"* )
      edition="Home"
      ;;
    "winvista${PLATFORM,,}-starter"* )
      edition="Starter"
      ;;
    "winvista${PLATFORM,,}-ultimate"* )
      edition="Ultimate"
      ;;
    "winvista${PLATFORM,,}-enterprise"* )
      edition="Enterprise"
      ;;
    "winvista"* )
      edition="Business"
      ;;
@@ -223,7 +187,6 @@ printEdition() {
      ;;
  esac

  [[ "${id,,}" == *"-eval" ]] && edition="$edition (Evaluation)"
  [ -n "$edition" ] && result="$result $edition"

  echo "$result"
@@ -235,25 +198,38 @@ fromFile() {
  local id=""
  local desc="$1"
  local file="${1,,}"
  local arch="${PLATFORM,,}"

  case "${file/ /_}" in
    *"_x64_"* | *"_x64."*)
      arch="x64"
      ;;
    *"_x86_"* | *"_x86."*)
      arch="x86"
      ;;
    *"_arm64_"* | *"_arm64."*)
      arch="arm64"
      ;;
  esac

  case "${file/ /_}" in
    "win7"* | "win_7"* | *"windows7"* | *"windows_7"* )
      id="win7${PLATFORM,,}"
      id="win7${arch}"
      ;;
    "win8"* | "win_8"* | *"windows8"* | *"windows_8"* )
      id="win81${PLATFORM,,}"
      id="win81${arch}"
      ;;
    "win10"*| "win_10"* | *"windows10"* | *"windows_10"* )
      id="win10${PLATFORM,,}"
      id="win10${arch}"
      ;;
    "win11"* | "win_11"* | *"windows11"* | *"windows_11"* )
      id="win11${PLATFORM,,}"
      id="win11${arch}"
      ;;
    *"winxp"* | *"win_xp"* | *"windowsxp"* | *"windows_xp"* )
      id="winxpx86"
      ;;
    *"winvista"* | *"win_vista"* | *"windowsvista"* | *"windows_vista"* )
      id="winvista${PLATFORM,,}"
      id="winvista${arch}"
      ;;
    "tiny11core"* | "tiny11_core"* | "tiny_11_core"* )
      id="core11"
@@ -296,6 +272,7 @@ fromName() {

  local id=""
  local name="$1"
  local arch="$2"

  case "${name,,}" in
    *"server 2025"* ) id="win2025" ;;
@@ -304,11 +281,11 @@ fromName() {
    *"server 2016"* ) id="win2016" ;;
    *"server 2012"* ) id="win2012r2" ;;
    *"server 2008"* ) id="win2008r2" ;;
    *"windows 7"* ) id="win7${PLATFORM,,}" ;;
    *"windows 8"* ) id="win81${PLATFORM,,}" ;;
    *"windows 10"* ) id="win10${PLATFORM,,}" ;;
    *"windows 11"* ) id="win11${PLATFORM,,}" ;;
    *"windows vista"* ) id="winvista${PLATFORM,,}" ;;
    *"windows 7"* ) id="win7${arch}" ;;
    *"windows 8"* ) id="win81${arch}" ;;
    *"windows 10"* ) id="win10${arch}" ;;
    *"windows 11"* ) id="win11${arch}" ;;
    *"windows vista"* ) id="winvista${arch}" ;;
  esac

  echo "$id"
@@ -319,8 +296,9 @@ getVersion() {

  local id
  local name="$1"
  local arch="$2"

  id=$(fromName "$name")
  id=$(fromName "$name" "$arch")

  case "${id,,}" in
    "win7"* | "winvista"* )
@@ -571,11 +549,26 @@ getLink1() {
      sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1"
      url="$host/7/en_windows_7_with_sp1_${PLATFORM,,}.iso"
      ;;
    "win7x86" | "win7x86-enterprise" )
      size=2434502656
      sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
      url="$host/7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
      ;;
    "win7x86-ultimate" )
      size=2564411392
      sum="99f3369c90160816be07093dbb0ac053e0a84e52d6ed1395c92ae208ccdf67e5"
      url="$host/7/en_windows_7_with_sp1_x86.iso"
      ;;
    "winvista${PLATFORM,,}-ultimate" )
      size=3861460992
      sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
      url="$host/vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso"
      ;;
    "winvistax86-ultimate" )
      size=3243413504
      sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c"
      url="$host/vista/en_windows_vista_with_sp2_x86_dvd_342266.iso"
      ;;
    "winxpx86" )
      size=617756672
      sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46"
@@ -637,6 +630,16 @@ getLink2() {
      sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
      url="$host/Windows%207/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso"
      ;;
    "win7x86" | "win7x86enterprise" )
      size=2434502656
      sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
      url="$host/Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
      ;;
    "win7x86-ultimate" )
      size=2564476928
      sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940"
      url="$host/Windows%207/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso"
      ;;
    "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" )
      size=3205953536
      sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016"
@@ -647,6 +650,16 @@ getLink2() {
      sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
      url="$host/Windows%20Vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso"
      ;;
    "winvistax86" | "winvistax86-enterprise" )
      size=2420981760
      sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5"
      url="$host/Windows%20Vista/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso"
      ;;
    "winvistax86-ultimate" )
      size=3243413504
      sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c"
      url="$host/Windows%20Vista/en_windows_vista_with_sp2_x86_dvd_342266.iso"
      ;;
    "winxpx86" )
      size=617756672
      sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46"
@@ -791,6 +804,16 @@ getLink4() {
      sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
      url="$host/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso"
      ;;
    "win7x86" | "win7x86enterprise" )
      size=2434502656
      sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
      url="$host/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
      ;;
    "win7x86-ultimate" )
      size=2564476928
      sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940"
      url="$host/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso"
      ;;
    "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" )
      size=3205953536
      sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016"
@@ -801,6 +824,16 @@ getLink4() {
      sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
      url="$host/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso"
      ;;
    "winvistax86" | "winvistax86-enterprise" )
      size=2420981760
      sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5"
      url="$host/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso"
      ;;
    "winvistax86-ultimate" )
      size=3243413504
      sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c"
      url="$host/en_windows_vista_with_sp2_x86_dvd_342266.iso"
      ;;
  esac

  case "${ret,,}" in
+32 −5
Original line number Diff line number Diff line
@@ -626,13 +626,14 @@ selectVersion() {

  local tag="$1"
  local xml="$2"
  local platform="$3"
  local id find name prefer

  name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$xml")
  [[ "$name" == *"Operating System"* ]] && name=""
  [ -z "$name" ] && return 0

  id=$(fromName "$name")
  id=$(fromName "$name" "$platform")
  [ -z "$id" ] && warn "Unknown ${tag,,}: '$name'" && return 0

  prefer="$id-enterprise"
@@ -653,7 +654,7 @@ selectVersion() {
    echo "$prefer" && return 0
  fi

  prefer=$(getVersion "$name")
  prefer=$(getVersion "$name" "$platform")

  echo "$prefer"
  return 0
@@ -663,14 +664,40 @@ detectVersion() {

  local xml="$1"
  local id=""
  local arch=""
  local tag="ARCH"
  local platform="x64"

  id=$(selectVersion "DISPLAYNAME" "$xml")
  arch=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$xml")

  case "${arch,,}" in
    "0" )
      platform="x86"
      if [[ "${PLATFORM,,}" != "x64" ]]; then
        error "You cannot boot $platform images on a $PLATFORM cpu!" && exit 67
      fi
      ;;
    "9" )
      platform="x64"
      if [[ "${PLATFORM,,}" != "x64" ]]; then
        error "You cannot boot $platform images on a $PLATFORM cpu!" && exit 67
      fi
      ;;
    "12" )
      platform="arm64"
      if [[ "${PLATFORM,,}" != "arm64" ]]; then
        error "You cannot boot ${platform^^} images on a $PLATFORM cpu!" && exit 67
      fi
      ;;
  esac
  
  id=$(selectVersion "DISPLAYNAME" "$xml" "$platform")
  [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0

  id=$(selectVersion "PRODUCTNAME" "$xml")
  id=$(selectVersion "PRODUCTNAME" "$xml" "$platform")
  [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0

  id=$(selectVersion "NAME" "$xml")
  id=$(selectVersion "NAME" "$xml" "$platform")
  [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0

  return 0