feat: Detect architecture in ISO (#463)

This commit is contained in:
Kroese 2024-05-07 02:11:59 +02:00 committed by GitHub
parent b56db85787
commit f99032312c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 135 additions and 75 deletions

View File

@ -6,9 +6,9 @@ set -Eeuo pipefail
: "${REMOVE:=""}" : "${REMOVE:=""}"
: "${VERSION:=""}" : "${VERSION:=""}"
: "${DETECTED:=""}" : "${DETECTED:=""}"
: "${PLATFORM:="x64"}"
MIRRORS=5 MIRRORS=5
PLATFORM="x64"
parseVersion() { parseVersion() {
@ -50,14 +50,14 @@ parseVersion() {
VERSION="winvista${PLATFORM,,}" VERSION="winvista${PLATFORM,,}"
DETECTED="winvista${PLATFORM,,}-enterprise" DETECTED="winvista${PLATFORM,,}-enterprise"
;; ;;
"vistau" | "winvistau" | "windowsvistau" | "windows vistau" ) "vistu" | "winvistu" | "windowsvistu" | "windows vistu" )
VERSION="winvista${PLATFORM,,}-ultimate" VERSION="winvista${PLATFORM,,}-ultimate"
;; ;;
"xp" | "xp32" | "winxp" | "windowsxp" | "windows xp" ) "xp" | "xp32" | "xpx86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" )
VERSION="winxpx86" VERSION="winxpx86"
;; ;;
"xp64" | "winxp64" | "windowsxp64" | "windows xp 64" ) "xp64" | "xpx64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" )
VERSION="winxpx64" VERSION="winxp${PLATFORM,,}"
;; ;;
"22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022" ) "22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022" )
VERSION="win2022-eval" VERSION="win2022-eval"
@ -146,75 +146,39 @@ printEdition() {
[[ "$result" == "x" ]] && echo "$desc" && return 0 [[ "$result" == "x" ]] && echo "$desc" && return 0
case "${id,,}" in case "${id,,}" in
"win7${PLATFORM,,}-home"* ) *"-iot" )
edition="IoT"
;;
*"-ltsc" )
edition="LTSC"
;;
*"-home" )
edition="Home" edition="Home"
;; ;;
"win7${PLATFORM,,}-starter"* ) *"-starter" )
edition="Starter" edition="Starter"
;; ;;
"win7${PLATFORM,,}-ultimate"* ) *"-ultimate" )
edition="Ultimate" edition="Ultimate"
;; ;;
"win7${PLATFORM,,}-enterprise"* ) *"-enterprise" )
edition="Enterprise" edition="Enterprise"
;; ;;
*"-education" )
edition="Education"
;;
*"-enterprise-eval" )
edition="Enterprise (Evaluation)"
;;
"win7"* ) "win7"* )
edition="Professional" edition="Professional"
;; ;;
"win8${PLATFORM,,}-enterprise"* ) "win8"* | "win10"* | "win11"* )
edition="Enterprise"
;;
"win8"* )
edition="Pro"
;;
"win10${PLATFORM,,}-iot"* )
edition="IoT"
;;
"win10${PLATFORM,,}-ltsc"* )
edition="LTSC"
;;
"win10${PLATFORM,,}-home"* )
edition="Home"
;;
"win10${PLATFORM,,}-education"* )
edition="Education"
;;
"win10${PLATFORM,,}-enterprise"* )
edition="Enterprise"
;;
"win10"* )
edition="Pro"
;;
"win11${PLATFORM,,}-iot"* )
edition="IoT"
;;
"win11${PLATFORM,,}-home"* )
edition="Home"
;;
"win11${PLATFORM,,}-education"* )
edition="Education"
;;
"win11${PLATFORM,,}-enterprise"* )
edition="Enterprise"
;;
"win11"* )
edition="Pro" edition="Pro"
;; ;;
"winxp"* ) "winxp"* )
edition="Professional" edition="Professional"
;; ;;
"winvista${PLATFORM,,}-home"* )
edition="Home"
;;
"winvista${PLATFORM,,}-starter"* )
edition="Starter"
;;
"winvista${PLATFORM,,}-ultimate"* )
edition="Ultimate"
;;
"winvista${PLATFORM,,}-enterprise"* )
edition="Enterprise"
;;
"winvista"* ) "winvista"* )
edition="Business" edition="Business"
;; ;;
@ -223,7 +187,6 @@ printEdition() {
;; ;;
esac esac
[[ "${id,,}" == *"-eval" ]] && edition="$edition (Evaluation)"
[ -n "$edition" ] && result="$result $edition" [ -n "$edition" ] && result="$result $edition"
echo "$result" echo "$result"
@ -235,25 +198,38 @@ fromFile() {
local id="" local id=""
local desc="$1" local desc="$1"
local file="${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 case "${file/ /_}" in
"win7"* | "win_7"* | *"windows7"* | *"windows_7"* ) "win7"* | "win_7"* | *"windows7"* | *"windows_7"* )
id="win7${PLATFORM,,}" id="win7${arch}"
;; ;;
"win8"* | "win_8"* | *"windows8"* | *"windows_8"* ) "win8"* | "win_8"* | *"windows8"* | *"windows_8"* )
id="win81${PLATFORM,,}" id="win81${arch}"
;; ;;
"win10"*| "win_10"* | *"windows10"* | *"windows_10"* ) "win10"*| "win_10"* | *"windows10"* | *"windows_10"* )
id="win10${PLATFORM,,}" id="win10${arch}"
;; ;;
"win11"* | "win_11"* | *"windows11"* | *"windows_11"* ) "win11"* | "win_11"* | *"windows11"* | *"windows_11"* )
id="win11${PLATFORM,,}" id="win11${arch}"
;; ;;
*"winxp"* | *"win_xp"* | *"windowsxp"* | *"windows_xp"* ) *"winxp"* | *"win_xp"* | *"windowsxp"* | *"windows_xp"* )
id="winxpx86" id="winxpx86"
;; ;;
*"winvista"* | *"win_vista"* | *"windowsvista"* | *"windows_vista"* ) *"winvista"* | *"win_vista"* | *"windowsvista"* | *"windows_vista"* )
id="winvista${PLATFORM,,}" id="winvista${arch}"
;; ;;
"tiny11core"* | "tiny11_core"* | "tiny_11_core"* ) "tiny11core"* | "tiny11_core"* | "tiny_11_core"* )
id="core11" id="core11"
@ -296,6 +272,7 @@ fromName() {
local id="" local id=""
local name="$1" local name="$1"
local arch="$2"
case "${name,,}" in case "${name,,}" in
*"server 2025"* ) id="win2025" ;; *"server 2025"* ) id="win2025" ;;
@ -304,11 +281,11 @@ fromName() {
*"server 2016"* ) id="win2016" ;; *"server 2016"* ) id="win2016" ;;
*"server 2012"* ) id="win2012r2" ;; *"server 2012"* ) id="win2012r2" ;;
*"server 2008"* ) id="win2008r2" ;; *"server 2008"* ) id="win2008r2" ;;
*"windows 7"* ) id="win7${PLATFORM,,}" ;; *"windows 7"* ) id="win7${arch}" ;;
*"windows 8"* ) id="win81${PLATFORM,,}" ;; *"windows 8"* ) id="win81${arch}" ;;
*"windows 10"* ) id="win10${PLATFORM,,}" ;; *"windows 10"* ) id="win10${arch}" ;;
*"windows 11"* ) id="win11${PLATFORM,,}" ;; *"windows 11"* ) id="win11${arch}" ;;
*"windows vista"* ) id="winvista${PLATFORM,,}" ;; *"windows vista"* ) id="winvista${arch}" ;;
esac esac
echo "$id" echo "$id"
@ -319,8 +296,9 @@ getVersion() {
local id local id
local name="$1" local name="$1"
local arch="$2"
id=$(fromName "$name") id=$(fromName "$name" "$arch")
case "${id,,}" in case "${id,,}" in
"win7"* | "winvista"* ) "win7"* | "winvista"* )
@ -571,11 +549,26 @@ getLink1() {
sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1" sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1"
url="$host/7/en_windows_7_with_sp1_${PLATFORM,,}.iso" 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" ) "winvista${PLATFORM,,}-ultimate" )
size=3861460992 size=3861460992
sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
url="$host/vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" 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" ) "winxpx86" )
size=617756672 size=617756672
sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46"
@ -637,6 +630,16 @@ getLink2() {
sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
url="$host/Windows%207/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" 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" ) "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" )
size=3205953536 size=3205953536
sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016"
@ -647,6 +650,16 @@ getLink2() {
sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
url="$host/Windows%20Vista/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" 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" ) "winxpx86" )
size=617756672 size=617756672
sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46"
@ -791,6 +804,16 @@ getLink4() {
sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
url="$host/en_windows_7_ultimate_with_sp1_${PLATFORM,,}_dvd_u_677332.iso" 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" ) "winvista${PLATFORM,,}" | "winvista${PLATFORM,,}-enterprise" )
size=3205953536 size=3205953536
sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016"
@ -801,6 +824,16 @@ getLink4() {
sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
url="$host/en_windows_vista_sp2_${PLATFORM,,}_dvd_342267.iso" 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 esac
case "${ret,,}" in case "${ret,,}" in

View File

@ -626,13 +626,14 @@ selectVersion() {
local tag="$1" local tag="$1"
local xml="$2" local xml="$2"
local platform="$3"
local id find name prefer local id find name prefer
name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$xml") name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$xml")
[[ "$name" == *"Operating System"* ]] && name="" [[ "$name" == *"Operating System"* ]] && name=""
[ -z "$name" ] && return 0 [ -z "$name" ] && return 0
id=$(fromName "$name") id=$(fromName "$name" "$platform")
[ -z "$id" ] && warn "Unknown ${tag,,}: '$name'" && return 0 [ -z "$id" ] && warn "Unknown ${tag,,}: '$name'" && return 0
prefer="$id-enterprise" prefer="$id-enterprise"
@ -653,7 +654,7 @@ selectVersion() {
echo "$prefer" && return 0 echo "$prefer" && return 0
fi fi
prefer=$(getVersion "$name") prefer=$(getVersion "$name" "$platform")
echo "$prefer" echo "$prefer"
return 0 return 0
@ -663,14 +664,40 @@ detectVersion() {
local xml="$1" local xml="$1"
local id="" 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 [ -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 [ -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 [ -n "$id" ] && [[ "${id,,}" != *"unknown"* ]] && echo "$id" && return 0
return 0 return 0