]> git.decadent.org.uk Git - dak.git/blobdiff - config/debian/cron.dinstall
Loadsa changes to make new cronscript way work
[dak.git] / config / debian / cron.dinstall
index be7413a4ca25c161618d631569e3a32f0c49f594..f1a3dcf5e45ff5efc2380c11f37c8256c289f3c2 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/bash
 # No way I try to deal with a crippled sh just for POSIX foo.
 
 #!/bin/bash
 # No way I try to deal with a crippled sh just for POSIX foo.
 
-# Copyright (C) 2009-2012 Joerg Jaspert <joerg@debian.org>
+# Copyright (C) 2009-2015 Joerg Jaspert <joerg@debian.org>
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
@@ -71,17 +71,17 @@ function stage() {
     ARGS='GO[@]'
     local "${!ARGS}"
 
     ARGS='GO[@]'
     local "${!ARGS}"
 
-    error=${ERR:-"true"}
+    local error=${ERR:-"true"}
 
     ARGS=${ARGS:-""}
 
     log "########## DINSTALL BEGIN: ${FUNC} ${ARGS} ##########"
 
     ARGS=${ARGS:-""}
 
     log "########## DINSTALL BEGIN: ${FUNC} ${ARGS} ##########"
-    STAGEFILE="${stagedir}/${FUNC}_${ARGS}"
+    local STAGEFILE="${stagedir}/${FUNC}_${ARGS}"
     STAGEFILE=${STAGEFILE// /_}
     if [ -f "${STAGEFILE}" ]; then
     STAGEFILE=${STAGEFILE// /_}
     if [ -f "${STAGEFILE}" ]; then
-        stamptime=$(/usr/bin/stat -c %Z "${STAGEFILE}")
-        unixtime=$(date +%s)
-        difference=$(( $unixtime - $stamptime ))
+        local stamptime=$(/usr/bin/stat -c %Z "${STAGEFILE}")
+        local unixtime=$(date +%s)
+        local difference=$(( $unixtime - $stamptime ))
         if [ ${difference} -ge 14400 ]; then
             log_error "Did already run ${FUNC}, stagefile exists, but that was ${difference} seconds ago. Please check."
         else
         if [ ${difference} -ge 14400 ]; then
             log_error "Did already run ${FUNC}, stagefile exists, but that was ${difference} seconds ago. Please check."
         else
@@ -92,13 +92,14 @@ function stage() {
 
     debug "Now calling function ${FUNC}. Arguments: ${ARGS}. Timestamp: ${TIME}"
 
 
     debug "Now calling function ${FUNC}. Arguments: ${ARGS}. Timestamp: ${TIME}"
 
-    # Make sure we are always at the same place. If a function wants to be elsewhere,
-    # it has to cd first!
+    # Make sure we are always at the same place. If a function wants
+    # to be elsewhere, it has to cd first!
     cd ${configdir}
 
     cd ${configdir}
 
-    # Now redirect the output into $STAGEFILE.log. In case it errors out somewhere our
-    # errorhandler trap can then mail the contents of $STAGEFILE.log only, instead of a whole
-    # dinstall logfile. Short error mails ftw!
+    # Now redirect the output into $STAGEFILE.log. In case it errors
+    # out somewhere our errorhandler trap can then mail the contents
+    # of $STAGEFILE.log only, instead of a whole dinstall logfile.
+    # Short error mails ftw!
     exec >> "${STAGEFILE}.log" 2>&1
 
     if [ -f "${LOCK_STOP}" ]; then
     exec >> "${STAGEFILE}.log" 2>&1
 
     if [ -f "${LOCK_STOP}" ]; then
@@ -106,18 +107,21 @@ function stage() {
         exit 42
     fi
 
         exit 42
     fi
 
+    # Do we care about trouble in the function we call?
     if [ "${error}" = "false" ]; then
         set +e
     fi
     ${FUNC} ${ARGS}
 
     if [ "${error}" = "false" ]; then
         set +e
     fi
     ${FUNC} ${ARGS}
 
-    # No matter what happened in the function, we make sure we have set -e default state back
+    # No matter what happened in the function, we make sure we have
+    # set -e default state back
     set -e
 
     # Make sure we are always at the same place.
     cd ${configdir}
 
     set -e
 
     # Make sure we are always at the same place.
     cd ${configdir}
 
-    # We always use the same umask. If a function wants to do different, fine, but we reset.
+    # We always use the same umask. If a function wants to do
+    # different, fine, but we reset.
     umask 022
 
     touch "${STAGEFILE}"
     umask 022
 
     touch "${STAGEFILE}"
@@ -129,8 +133,8 @@ function stage() {
     # And the output goes back to the normal logfile
     exec >> "$LOGFILE" 2>&1
 
     # And the output goes back to the normal logfile
     exec >> "$LOGFILE" 2>&1
 
-    # Now we should make sure that we have a usable dinstall.log, so append the $STAGEFILE.log
-    # to it.
+    # Now we should make sure that we have a usable dinstall.log, so
+    # append the $STAGEFILE.log to it.
     cat "${STAGEFILE}.log" >> "${LOGFILE}"
     rm -f "${STAGEFILE}.log"
 
     cat "${STAGEFILE}.log" >> "${LOGFILE}"
     rm -f "${STAGEFILE}.log"
 
@@ -171,9 +175,9 @@ trap remove_daily_lock EXIT TERM HUP INT QUIT
 touch "${LOCK_BRITNEY}"
 
 # This loop simply wants to be fed by a list of values (see below)
 touch "${LOCK_BRITNEY}"
 
 # This loop simply wants to be fed by a list of values (see below)
-# which consists of 5 values currently.
+# made out of 5 columns.
 # The first four are the array values for the stage function, the
 # The first four are the array values for the stage function, the
-# fifths tells us if we should background the stage call.
+# fifth tells us if we should background the stage call.
 #
 #  - FUNC - the function name to call
 #  - ARGS - Possible arguments to hand to the function. Can be the empty string
 #
 #  - FUNC - the function name to call
 #  - ARGS - Possible arguments to hand to the function. Can be the empty string
@@ -185,10 +189,13 @@ touch "${LOCK_BRITNEY}"
 #
 # ATTENTION: Spaces in arguments or timestamp names need to be escaped by \
 #
 #
 # ATTENTION: Spaces in arguments or timestamp names need to be escaped by \
 #
-# ATTENTION: There are two special values for the first column (FUNC).
-#            STATE   - do not call stage function, call the state
-#                      function to update the public statefile "where is dinstall"
-#            NOSTAGE - do not call stage function, call the command directly.
+# NOTE 1: There are two special values for the first column (FUNC).
+#         STATE   - do not call stage function, call the state
+#                   function to update the public statefile "where is dinstall"
+#         NOSTAGE - do not call stage function, call the command directly.
+#
+# Note 2: If you want to hand an empty value to the stage function,
+#         use the word "none" in the list below.
 while read FUNC ARGS TIME ERR BACKGROUND; do
     debug "FUNC: $FUNC ARGS: $ARGS TIME: $TIME ERR: $ERR BG: $BACKGROUND"
 
 while read FUNC ARGS TIME ERR BACKGROUND; do
     debug "FUNC: $FUNC ARGS: $ARGS TIME: $TIME ERR: $ERR BG: $BACKGROUND"
 
@@ -201,6 +208,13 @@ while read FUNC ARGS TIME ERR BACKGROUND; do
         fi
     done
 
         fi
     done
 
+    # ERR/BACKGROUND are boolean, check that they are.
+    for var in ERR BACKGROUND; do
+        if [[ ${!var} != false ]] && [[ ${!var} != true ]]; then
+            error "Illegal value ${!var} for ${var} (should be true or false), line for function ${FUNC}"
+        fi
+    done
+
     case ${FUNC} in
         STATE)
             state ${ARGS}
     case ${FUNC} in
         STATE)
             state ${ARGS}
@@ -224,7 +238,7 @@ while read FUNC ARGS TIME ERR BACKGROUND; do
     esac
 done < <(cat - <<EOF
 savetimestamp          none                       none                       false   false
     esac
 done < <(cat - <<EOF
 savetimestamp          none                       none                       false   false
-qa1                    none                       init                       false   true
+qa1                    none                       init                       true    true
 pg_timestamp           predinstall                pg_dump1                   false   false
 updates                none                       External\ Updates          false   false
 i18n1                  none                       i18n\ 1                    false   false
 pg_timestamp           predinstall                pg_dump1                   false   false
 updates                none                       External\ Updates          false   false
 i18n1                  none                       i18n\ 1                    false   false
@@ -236,7 +250,7 @@ backports_policy       none                       backports-policy           fal
 cruft                  none                       cruft                      false   false
 STATE                  indices                    none                       false   false
 dominate               none                       dominate                   false   false
 cruft                  none                       cruft                      false   false
 STATE                  indices                    none                       false   false
 dominate               none                       dominate                   false   false
-autocruft              unstable\ experimental     autocruft                  false   false
+autocruft              none                       autocruft                  false   false
 fingerprints           none                       import-keyring             false   false
 overrides              none                       overrides                  false   false
 mpfm                   none                       pkg-file-mapping           false   false
 fingerprints           none                       import-keyring             false   false
 overrides              none                       overrides                  false   false
 mpfm                   none                       pkg-file-mapping           false   false
@@ -252,10 +266,11 @@ copyoverrides          none                       copyoverrides              fal
 mklslar                none                       mklslar                    false   false
 mkfilesindices         none                       mkfilesindices             false   false
 mkchecksums            none                       mkchecksums                false   false
 mklslar                none                       mklslar                    false   false
 mkfilesindices         none                       mkfilesindices             false   false
 mkchecksums            none                       mkchecksums                false   false
+signotherfiles         none                       signotherfiles             false   false
 mirror                 none                       mirror\ hardlinks          false   false
 mirror                 none                       mirror\ hardlinks          false   false
-ddaccess               none                       ddaccessible\ sync         false   false
 NOSTAGE                remove_locks               none                       false   false
 STATE                  postlock                   none                       false   false
 NOSTAGE                remove_locks               none                       false   false
 STATE                  postlock                   none                       false   false
+ddaccess               none                       ddaccessible\ sync         true    true
 changelogs             none                       changelogs                 false   true
 pg_timestamp           postdinstall               pg_dump2                   false   false
 expire                 none                       expire_dumps               false   true
 changelogs             none                       changelogs                 false   true
 pg_timestamp           postdinstall               pg_dump2                   false   false
 expire                 none                       expire_dumps               false   true
@@ -271,6 +286,7 @@ NOSTAGE                rm\ -f\ "\${LOCK_BRITNEY}" none                       fal
 cleantransactions      none                       none                       false   false
 EOF
         )
 cleantransactions      none                       none                       false   false
 EOF
         )
+# FUNC                 ARGS                       TIME                       ERR     BG
 
 # we need to wait for the background processes before the end of dinstall
 wait
 
 # we need to wait for the background processes before the end of dinstall
 wait
@@ -279,15 +295,19 @@ log "Daily cron scripts successful, all done"
 
 exec > "$logdir/afterdinstall.log" 2>&1
 
 
 exec > "$logdir/afterdinstall.log" 2>&1
 
-GO=(
-    FUNC="renamelogfile"
-    TIME=""
-    ARGS=""
-    ERR="false"
-)
-stage $GO
-state "all done"
+if [ -f "${dbdir}/dinstallstart" ]; then
+    NOW=$(cat "${dbdir}/dinstallstart")
+    mv "$LOGFILE" "$logdir/dinstall_${NOW}.log"
+    logstats "$logdir/dinstall_${NOW}.log"
+    bzip2 -9 "$logdir/dinstall_${NOW}.log"
+else
+    error "Problem, I don't know when dinstall started, unable to do log statistics."
+    NOW=`date "+%Y.%m.%d-%H:%M:%S"`
+    mv "$LOGFILE" "$logdir/dinstall_${NOW}.log"
+    bzip2 -9 "$logdir/dinstall_${NOW}.log"
+fi
 
 
+state "all done"
 
 # Now, at the very (successful) end of dinstall, make sure we remove
 # our stage files, so the next dinstall run will do it all again.
 
 # Now, at the very (successful) end of dinstall, make sure we remove
 # our stage files, so the next dinstall run will do it all again.