mirror of
https://github.com/dockur/windows.git
synced 2026-07-28 21:53:34 +07:00
feat: Added option to prevent rebuild of the image (#1970)
This commit is contained in:
@@ -1557,49 +1557,4 @@ legacyInstall() {
|
||||
return 0
|
||||
}
|
||||
|
||||
legacyPrepare() {
|
||||
|
||||
local iso="$1"
|
||||
local dir="$2"
|
||||
local desc="$3"
|
||||
|
||||
local tmp="$TMP/boot-images"
|
||||
local image="$tmp/eltorito_img1_bios.img"
|
||||
|
||||
ETFS="boot.img"
|
||||
[ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0
|
||||
|
||||
rm -f "$dir/$ETFS" || return 1
|
||||
rm -rf "$tmp" || return 1
|
||||
|
||||
LC_ALL=C xorriso \
|
||||
-no_rc \
|
||||
-osirrox on \
|
||||
-indev "$iso" \
|
||||
-extract_boot_images "$tmp" >/dev/null 2>&1 || {
|
||||
local rc=$?
|
||||
rm -rf "$tmp" || true
|
||||
|
||||
(( rc > 128 )) && exit "$rc"
|
||||
|
||||
error "Failed to extract boot image from $desc ISO!"
|
||||
return 1
|
||||
}
|
||||
|
||||
if [ ! -s "$image" ]; then
|
||||
rm -rf "$tmp" || true
|
||||
error "Failed to locate BIOS boot image in $desc ISO!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! mv -f "$image" "$dir/$ETFS"; then
|
||||
rm -rf "$tmp" || true
|
||||
error "Failed to save boot image from $desc ISO!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
rm -rf "$tmp" || return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
return 0
|
||||
|
||||
@@ -11,6 +11,7 @@ set -Eeuo pipefail
|
||||
: "${EDITION:=""}"
|
||||
: "${MANUAL:=""}"
|
||||
: "${REMOVE:=""}"
|
||||
: "${REBUILD:="N"}"
|
||||
: "${VERSION:=""}"
|
||||
: "${COMMAND:=""}"
|
||||
: "${DETECTED:=""}"
|
||||
|
||||
@@ -951,3 +951,65 @@ EOF
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
extractBootImage() {
|
||||
|
||||
local iso="$1"
|
||||
local dir="$2"
|
||||
local desc="$3"
|
||||
|
||||
local tmp="$TMP/boot-images"
|
||||
local image="$tmp/eltorito_img1_bios.img"
|
||||
local max_size=$((32 * 1024 * 1024))
|
||||
|
||||
ETFS="boot.img"
|
||||
[ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0
|
||||
|
||||
rm -f "$dir/$ETFS" || return 1
|
||||
rm -rf "$tmp" || return 1
|
||||
|
||||
LC_ALL=C xorriso \
|
||||
-no_rc \
|
||||
-osirrox on \
|
||||
-indev "$iso" \
|
||||
-extract_boot_images "$tmp" >/dev/null 2>&1 || {
|
||||
local rc=$?
|
||||
rm -rf "$tmp" || true
|
||||
|
||||
(( rc > 128 )) && exit "$rc"
|
||||
|
||||
error "Failed to extract boot image from $desc ISO!"
|
||||
return 1
|
||||
}
|
||||
|
||||
if [ ! -s "$image" ]; then
|
||||
rm -rf "$tmp" || true
|
||||
error "Failed to locate BIOS boot image in $desc ISO!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local size
|
||||
|
||||
if ! size=$(stat -c%s "$image"); then
|
||||
rm -rf "$tmp" || true
|
||||
error "Failed to determine BIOS boot image size in $desc ISO!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if (( size > max_size )); then
|
||||
rm -rf "$tmp" || true
|
||||
error "The BIOS boot image in $desc ISO exceeds 32 MB!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! mv -f "$image" "$dir/$ETFS"; then
|
||||
rm -rf "$tmp" || true
|
||||
error "Failed to save boot image from $desc ISO!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
rm -rf "$tmp" || return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
return 0
|
||||
|
||||
+19
-11
@@ -769,26 +769,29 @@ prepareImage() {
|
||||
|
||||
desc=$(printVariant "$DETECTED" "$DETECTED")
|
||||
|
||||
# Adjust QEMU machine configuration for legacy versions
|
||||
setMachine "$DETECTED" "$iso" "$dir" "$desc" || return 1
|
||||
|
||||
disabled "$REBUILD" && return 0
|
||||
skipVersion "$DETECTED" && return 0
|
||||
|
||||
if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then
|
||||
if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then
|
||||
|
||||
[ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] &&
|
||||
[ -f "$dir/$EFISYS" ] && [ -s "$dir/$EFISYS" ] && return 0
|
||||
extractBootImage "$iso" "$dir" "$desc" && return 0
|
||||
|
||||
missing=$(basename "$dir/$EFISYS")
|
||||
if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then
|
||||
missing=$(basename "$dir/$ETFS")
|
||||
fi
|
||||
|
||||
error "Failed to locate file \"${missing,,}\" in ISO image!"
|
||||
error "Failed to extract boot image from ISO image \"${iso}\"!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
legacyPrepare "$iso" "$dir" "$desc" && return 0
|
||||
[ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] &&
|
||||
[ -f "$dir/$EFISYS" ] && [ -s "$dir/$EFISYS" ] && return 0
|
||||
|
||||
error "Failed to extract boot image from ISO image!"
|
||||
missing=$(basename "$dir/$EFISYS")
|
||||
if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then
|
||||
missing=$(basename "$dir/$ETFS")
|
||||
fi
|
||||
|
||||
error "Failed to locate file \"${missing,,}\" in ISO image!"
|
||||
return 1
|
||||
}
|
||||
|
||||
@@ -962,6 +965,11 @@ updateImage() {
|
||||
local dat="${xml//.xml/.dat}"
|
||||
local desc path src wim name info
|
||||
|
||||
if disabled "$REBUILD"; then
|
||||
info "Skipping modifications to the installation image..."
|
||||
return 1
|
||||
fi
|
||||
|
||||
skipVersion "${DETECTED,,}" && return 0
|
||||
|
||||
if [ ! -s "$asset" ] || [ ! -f "$asset" ]; then
|
||||
|
||||
Reference in New Issue
Block a user