소스 검색

make downloading more robust and perform retries

Ralf S. Engelschall 21 년 전
부모
커밋
789e592f6a
2개의 변경된 파일34개의 추가작업 그리고 7개의 파일을 삭제
  1. 33 6
      uvscan/rc.uvscan
  2. 1 1
      uvscan/uvscan.spec

+ 33 - 6
uvscan/rc.uvscan

@@ -11,11 +11,24 @@
 %common
     uvscan_update () {
         #   determine information
-        uvscan_datadir="@l_prefix@/var/uvscan/data"
-        uvscan_datfile=`@l_prefix@/bin/curl -s "$uvscan_dat" 2>/dev/null |\
-                        grep 'dat-[0-9][0-9]*\.tar' | sort | tail -1 |\
-                        sed -e 's;^.*\(dat-[0-9][0-9]*\.tar\).*$;\1;'`
+        i=0
+        while [ $i -lt 3 ]; do
+            uvscan_datfile=`@l_prefix@/bin/curl -s "${uvscan_dat}" 2>/dev/null |\
+                            grep 'dat-[0-9][0-9]*\.tar' | sort | tail -1 |\
+                            sed -e 's;^.*\(dat-[0-9][0-9]*\.tar\).*$;\1;'`
+            if [ ".${uvscan_datfile}" != . ]; then
+                break
+            else
+                sleep 10
+            fi
+            i=$(($i + 1))
+        done
+        if [ ".${uvscan_datfile}" = . ]; then
+            echo "rc:uvscan:ERROR: unable to determine latest DAT file version" 1>&2
+            return 1
+        fi
         uvscan_tmpdir=`echo "${uvscan_datfile}" | sed -e 's;\.tar$;;'`
+        uvscan_datadir="@l_prefix@/var/uvscan/data"
 
         #   determine old (installed) and new (available) versions
         uvscan_version_new=`echo "${uvscan_datfile}" | sed -e 's;^dat-;;' -e 's;\.tar$;;'`
@@ -29,8 +42,22 @@
         umask 077
         cd ${uvscan_datadir} || return 1
         rm -f ${uvscan_datfile} >/dev/null 2>&1 || true
-        @l_prefix@/bin/curl -s -o ${uvscan_datfile} \
-            ${uvscan_dat}/${uvscan_datfile} || return 1
+        i=0
+        while [ $i -lt 3 ]; do
+            @l_prefix@/bin/curl -s -o ${uvscan_datfile} \
+                ${uvscan_dat}/${uvscan_datfile} || return 1
+            if [ $? -eq 0 ]; then
+                break
+            else
+                rm -f ${uvscan_datfile} >/dev/null 2>&1 || true
+                sleep 10
+            fi
+            i=$(($i + 1))
+        done
+        if [ ! -f ${uvscan_datfile} ]; then
+            echo "rc:uvscan:ERROR: unable to download latest DAT file" 1>&2
+            return 1
+        fi
         rm -rf ${uvscan_tmpdir} >/dev/null 2>&1 || true
         mkdir ${uvscan_tmpdir}
         ( cd ${uvscan_tmpdir} && \

+ 1 - 1
uvscan/uvscan.spec

@@ -39,7 +39,7 @@ Class:        EVAL
 Group:        Filesystem
 License:      Commercial/Free-Trial
 Version:      %{V_engine}.%{V_datfiles}
-Release:      20040826
+Release:      20040830
 
 #   list of sources
 Source0:      ftp://ftp.mcafee.com/pub/antivirus/datfiles/4.x/dat-%{V_datfiles}.tar