feat: Windows XP support

This commit is contained in:
Kroese 2024-01-31 19:20:31 +01:00 committed by GitHub
parent 7baaedbed3
commit dc6066efc1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -532,30 +532,13 @@ detectImage() {
return 0
}
prepareImage() {
prepareXP() {
local iso="$1"
local dir="$2"
if [[ "${BOOT_MODE,,}" == "windows" ]]; then
if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then
if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; then
if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then
return 0
fi
if [ ! -f "$dir/$ETFS" ]; then
warn "failed to locate file 'etfsboot.com' in ISO image, falling back to legacy boot!"
else
warn "failed to locate file 'efisys_noprompt.bin' in ISO image, falling back to legacy boot!"
fi
fi
fi
fi
if [[ "${DETECTED,,}" == "winxpx86"* ]]; then
BOOT_MODE="windows_legacy"
ETFS="[BOOT]/Boot-NoEmul.img"
local drivers="$TMP/drivers"
rm -rf "$drivers"
@ -565,6 +548,13 @@ prepareImage() {
exit 66
fi
cp "$drivers/viostor/xp/x86/viostor.sys" "$dir/I386/viostor.sys"
mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor"
cp "$drivers/viostor/xp/x86/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor/viostor.cat"
cp "$drivers/viostor/xp/x86/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor/viostor.sys"
cp "$drivers/viostor/xp/x86/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor/viostor.inf"
sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$dir/I386/TXTSETUP.SIF"
sed -i '/^\[SourceDisksFiles.x86\]/s/$/\nviostor.sys=1,,,,,_x,4_,4,1,,,1,4/' "$dir/I386/TXTSETUP.SIF"
sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device WinXP 32-bit\"/' "$dir/I386/TXTSETUP.SIF"
@ -613,18 +603,13 @@ prepareImage() {
echo "Language=00000409"
} > "$sif"
cp "$drivers/viostor/xp/x86/viostor.sys" "$dir/I386/viostor.sys"
mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor"
cp "$drivers/viostor/xp/x86/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor/viostor.cat"
cp "$drivers/viostor/xp/x86/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor/viostor.sys"
cp "$drivers/viostor/xp/x86/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor/viostor.inf"
BOOT_MODE="windows_legacy"
ETFS="[BOOT]/Boot-NoEmul.img"
return 0
fi
}
prepareWin7() {
local iso="$1"
local dir="$2"
ETFS="boot.img"
BOOT_MODE="windows_legacy"
@ -641,6 +626,44 @@ prepareImage() {
return 0
}
prepareImage() {
local iso="$1"
local dir="$2"
if [[ "${BOOT_MODE,,}" == "windows" ]]; then
if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then
if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; then
if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then
return 0
fi
if [ ! -f "$dir/$ETFS" ]; then
warn "failed to locate file 'etfsboot.com' in ISO image, falling back to legacy boot!"
else
warn "failed to locate file 'efisys_noprompt.bin' in ISO image, falling back to legacy boot!"
fi
fi
fi
fi
if [[ "${DETECTED,,}" == "winxpx86"* ]]; then
if ! prepareXP "$iso" "$dir"; then
err "Failed to prepare Windows XP ISO!"
return 1
fi
else
if ! prepareWin7 "$iso" "$dir"; then
err "Failed to prepare Windows 7 ISO!"
return 1
fi
fi
return 0
}
updateImage() {
local iso="$1"