Browse Source

fix: Verify files are not empty (#383)

Kroese 1 year ago
parent
commit
8a5f233e34
3 changed files with 29 additions and 26 deletions
  1. 1 1
      Dockerfile
  2. 21 18
      src/install.sh
  3. 7 7
      src/power.sh

+ 1 - 1
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"

+ 21 - 18
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

+ 7 - 7
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)"