mirror of
https://github.com/dockur/windows.git
synced 2024-11-15 01:34:41 +00:00
fix: Refactor code for legacy machines (#548)
This commit is contained in:
parent
beaeddac0b
commit
4ed3437983
164
src/define.sh
164
src/define.sh
@ -1977,78 +1977,6 @@ migrateFiles() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
skipVersion() {
|
|
||||||
|
|
||||||
local version="$1"
|
|
||||||
|
|
||||||
case "${version,,}" in
|
|
||||||
"win2003"* | "win2k"* | "winxp"* | "win9"* )
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
detectLegacy() {
|
|
||||||
|
|
||||||
local dir="$1"
|
|
||||||
local find find2 desc
|
|
||||||
|
|
||||||
find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1)
|
|
||||||
|
|
||||||
if [ -n "$find" ]; then
|
|
||||||
DETECTED="win95"
|
|
||||||
desc=$(printEdition "$DETECTED" "Windows 95")
|
|
||||||
info "Detected: $desc" && return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1)
|
|
||||||
|
|
||||||
if [ -n "$find" ]; then
|
|
||||||
DETECTED="win98"
|
|
||||||
desc=$(printEdition "$DETECTED" "Windows 98")
|
|
||||||
info "Detected: $desc" && return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1)
|
|
||||||
|
|
||||||
if [ -n "$find" ]; then
|
|
||||||
DETECTED="win9x"
|
|
||||||
desc=$(printEdition "$DETECTED" "Windows ME")
|
|
||||||
info "Detected: $desc" && return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1)
|
|
||||||
find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1)
|
|
||||||
|
|
||||||
if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then
|
|
||||||
[ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86"
|
|
||||||
desc=$(printEdition "$DETECTED" "Windows XP")
|
|
||||||
info "Detected: $desc" && return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "$dir/CDROM_NT.5" ]; then
|
|
||||||
DETECTED="win2k"
|
|
||||||
desc=$(printEdition "$DETECTED" "Windows 2000")
|
|
||||||
info "Detected: $desc" && return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then
|
|
||||||
DETECTED="win2003r2"
|
|
||||||
desc=$(printEdition "$DETECTED" "Windows Server 2003")
|
|
||||||
info "Detected: $desc" && return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then
|
|
||||||
DETECTED="win2003r2"
|
|
||||||
desc=$(printEdition "$DETECTED" "Windows Server 2003")
|
|
||||||
info "Detected: $desc" && return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
prepareInstall() {
|
prepareInstall() {
|
||||||
|
|
||||||
local dir="$2"
|
local dir="$2"
|
||||||
@ -2363,28 +2291,96 @@ prepareLegacy() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
prepare9x() {
|
detectLegacy() {
|
||||||
|
|
||||||
local dir="$2"
|
local dir="$1"
|
||||||
local desc="$3"
|
local find find2
|
||||||
|
|
||||||
ETFS="[BOOT]/Boot-1.44M.img"
|
find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1)
|
||||||
[ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0
|
[ -n "$find" ] && DETECTED="win95" && return 0
|
||||||
|
|
||||||
|
find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1)
|
||||||
|
[ -n "$find" ] && DETECTED="win98" && return 0
|
||||||
|
|
||||||
|
find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1)
|
||||||
|
[ -n "$find" ] && DETECTED="win9x" && return 0
|
||||||
|
|
||||||
|
find=$(find "$dir" -maxdepth 1 -type f -iname cdrom_nt.5 | head -n 1)
|
||||||
|
[ -n "$find" ] && DETECTED="win2k" && return 0
|
||||||
|
|
||||||
|
find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1)
|
||||||
|
find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1)
|
||||||
|
|
||||||
|
if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then
|
||||||
|
[ -d "$dir/AMD64" ] && DETECTED="winxpx64" && return 0
|
||||||
|
DETECTED="winxpx86" && return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then
|
||||||
|
DETECTED="win2003r2" && return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then
|
||||||
|
DETECTED="win2003r2" && return 0
|
||||||
|
fi
|
||||||
|
|
||||||
error "Failed to locate file \"$ETFS\" in $desc ISO image!"
|
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
prepare2k() {
|
skipVersion() {
|
||||||
|
|
||||||
local dir="$2"
|
local id="$1"
|
||||||
local desc="$3"
|
|
||||||
|
|
||||||
ETFS="[BOOT]/Boot-NoEmul.img"
|
case "${id,,}" in
|
||||||
[ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0
|
"win9"* | "winxp"* | "win2k"* | "win2003"* )
|
||||||
|
return 0 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
error "Failed to locate file \"$ETFS\" in $desc ISO image!"
|
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setMachine() {
|
||||||
|
|
||||||
|
local id="$1"
|
||||||
|
local iso="$2"
|
||||||
|
local dir="$3"
|
||||||
|
local desc="$4"
|
||||||
|
|
||||||
|
case "${id,,}" in
|
||||||
|
"win9"* | "win2k"* )
|
||||||
|
MACHINE="pc-i440fx-2.4" ;;
|
||||||
|
"winxp"* | "win2003"* | "winvistax86"* | "win7x86"* )
|
||||||
|
MACHINE="pc-q35-2.10" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "${id,,}" in
|
||||||
|
"win9"* | "win2k"* | "winxp"* | "win2003"* )
|
||||||
|
HV="N"
|
||||||
|
BOOT_MODE="windows_legacy" ;;
|
||||||
|
"winvista"* | "win7"* | "win2008"* )
|
||||||
|
BOOT_MODE="windows_legacy" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "${id,,}" in
|
||||||
|
"win9"* )
|
||||||
|
DISK_TYPE="auto"
|
||||||
|
ETFS="[BOOT]/Boot-1.44M.img" ;;
|
||||||
|
"win2k"* )
|
||||||
|
DISK_TYPE="auto"
|
||||||
|
ETFS="[BOOT]/Boot-NoEmul.img" ;;
|
||||||
|
"winxp"* )
|
||||||
|
DISK_TYPE="blk"
|
||||||
|
if ! prepareXP "$iso" "$dir" "$desc"; then
|
||||||
|
error "Failed to prepare $desc ISO!" && return 1
|
||||||
|
fi ;;
|
||||||
|
"win2003"* )
|
||||||
|
DISK_TYPE="blk"
|
||||||
|
if ! prepare2k3 "$iso" "$dir" "$desc"; then
|
||||||
|
error "Failed to prepare $desc ISO!" && return 1
|
||||||
|
fi ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
@ -515,7 +515,12 @@ detectImage() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
info "Detecting version from ISO image..."
|
info "Detecting version from ISO image..."
|
||||||
detectLegacy "$dir" && return 0
|
|
||||||
|
if detectLegacy "$dir"; then
|
||||||
|
desc=$(printEdition "$DETECTED" "$DETECTED")
|
||||||
|
info "Detected: $desc"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
local src wim info
|
local src wim info
|
||||||
src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1)
|
src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1)
|
||||||
@ -579,39 +584,8 @@ prepareImage() {
|
|||||||
|
|
||||||
desc=$(printVersion "$DETECTED" "$DETECTED")
|
desc=$(printVersion "$DETECTED" "$DETECTED")
|
||||||
|
|
||||||
case "${DETECTED,,}" in
|
! setMachine "$DETECTED" "$iso" "$dir" "$desc" && return 1
|
||||||
"win9"* | "win2k"* )
|
skipVersion "$DETECTED" && return 0
|
||||||
MACHINE="pc-i440fx-2.4" ;;
|
|
||||||
"winvistax86"* | "win7x86"* | "winxp"* | "win2003"* )
|
|
||||||
MACHINE="pc-q35-2.10" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "${DETECTED,,}" in
|
|
||||||
"win9"* | "win2k"* | "winxp"* | "win2003"* )
|
|
||||||
HV="N"
|
|
||||||
BOOT_MODE="windows_legacy" ;;
|
|
||||||
"winvista"* | "win7"* | "win2008"* )
|
|
||||||
BOOT_MODE="windows_legacy" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "${DETECTED,,}" in
|
|
||||||
"win9"* )
|
|
||||||
DISK_TYPE="auto"
|
|
||||||
prepare9x "$iso" "$dir" "$desc" && return 0
|
|
||||||
error "Failed to prepare $desc ISO!" && return 1 ;;
|
|
||||||
"win2k"* )
|
|
||||||
DISK_TYPE="auto"
|
|
||||||
prepare2k "$iso" "$dir" "$desc" && return 0
|
|
||||||
error "Failed to prepare $desc ISO!" && return 1 ;;
|
|
||||||
"winxp"* )
|
|
||||||
DISK_TYPE="blk"
|
|
||||||
prepareXP "$iso" "$dir" "$desc" && return 0
|
|
||||||
error "Failed to prepare $desc ISO!" && return 1 ;;
|
|
||||||
"win2003"* )
|
|
||||||
DISK_TYPE="blk"
|
|
||||||
prepare2k3 "$iso" "$dir" "$desc" && return 0
|
|
||||||
error "Failed to prepare $desc ISO!" && return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then
|
if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then
|
||||||
|
|
||||||
@ -620,13 +594,13 @@ prepareImage() {
|
|||||||
missing=$(basename "$dir/$EFISYS")
|
missing=$(basename "$dir/$EFISYS")
|
||||||
[ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS")
|
[ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS")
|
||||||
|
|
||||||
error "Failed to locate file \"${missing,,}\" in $desc ISO image!"
|
error "Failed to locate file \"${missing,,}\" in ISO image!"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
prepareLegacy "$iso" "$dir" "$desc" && return 0
|
prepareLegacy "$iso" "$dir" "$desc" && return 0
|
||||||
|
|
||||||
error "Failed to extract boot image from $desc ISO image!"
|
error "Failed to extract boot image from ISO image!"
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -927,10 +901,6 @@ buildImage() {
|
|||||||
error "File $BOOT does already exist?!" && return 1
|
error "File $BOOT does already exist?!" && return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "$dir/$ETFS" ]; then
|
|
||||||
error "Failed to locate file \"$ETFS\" in ISO image!" && return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
base=$(basename "$BOOT")
|
base=$(basename "$BOOT")
|
||||||
local out="$TMP/${base%.*}.tmp"
|
local out="$TMP/${base%.*}.tmp"
|
||||||
rm -f "$out"
|
rm -f "$out"
|
||||||
@ -940,6 +910,12 @@ buildImage() {
|
|||||||
local msg="Building $desc image..."
|
local msg="Building $desc image..."
|
||||||
info "$msg" && html "$msg"
|
info "$msg" && html "$msg"
|
||||||
|
|
||||||
|
[ -z "$LABEL" ] && LABEL="Windows"
|
||||||
|
|
||||||
|
if [ ! -f "$dir/$ETFS" ]; then
|
||||||
|
error "Failed to locate file \"$ETFS\" in ISO image!" && return 1
|
||||||
|
fi
|
||||||
|
|
||||||
size=$(du -h -b --max-depth=0 "$dir" | cut -f1)
|
size=$(du -h -b --max-depth=0 "$dir" | cut -f1)
|
||||||
size_gb=$(( (size + 1073741823)/1073741824 ))
|
size_gb=$(( (size + 1073741823)/1073741824 ))
|
||||||
space=$(df --output=avail -B 1 "$TMP" | tail -n 1)
|
space=$(df --output=avail -B 1 "$TMP" | tail -n 1)
|
||||||
@ -949,8 +925,6 @@ buildImage() {
|
|||||||
error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1
|
error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -z "$LABEL" ] && LABEL="Windows"
|
|
||||||
|
|
||||||
if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then
|
if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then
|
||||||
|
|
||||||
! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \
|
! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \
|
||||||
|
Loading…
Reference in New Issue
Block a user