From 6b31a9d9432379e48861037bd20b35a084173dd2 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sat, 27 Jan 2024 14:52:58 +0100 Subject: [PATCH] feat: Display Windows version (#109) --- src/install.sh | 87 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 26 deletions(-) diff --git a/src/install.sh b/src/install.sh index 1a86971..185f035 100644 --- a/src/install.sh +++ b/src/install.sh @@ -79,6 +79,25 @@ FB="falling back to manual installation!" ETFS="boot/etfsboot.com" EFISYS="efi/microsoft/boot/efisys_noprompt.bin" +printVersion() { + + local id="$1" + local desc="" + + [[ "$id" == "win7"* ]] && desc="Windows 7" + [[ "$id" == "win8"* ]] && desc="Windows 8" + [[ "$id" == "win10"* ]] && desc="Windows 10" + [[ "$id" == "win11"* ]] && desc="Windows 11" + [[ "$id" == "winvista"* ]] && desc="Windows Vista" + [[ "$id" == "win2022"* ]] && desc="Windows Server 2022" + [[ "$id" == "win2019"* ]] && desc="Windows Server 2019" + [[ "$id" == "win2016"* ]] && desc="Windows Server 2016" + [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC" + + echo "$desc" + return 0 +} + replaceXML() { local dir="$1" @@ -158,7 +177,7 @@ abortInstall() { startInstall() { - local magic + local magic desc local msg="Windows is being started, please wait..." if [ -f "$STORAGE/$CUSTOM" ]; then @@ -181,7 +200,10 @@ startInstall() { BASE="$VERSION.iso" if ! skipInstall && [ ! -f "$STORAGE/$BASE" ]; then - msg="Windows is being downloaded, please wait..." + + desc=$(printVersion "$VERSION") + [ -z "$desc" ] && desc="Windows" + msg="$desc is being downloaded, please wait..." fi else @@ -282,9 +304,15 @@ extractImage() { local iso="$1" local dir="$2" + local desc="downloaded ISO" local size size_gb space space_gb - local msg="Extracting downloaded ISO image..." + if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then + desc=$(printVersion "$VERSION") + [ -z "$desc" ] && desc="downloaded ISO" + fi + + local msg="Extracting $desc image..." [ -n "$CUSTOM" ] && msg="Extracting local ISO image..." info "$msg" && html "$msg" @@ -311,14 +339,14 @@ extractImage() { return 0 } -findVersion() { +getVersion() { local name="$1" local detected="" - [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" - [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" [[ "${name,,}" == *"windows 7"* ]] && detected="win7x64" + [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64" + [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64" [[ "${name,,}" == *"windows vista"* ]] && detected="winvistax64" [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval" [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval" @@ -349,18 +377,24 @@ detectImage() { fi if [ -n "$DETECTED" ]; then + if [ -f "/run/assets/$DETECTED.xml" ]; then [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" return 0 fi - warn "image type is '$DETECTED', but no matching XML file exists!" + + local dsc + dsc=$(printVersion "$DETECTED") + [ -z "$dsc" ] && dsc="$DETECTED" + + warn "got $desc, but no matching XML file exists, $FB." return 0 fi info "Detecting Windows version from ISO image..." local dir="$1" - local tag result name name2 + local tag result name name2 desc local loc="$dir/sources/install.wim" [ ! -f "$loc" ] && loc="$dir/sources/install.esd" @@ -373,35 +407,33 @@ detectImage() { tag="DISPLAYNAME" result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") - DETECTED=$(findVersion "$name") + DETECTED=$(getVersion "$name") if [ -z "$DETECTED" ]; then tag="PRODUCTNAME" name2=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result") [ -z "$name" ] && name="$name2" - DETECTED=$(findVersion "$name2") + DETECTED=$(getVersion "$name2") fi - if [ -n "$DETECTED" ]; then + if [ -z "$DETECTED" ]; then + warn "failed to determine Windows version from string '$name', $FB" + return 0 + fi - if [ -f "/run/assets/$DETECTED.xml" ]; then - [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" - info "Detected image of type: '$DETECTED'" - else - warn "detected image of type '$DETECTED', but no matching XML file exists, $FB." - fi + desc=$(printVersion "$DETECTED") + [ -z "$desc" ] && desc="$DETECTED" + if [ -f "/run/assets/$DETECTED.xml" ]; then + [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" + info "Detected: $desc" else - - if [ -z "$name" ]; then - warn "failed to determine Windows version from image, $FB" - else - warn "failed to determine Windows version from string '$name', $FB" - fi - + warn "detected $desc, but no matching XML file exists, $FB." fi + + return 0 } prepareImage() { @@ -482,13 +514,16 @@ buildImage() { local cat="BOOT.CAT" local label="${BASE%.*}" local log="/run/shm/iso.log" - local size size_gb space space_gb + local size size_gb space space_gb desc label="${label::30}" local out="$TMP/$label.tmp" rm -f "$out" - local msg="Updating ISO image..." + desc=$(printVersion "$DETECTED") + [ -z "$desc" ] && desc="ISO" + + local msg="Building $desc image..." info "$msg" && html "$msg" size=$(du -h -b --max-depth=0 "$dir" | cut -f1)