feat: Detect architecture in ISO (#101)

This commit is contained in:
Kroese 2024-05-08 23:24:28 +02:00 committed by GitHub
parent d715d79a7d
commit 9b780e5552
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 54 additions and 15 deletions

View file

@ -6,9 +6,9 @@ set -Eeuo pipefail
: "${REMOVE:=""}" : "${REMOVE:=""}"
: "${VERSION:=""}" : "${VERSION:=""}"
: "${DETECTED:=""}" : "${DETECTED:=""}"
: "${PLATFORM:="ARM64"}"
MIRRORS=2 MIRRORS=2
PLATFORM="ARM64"
parseVersion() { parseVersion() {
@ -62,10 +62,7 @@ printEdition() {
[[ "$result" == "x" ]] && echo "$desc" && return 0 [[ "$result" == "x" ]] && echo "$desc" && return 0
case "${id,,}" in case "${id,,}" in
"win10"* ) "win10"* | "win11"* )
edition="Pro"
;;
"win11"* )
edition="Pro" edition="Pro"
;; ;;
esac esac
@ -81,13 +78,26 @@ 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
"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}"
;; ;;
esac esac
@ -103,10 +113,11 @@ fromName() {
local id="" local id=""
local name="$1" local name="$1"
local arch="$2"
case "${name,,}" in case "${name,,}" in
*"windows 10"* ) id="win10${PLATFORM,,}" ;; *"windows 10"* ) id="win10${arch}" ;;
*"windows 11"* ) id="win11${PLATFORM,,}" ;; *"windows 11"* ) id="win11${arch}" ;;
esac esac
echo "$id" echo "$id"
@ -117,8 +128,9 @@ getVersion() {
local id local id
local name="$1" local name="$1"
local arch="$2"
id=$(fromName "$name") id=$(fromName "$arch")
echo "$id" echo "$id"
return 0 return 0

View file

@ -589,13 +589,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"
@ -616,7 +617,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
@ -626,14 +627,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