From 8a5f233e344a7968a07ba265ac91a6f327fada04 Mon Sep 17 00:00:00 2001 From: Kroese Date: Tue, 16 Apr 2024 16:22:28 +0200 Subject: [PATCH] fix: Verify files are not empty (#383) --- Dockerfile | 2 +- src/install.sh | 39 +++++++++++++++++++++------------------ src/power.sh | 14 +++++++------- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/Dockerfile b/Dockerfile index 97fb4d2..3e623a8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.21 / / +COPY --from=qemux/qemu-docker:4.22 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/src/install.sh b/src/install.sh index c0c600b..1878967 100644 --- a/src/install.sh +++ b/src/install.sh @@ -204,7 +204,7 @@ hasDisk() { [ -b "${DEVICE:-}" ] && return 0 - if [ -f "$STORAGE/data.img" ] || [ -f "$STORAGE/data.qcow2" ]; then + if [ -s "$STORAGE/data.img" ] || [ -s "$STORAGE/data.qcow2" ]; then return 0 fi @@ -310,6 +310,8 @@ startInstall() { else + rm -f "$STORAGE/$BASE" + if skipInstall; then BASE="" return 1 @@ -370,7 +372,7 @@ getESD() { cd /run - if [ ! -f "$dir/products.xml" ]; then + if [ ! -s "$dir/products.xml" ]; then error "Failed to find products.xml!" && return 1 fi @@ -434,7 +436,7 @@ downloadImage() { if (( rc == 0 )); then - [ ! -f "$iso" ] && return 1 + [ ! -s "$iso" ] && return 1 html "Download finished successfully..." return 0 @@ -477,7 +479,7 @@ downloadImage() { fKill "progress.sh" (( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60 - [ ! -f "$iso" ] && return 1 + [ ! -s "$iso" ] && return 1 html "Download finished successfully..." return 0 @@ -632,7 +634,7 @@ detectImage() { if [ -n "$DETECTED" ]; then - if [ -f "/run/assets/$DETECTED.xml" ]; then + if [ -s "/run/assets/$DETECTED.xml" ]; then [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" return 0 fi @@ -651,7 +653,7 @@ detectImage() { info "Detecting Windows version from ISO image..." - if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then + if [ -s "$dir/WIN51" ] || [ -s "$dir/SETUPXP.HTM" ]; then DETECTED="winxpx86" info "Detected: Windows XP" return 0 @@ -667,9 +669,9 @@ detectImage() { fi loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) - [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) + [ ! -s "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) - if [ ! -f "$loc" ]; then + if [ ! -s "$loc" ]; then warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" return 1 @@ -697,7 +699,7 @@ detectImage() { desc=$(printVersion "$DETECTED") [ -z "$desc" ] && desc="$DETECTED" - if [ -f "/run/assets/$DETECTED.xml" ]; then + if [ -s "/run/assets/$DETECTED.xml" ]; then [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml" info "Detected: $desc" else @@ -917,7 +919,7 @@ prepareImage() { if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; then - if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then + if [ -s "$dir/$ETFS" ] && [ -s "$dir/$EFISYS" ]; then return 0 fi @@ -953,7 +955,7 @@ updateImage() { local asset="/run/assets/$3" local path src loc index result - [ ! -f "$asset" ] && return 0 + [ ! -s "$asset" ] && return 0 path=$(find "$dir" -maxdepth 1 -type f -iname autounattend.xml | head -n 1) [ -n "$path" ] && cp "$asset" "$path" @@ -967,9 +969,9 @@ updateImage() { fi loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) - [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) + [ ! -s "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) - if [ ! -f "$loc" ]; then + if [ ! -s "$loc" ]; then warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" BOOT_MODE="windows_legacy" return 1 @@ -1024,7 +1026,7 @@ buildImage() { if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log"; then - [ -f "$log" ] && echo "$(<"$log")" + [ -s "$log" ] && echo "$(<"$log")" return 1 fi @@ -1034,7 +1036,7 @@ buildImage() { if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \ -udf -allow-limited-size -quiet "$dir" 2> "$log"; then - [ -f "$log" ] && echo "$(<"$log")" + [ -s "$log" ] && echo "$(<"$log")" return 1 fi @@ -1042,7 +1044,7 @@ buildImage() { if ! 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" -quiet "$dir" 2> "$log"; then - [ -f "$log" ] && echo "$(<"$log")" + [ -s "$log" ] && echo "$(<"$log")" return 1 fi @@ -1052,7 +1054,7 @@ buildImage() { local error="" local hide="Warning: creating filesystem that does not conform to ISO-9660." - [ -f "$log" ] && error="$(<"$log")" + [ -s "$log" ] && error="$(<"$log")" [[ "$error" != "$hide" ]] && echo "$error" if [ -f "$STORAGE/$BASE" ]; then @@ -1078,7 +1080,8 @@ if ! startInstall; then return 0 fi -if [ ! -f "$ISO" ]; then +if [ ! -s "$ISO" ]; then + rm -f "$ISO" if ! downloadImage "$ISO" "$VERSION"; then error "Failed to download $VERSION" exit 61 diff --git a/src/power.sh b/src/power.sh index 5375e65..cc28f8d 100644 --- a/src/power.sh +++ b/src/power.sh @@ -25,7 +25,7 @@ _trap() { ready() { [ -f "$STORAGE/windows.boot" ] && return 0 - [ ! -f "$QEMU_PTY" ] && return 1 + [ ! -s "$QEMU_PTY" ] && return 1 if [ -f "$STORAGE/windows.old" ]; then local last @@ -52,7 +52,7 @@ finish() { touch "$QEMU_END" - if [ -f "$QEMU_PID" ]; then + if [ -s "$QEMU_PID" ]; then pid=$(<"$QEMU_PID") error "Forcefully terminating Windows, reason: $reason..." @@ -61,7 +61,7 @@ finish() { while isAlive "$pid"; do sleep 1 # Workaround for zombie pid - [ ! -f "$QEMU_PID" ] && break + [ ! -s "$QEMU_PID" ] && break done fi @@ -74,7 +74,7 @@ finish() { fi pid="/var/run/tpm.pid" - [ -f "$pid" ] && pKill "$(<"$pid")" + [ -s "$pid" ] && pKill "$(<"$pid")" fKill "wsdd" fKill "smbd" @@ -91,7 +91,7 @@ terminal() { local dev="" - if [ -f "$QEMU_OUT" ]; then + if [ -s "$QEMU_OUT" ]; then local msg msg=$(<"$QEMU_OUT") @@ -139,7 +139,7 @@ _graceful_shutdown() { touch "$QEMU_END" info "Received $1, sending ACPI shutdown signal..." - if [ ! -f "$QEMU_PID" ]; then + if [ ! -s "$QEMU_PID" ]; then error "QEMU PID file does not exist?" finish "$code" && return "$code" fi @@ -168,7 +168,7 @@ _graceful_shutdown() { ! isAlive "$pid" && break # Workaround for zombie pid - [ ! -f "$QEMU_PID" ] && break + [ ! -s "$QEMU_PID" ] && break info "Waiting for Windows to shutdown... ($cnt/$QEMU_TIMEOUT)"