mirror of
https://github.com/dockur/windows.git
synced 2025-10-29 04:05:50 +00:00
Update install.sh
This commit is contained in:
parent
0e8a1179aa
commit
b1ef535b87
1 changed files with 97 additions and 89 deletions
186
src/install.sh
186
src/install.sh
|
|
@ -29,65 +29,6 @@ skipInstall() {
|
|||
return 1
|
||||
}
|
||||
|
||||
finishInstall() {
|
||||
|
||||
local iso="$1"
|
||||
local aborted="$2"
|
||||
|
||||
if [ ! -s "$iso" ] || [ ! -f "$iso" ]; then
|
||||
error "Failed to find ISO file: $iso" && return 1
|
||||
fi
|
||||
|
||||
if [ -w "$iso" ] && [[ "$aborted" != [Yy1]* ]]; then
|
||||
# Mark ISO as prepared via magic byte
|
||||
if ! printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none; then
|
||||
error "Failed to set magic byte in ISO file: $iso" && return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -f "$STORAGE/windows.ver"
|
||||
rm -f "$STORAGE/windows.old"
|
||||
rm -f "$STORAGE/windows.boot"
|
||||
rm -f "$STORAGE/windows.mode"
|
||||
|
||||
cp /run/version "$STORAGE/windows.ver"
|
||||
|
||||
if [[ "${PLATFORM,,}" == "x64" ]]; then
|
||||
if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then
|
||||
echo "$BOOT_MODE" > "$STORAGE/windows.mode"
|
||||
if [[ "${MACHINE,,}" != "q35" ]]; then
|
||||
echo "$MACHINE" > "$STORAGE/windows.old"
|
||||
fi
|
||||
else
|
||||
# Enable secure boot + TPM on manual installs as Win11 requires
|
||||
if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then
|
||||
if [[ "${DETECTED,,}" == "win11"* ]]; then
|
||||
BOOT_MODE="windows_secure"
|
||||
echo "$BOOT_MODE" > "$STORAGE/windows.mode"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -rf "$TMP"
|
||||
return 0
|
||||
}
|
||||
|
||||
abortInstall() {
|
||||
|
||||
local iso="$1"
|
||||
|
||||
if [[ "$iso" != "$STORAGE/$BASE" ]]; then
|
||||
if ! mv -f "$iso" "$STORAGE/$BASE"; then
|
||||
error "Failed to move ISO file: $iso" && return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
finishInstall "$STORAGE/$BASE" "Y" && return 0
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
startInstall() {
|
||||
|
||||
html "Starting Windows..."
|
||||
|
|
@ -161,6 +102,65 @@ startInstall() {
|
|||
return 0
|
||||
}
|
||||
|
||||
finishInstall() {
|
||||
|
||||
local iso="$1"
|
||||
local aborted="$2"
|
||||
|
||||
if [ ! -s "$iso" ] || [ ! -f "$iso" ]; then
|
||||
error "Failed to find ISO file: $iso" && return 1
|
||||
fi
|
||||
|
||||
if [ -w "$iso" ] && [[ "$aborted" != [Yy1]* ]]; then
|
||||
# Mark ISO as prepared via magic byte
|
||||
if ! printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none; then
|
||||
error "Failed to set magic byte in ISO file: $iso" && return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -f "$STORAGE/windows.ver"
|
||||
rm -f "$STORAGE/windows.old"
|
||||
rm -f "$STORAGE/windows.boot"
|
||||
rm -f "$STORAGE/windows.mode"
|
||||
|
||||
cp /run/version "$STORAGE/windows.ver"
|
||||
|
||||
if [[ "${PLATFORM,,}" == "x64" ]]; then
|
||||
if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then
|
||||
echo "$BOOT_MODE" > "$STORAGE/windows.mode"
|
||||
if [[ "${MACHINE,,}" != "q35" ]]; then
|
||||
echo "$MACHINE" > "$STORAGE/windows.old"
|
||||
fi
|
||||
else
|
||||
# Enable secure boot + TPM on manual installs as Win11 requires
|
||||
if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then
|
||||
if [[ "${DETECTED,,}" == "win11"* ]]; then
|
||||
BOOT_MODE="windows_secure"
|
||||
echo "$BOOT_MODE" > "$STORAGE/windows.mode"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -rf "$TMP"
|
||||
return 0
|
||||
}
|
||||
|
||||
abortInstall() {
|
||||
|
||||
local iso="$1"
|
||||
|
||||
if [[ "$iso" != "$STORAGE/$BASE" ]]; then
|
||||
if ! mv -f "$iso" "$STORAGE/$BASE"; then
|
||||
error "Failed to move ISO file: $iso" && return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
finishInstall "$STORAGE/$BASE" "Y" && return 0
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
detectCustom() {
|
||||
|
||||
CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname windows.iso -printf "%f\n" | head -n 1)
|
||||
|
|
@ -273,6 +273,7 @@ doMido() {
|
|||
}
|
||||
|
||||
verifyFile() {
|
||||
|
||||
local iso="$1"
|
||||
local version="$2"
|
||||
local hash=""
|
||||
|
|
@ -355,11 +356,9 @@ downloadImage() {
|
|||
local url desc
|
||||
|
||||
if [[ "${version,,}" == "http"* ]]; then
|
||||
|
||||
desc=$(getName "$BASE")
|
||||
downloadFile "$iso" "$version" "$desc" "" && return 0
|
||||
return 1
|
||||
|
||||
fi
|
||||
|
||||
if ! validVersion "$version"; then
|
||||
|
|
@ -542,6 +541,7 @@ extractImage() {
|
|||
}
|
||||
|
||||
detectVersion() {
|
||||
|
||||
local xml="$1"
|
||||
local name name2 name3
|
||||
|
||||
|
|
@ -587,15 +587,20 @@ detectImage() {
|
|||
|
||||
if [ -n "$DETECTED" ]; then
|
||||
|
||||
[[ "$MANUAL" == [Yy1]* ]] && return 0
|
||||
|
||||
if [ -f "$STORAGE/custom.xml" ]; then
|
||||
XML="$STORAGE/custom.xml"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ -f "/run/assets/$DETECTED.xml" ]; then
|
||||
[[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml"
|
||||
XML="/run/assets/$DETECTED.xml"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "${DETECTED,,}" != "winxp"* ]]; then
|
||||
|
||||
dsc=$(printVersion "$DETECTED" "$DETECTED")
|
||||
|
||||
warn "detected $dsc, but its answer file does not exist ($DETECTED.xml), $FB."
|
||||
fi
|
||||
|
||||
|
|
@ -611,7 +616,7 @@ detectImage() {
|
|||
else
|
||||
DETECTED="winxpx86"
|
||||
fi
|
||||
dsc=$(printVersion "$DETECTED" "$DETECTED")
|
||||
dsc=$(printVersion "$DETECTED" "Windows XP")
|
||||
info "Detected: $dsc"
|
||||
return 0
|
||||
fi
|
||||
|
|
@ -636,6 +641,10 @@ detectImage() {
|
|||
result=$(wimlib-imagex info -xml "$loc" | tr -d '\000')
|
||||
|
||||
if ! detectVersion "$result"; then
|
||||
if [ -f "$STORAGE/custom.xml" ]; then
|
||||
XML="$STORAGE/custom.xml"
|
||||
return 0
|
||||
fi
|
||||
warn "failed to determine Windows version from image, $FB"
|
||||
return 0
|
||||
fi
|
||||
|
|
@ -643,7 +652,7 @@ detectImage() {
|
|||
desc=$(printVersion "$DETECTED" "$DETECTED")
|
||||
|
||||
if [ -f "/run/assets/$DETECTED.xml" ]; then
|
||||
[[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml"
|
||||
[[ "$MANUAL" != [Yy1]* ]] && XML="/run/assets/$DETECTED.xml"
|
||||
info "Detected: $desc"
|
||||
else
|
||||
warn "detected $desc, but no answer file exists for its edition ($DETECTED.xml), $FB."
|
||||
|
|
@ -656,45 +665,43 @@ prepareImage() {
|
|||
|
||||
local iso="$1"
|
||||
local dir="$2"
|
||||
local missing
|
||||
|
||||
case "${DETECTED,,}" in
|
||||
"winxp"* | "winvista"* | "win7"* | "win2008"*)
|
||||
[[ "${PLATFORM,,}" == "arm64" ]] && return 1
|
||||
BOOT_MODE="windows_legacy" ;;
|
||||
esac
|
||||
|
||||
if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then
|
||||
if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then
|
||||
if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; then
|
||||
|
||||
[ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ] && return 0
|
||||
|
||||
if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then
|
||||
return 0
|
||||
fi
|
||||
missing=$(basename "$dir/$EFISYS")
|
||||
[ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS")
|
||||
warn "failed to locate file '${missing,,}' in ISO image!"
|
||||
|
||||
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
|
||||
|
||||
[[ "${PLATFORM,,}" == "arm64" ]] && return 1
|
||||
BOOT_MODE="windows_legacy"
|
||||
|
||||
if [[ "${DETECTED,,}" == "winxp"* ]]; then
|
||||
if ! prepareXP "$iso" "$dir"; then
|
||||
error "Failed to prepare Windows XP ISO!" && return 1
|
||||
fi
|
||||
else
|
||||
if ! prepareLegacy "$iso" "$dir"; then
|
||||
error "Failed to prepare Windows ISO!" && return 1
|
||||
fi
|
||||
prepareXP "$iso" "$dir" && return 0
|
||||
error "Failed to prepare Windows XP ISO!" && return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
prepareLegacy "$iso" "$dir" && return 0
|
||||
|
||||
error "Failed to extract boot image from ISO!"
|
||||
return 1
|
||||
}
|
||||
|
||||
updateImage() {
|
||||
|
||||
local iso="$1"
|
||||
local dir="$2"
|
||||
local asset="/run/assets/$3"
|
||||
local asset="$3"
|
||||
local path src loc xml index result
|
||||
|
||||
[ ! -s "$asset" ] || [ ! -f "$asset" ] && return 0
|
||||
|
|
@ -728,13 +735,14 @@ updateImage() {
|
|||
fi
|
||||
|
||||
if ! wimlib-imagex update "$loc" "$index" --command "add $asset /autounattend.xml" > /dev/null; then
|
||||
warn "failed to add answer file $xml to ISO image, $FB" && return 1
|
||||
warn "failed to add answer file ($xml) to ISO image, $FB" && return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
copyOEM() {
|
||||
|
||||
local dir="$1"
|
||||
local folder="$STORAGE/oem"
|
||||
local src
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue