mirror of
https://github.com/dockur/windows.git
synced 2026-08-03 12:37:20 +01:00
fix: Legacy ISO boot load size (#1971)
This commit is contained in:
+136
@@ -952,6 +952,142 @@ EOF
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildImage() {
|
||||||
|
|
||||||
|
local dir="$1"
|
||||||
|
local failed=""
|
||||||
|
local cat="BOOT.CAT"
|
||||||
|
local log="/run/shm/iso.log"
|
||||||
|
local base size desc
|
||||||
|
|
||||||
|
if [ -f "$BOOT" ]; then
|
||||||
|
error "File $BOOT does already exist?!" && return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
base=$(basename "$BOOT")
|
||||||
|
local out="$TMP/${base%.*}.tmp"
|
||||||
|
rm -f "$out"
|
||||||
|
|
||||||
|
desc=$(printVariant "$DETECTED" "ISO")
|
||||||
|
|
||||||
|
local msg="Building $desc image"
|
||||||
|
info "$msg..." && html "$msg..."
|
||||||
|
|
||||||
|
[ -z "$LABEL" ] && LABEL="Windows"
|
||||||
|
|
||||||
|
if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then
|
||||||
|
error "Failed to locate file \"$ETFS\" in ISO image!" && return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
size=$(du -b --max-depth=0 "$dir" | cut -f1)
|
||||||
|
checkFreeSpace "$TMP" "$size" || return 1
|
||||||
|
|
||||||
|
/run/progress.sh "$out" "$size" "$msg ([P])..." &
|
||||||
|
|
||||||
|
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}" \
|
||||||
|
-udf \
|
||||||
|
-boot-info-table \
|
||||||
|
-eltorito-alt-boot \
|
||||||
|
-eltorito-boot "$EFISYS" \
|
||||||
|
-no-emul-boot \
|
||||||
|
-allow-limited-size \
|
||||||
|
-quiet \
|
||||||
|
"$dir" 2> "$log" || failed="y"
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
case "${DETECTED,,}" in
|
||||||
|
"win2k"* | "winxp"* | "win2003"* )
|
||||||
|
genisoimage \
|
||||||
|
-o "$out" \
|
||||||
|
-b "$ETFS" \
|
||||||
|
-no-emul-boot \
|
||||||
|
-boot-load-seg 1984 \
|
||||||
|
-boot-load-size 4 \
|
||||||
|
-c "$cat" \
|
||||||
|
-iso-level 2 \
|
||||||
|
-J \
|
||||||
|
-l \
|
||||||
|
-D \
|
||||||
|
-N \
|
||||||
|
-joliet-long \
|
||||||
|
-relaxed-filenames \
|
||||||
|
-V "${LABEL::30}" \
|
||||||
|
-quiet \
|
||||||
|
"$dir" 2> "$log" || failed="y"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"win9"* )
|
||||||
|
genisoimage \
|
||||||
|
-o "$out" \
|
||||||
|
-b "$ETFS" \
|
||||||
|
-J \
|
||||||
|
-r \
|
||||||
|
-V "${LABEL::30}" \
|
||||||
|
-quiet \
|
||||||
|
"$dir" 2> "$log" || failed="y"
|
||||||
|
;;
|
||||||
|
|
||||||
|
* )
|
||||||
|
genisoimage \
|
||||||
|
-o "$out" \
|
||||||
|
-b "$ETFS" \
|
||||||
|
-no-emul-boot \
|
||||||
|
-boot-load-size 4 \
|
||||||
|
-c "$cat" \
|
||||||
|
-iso-level 2 \
|
||||||
|
-J \
|
||||||
|
-l \
|
||||||
|
-D \
|
||||||
|
-N \
|
||||||
|
-joliet-long \
|
||||||
|
-relaxed-filenames \
|
||||||
|
-V "${LABEL::30}" \
|
||||||
|
-udf \
|
||||||
|
-allow-limited-size \
|
||||||
|
-quiet \
|
||||||
|
"$dir" 2> "$log" || failed="y"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
fKill "progress.sh"
|
||||||
|
|
||||||
|
if [ -n "$failed" ]; then
|
||||||
|
[ -s "$log" ] && echo "$(<"$log")"
|
||||||
|
error "Failed to build image!" && return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local err=""
|
||||||
|
local hide="Warning: creating filesystem that does not conform to ISO-9660."
|
||||||
|
|
||||||
|
[ -s "$log" ] && err="$(<"$log")"
|
||||||
|
[[ "$err" != "$hide" ]] && echo "$err"
|
||||||
|
|
||||||
|
mv -f "$out" "$BOOT" || return 1
|
||||||
|
|
||||||
|
if ! setOwner "$BOOT"; then
|
||||||
|
warn "Failed to set the owner for \"$BOOT\" !"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
extractBootImage() {
|
extractBootImage() {
|
||||||
|
|
||||||
local iso="$1"
|
local iso="$1"
|
||||||
|
|||||||
@@ -1114,80 +1114,6 @@ removeImage() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
buildImage() {
|
|
||||||
|
|
||||||
local dir="$1"
|
|
||||||
local failed=""
|
|
||||||
local cat="BOOT.CAT"
|
|
||||||
local log="/run/shm/iso.log"
|
|
||||||
local base size desc
|
|
||||||
|
|
||||||
if [ -f "$BOOT" ]; then
|
|
||||||
error "File $BOOT does already exist?!" && return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
base=$(basename "$BOOT")
|
|
||||||
local out="$TMP/${base%.*}.tmp"
|
|
||||||
rm -f "$out"
|
|
||||||
|
|
||||||
desc=$(printVariant "$DETECTED" "ISO")
|
|
||||||
|
|
||||||
local msg="Building $desc image"
|
|
||||||
info "$msg..." && html "$msg..."
|
|
||||||
|
|
||||||
[ -z "$LABEL" ] && LABEL="Windows"
|
|
||||||
|
|
||||||
if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then
|
|
||||||
error "Failed to locate file \"$ETFS\" in ISO image!" && return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
size=$(du -b --max-depth=0 "$dir" | cut -f1)
|
|
||||||
checkFreeSpace "$TMP" "$size" || return 1
|
|
||||||
|
|
||||||
/run/progress.sh "$out" "$size" "$msg ([P])..." &
|
|
||||||
|
|
||||||
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}" \
|
|
||||||
-udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log" || failed="y"
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
case "${DETECTED,,}" in
|
|
||||||
"win2k"* | "winxp"* | "win2003"* )
|
|
||||||
genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \
|
|
||||||
-relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log" || failed="y" ;;
|
|
||||||
"win9"* )
|
|
||||||
genisoimage -o "$out" -b "$ETFS" -J -r -V "${LABEL::30}" -quiet "$dir" 2> "$log" || failed="y" ;;
|
|
||||||
* )
|
|
||||||
genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \
|
|
||||||
-udf -allow-limited-size -quiet "$dir" 2> "$log" || failed="y" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
fKill "progress.sh"
|
|
||||||
|
|
||||||
if [ -n "$failed" ]; then
|
|
||||||
[ -s "$log" ] && echo "$(<"$log")"
|
|
||||||
error "Failed to build image!" && return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
local err=""
|
|
||||||
local hide="Warning: creating filesystem that does not conform to ISO-9660."
|
|
||||||
|
|
||||||
[ -s "$log" ] && err="$(<"$log")"
|
|
||||||
[[ "$err" != "$hide" ]] && echo "$err"
|
|
||||||
|
|
||||||
mv -f "$out" "$BOOT" || return 1
|
|
||||||
|
|
||||||
if ! setOwner "$BOOT"; then
|
|
||||||
warn "Failed to set the owner for \"$BOOT\" !"
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
bootWindows() {
|
bootWindows() {
|
||||||
|
|
||||||
ARGS=$(readState "$STORAGE/windows.args") || return 1
|
ARGS=$(readState "$STORAGE/windows.args") || return 1
|
||||||
|
|||||||
Reference in New Issue
Block a user