]> git.decadent.org.uk Git - dak.git/blob - config/debian/cron.dinstall
use error instead of ERR
[dak.git] / config / debian / cron.dinstall
1 #!/bin/bash
2 # No way I try to deal with a crippled sh just for POSIX foo.
3
4 # Copyright (C) 2009 Joerg Jaspert <joerg@debian.org>
5 #
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License as
8 # published by the Free Software Foundation; version 2.
9 #
10 # This program is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 # General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
19 # Homer: Are you saying you're never going to eat any animal again? What
20 #        about bacon?
21 # Lisa: No.
22 # Homer: Ham?
23 # Lisa: No.
24 # Homer: Pork chops?
25 # Lisa: Dad, those all come from the same animal.
26 # Homer: Heh heh heh. Ooh, yeah, right, Lisa. A wonderful, magical animal.
27
28 # exit on errors
29 set -e
30 # make sure to only use defined variables
31 set -u
32 # ERR traps should be inherited from functions too. (And command
33 # substitutions and subshells and whatnot, but for us the functions is
34 # the important part here)
35 set -E
36
37 # import the general variable set.
38 export SCRIPTVARS=/srv/ftp.debian.org/dak/config/debian/vars
39 . $SCRIPTVARS
40
41 ########################################################################
42 # Functions                                                            #
43 ########################################################################
44 # common functions are "outsourced"
45 . "${configdir}/common"
46
47 # Timestamp. Used for dinstall stat graphs
48 function ts() {
49         echo "Archive maintenance timestamp ($1): $(date +%H:%M:%S)"
50 }
51
52 # Cleanup actions
53 function cleanup() {
54         rm -f ${LOCK_DAILY}
55         rm -f ${LOCK_ACCEPTED}
56 }
57
58 # If we error out this one is called, *FOLLOWED* by cleanup above
59 function onerror() {
60     ERRDATE=$(date "+%Y.%m.%d-%H:%M:%S")
61
62     subject="ATTENTION ATTENTION!"
63     if [ "${error}" = "false" ]; then
64         subject="${subject} (continued)"
65     else
66         subject="${subject} (interrupted)"
67     fi
68     subject="${subject} dinstall error at ${ERRDATE} in ${STAGEFILE} - (Be quiet, Brain, or I'll stab you with a Q-tip)"
69
70     cat "${STAGEFILE}.log" | mail -s "${subject}" -a "X-Debian: DAK" cron@ftp-master.debian.org
71 }
72
73 ########################################################################
74 # the actual dinstall functions follow                                 #
75 ########################################################################
76
77 # Setup the notice file to tell bad mirrors they used the wrong time
78 function notice() {
79     rm -f "$NOTICE"
80     cat > "$NOTICE" <<EOF
81 Packages are currently being installed and indices rebuilt.
82 Maintenance is automatic, starting at 01|07|13|19:52 UTC,
83 and ending about an hour later.  This file is then removed.
84
85 You should not mirror the archive during this period. If you find this
86 file on a Debian mirror please have a nice talk with the admin. They
87 are doing something wrong.
88 EOF
89 }
90
91 # pushing merkels QA user, part one
92 function merkel1() {
93     log "Telling merkels QA user that we start dinstall"
94     ssh -2 -i ~dak/.ssh/push_merkel_qa  -o BatchMode=yes -o SetupTimeOut=90 -o ConnectTimeout=90 qa@merkel.debian.org sleep 1
95 }
96
97 # Create the postgres dump files
98 function pgdump_pre() {
99     log "Creating pre-daily-cron-job backup of projectb database..."
100     pg_dump projectb > $base/backup/dump_pre_$(date +%Y.%m.%d-%H:%M:%S)
101 }
102
103 function pgdump_post() {
104     log "Creating post-daily-cron-job backup of projectb database..."
105     cd $base/backup
106     POSTDUMP=$(date +%Y.%m.%d-%H:%M:%S)
107     pg_dump projectb > $base/backup/dump_$POSTDUMP
108     pg_dumpall --globals-only > $base/backup/dumpall_$POSTDUMP
109     ln -sf $base/backup/dump_$POSTDUMP current
110     ln -sf $base/backup/dumpall_$POSTDUMP currentall
111 }
112
113 # Load the dak-dev projectb
114 function pgdakdev() {
115     cd $base/backup
116     echo "drop database projectb" | psql -p 5433 template1
117         cat currentall | psql -p 5433 template1
118     createdb -p 5433 -T template0 projectb
119     fgrep -v '\connect' current | psql -p 5433 projectb
120 }
121
122 # Updating various files
123 function updates() {
124     log "Updating Bugs docu, Mirror list and mailing-lists.txt"
125     cd $configdir
126     $scriptsdir/update-bugdoctxt
127     $scriptsdir/update-mirrorlists
128     $scriptsdir/update-mailingliststxt
129     $scriptsdir/update-pseudopackages.sh
130 }
131
132 # Process (oldstable)-proposed-updates "NEW" queue
133 function punew_do() {
134     cd "${queuedir}/${1}"
135     date -u -R >> REPORT
136     dak process-new -a -C COMMENTS >> REPORT || true
137     echo >> REPORT
138 }
139 function punew() {
140     log "Doing automated p-u-new processing"
141     punew_do "$1"
142 }
143 function opunew() {
144     log "Doing automated o-p-u-new processing"
145     punew_do "$1"
146 }
147
148 # The first i18n one, syncing new descriptions
149 function i18n1() {
150     log "Synchronizing i18n package descriptions"
151     # First sync their newest data
152     cd ${scriptdir}/i18nsync
153     rsync -aq --delete --delete-after ddtp-sync:/does/not/matter . || true
154
155     # Now check if we still know about the packages for which they created the files
156     # is the timestamp signed by us?
157     if $(gpgv --keyring /srv/ftp.debian.org/s3kr1t/dot-gnupg/pubring.gpg timestamp.gpg timestamp); then
158         # now read it. As its signed by us we are sure the content is what we expect, no need
159         # to do more here. And we only test -d a directory on it anyway.
160         TSTAMP=$(cat timestamp)
161         # do we have the dir still?
162         if [ -d ${scriptdir}/i18n/${TSTAMP} ]; then
163             # Lets check!
164             if ${scriptsdir}/ddtp-i18n-check.sh . ${scriptdir}/i18n/${TSTAMP}; then
165                 # Yay, worked, lets copy around
166                 for dir in squeeze sid; do
167                     if [ -d dists/${dir}/ ]; then
168                         cd dists/${dir}/main/i18n
169                         rsync -aq --delete --delete-after  . ${ftpdir}/dists/${dir}/main/i18n/.
170                     fi
171                     cd ${scriptdir}/i18nsync
172                 done
173             else
174                 echo "ARRRR, bad guys, wrong files, ARRR"
175                 echo "Arf, Arf, Arf, bad guys, wrong files, arf, arf, arf" | mail -s "Don't you kids take anything. I'm watching you. I've got eye implants in the back of my head." debian-l10n-devel@lists.alioth.debian.org
176             fi
177         else
178             echo "ARRRR, missing the timestamp ${TSTAMP} directory, not updating i18n, ARRR"
179             echo "Arf, Arf, Arf, missing the timestamp ${TSTAMP} directory, not updating i18n, arf, arf, arf" | mail -s "Lisa, if you don't like your job you don't strike. You just go in every day and do it really half-assed. That's the American way." debian-l10n-devel@lists.alioth.debian.org
180         fi
181     else
182         echo "ARRRRRRR, could not verify our timestamp signature, ARRR. Don't mess with our files, i18n guys, ARRRRR."
183         echo "Arf, Arf, Arf, could not verify our timestamp signature, arf. Don't mess with our files, i18n guys, arf, arf, arf" | mail -s "You can't keep blaming yourself. Just blame yourself once, and move on." debian-l10n-devel@lists.alioth.debian.org
184     fi
185 }
186
187 # Process the accepted queue
188 function accepted() {
189     log "Processing queue/accepted"
190     rm -f "$accepted/REPORT"
191     dak process-accepted -pa -d "$accepted" > "$accepted/REPORT"
192     cat "$accepted/REPORT" | mail -s "Install for $(date +"%D - %R")" ftpmaster@ftp-master.debian.org
193     chgrp debadmin "$accepted/REPORT"
194     chmod 664 "$accepted/REPORT"
195 }
196
197 function cruft() {
198     log "Checking for cruft in overrides"
199     dak check-overrides
200
201     log "Fixing symlinks in $ftpdir"
202     symlinks -d -r $ftpdir
203 }
204
205 function msfl() {
206     log "Generating suite file lists for apt-ftparchive"
207     dak make-suite-file-list
208 }
209
210 function fingerprints() {
211     log "Updating fingerprints"
212     dak import-keyring -L /srv/keyring.debian.org/keyrings/debian-keyring.gpg
213 }
214
215 function overrides() {
216     log "Writing overrides into text files"
217     cd $overridedir
218     dak make-overrides
219
220     # FIXME
221     rm -f override.sid.all3
222     for i in main contrib non-free main.debian-installer; do cat override.sid.$i >> override.sid.all3; done
223 }
224
225 function mpfm() {
226     log "Generating package / file mapping"
227     dak make-pkg-file-mapping | bzip2 -9 > $base/ftp/indices/package-file.map.bz2
228 }
229
230 function packages() {
231     log "Generating Packages and Sources files"
232     cd $configdir
233     apt-ftparchive generate apt.conf
234 }
235
236 function pdiff() {
237     log "Generating pdiff files"
238     dak generate-index-diffs
239 }
240
241 function release() {
242     log "Generating Release files"
243     dak generate-releases
244 }
245
246 function dakcleanup() {
247     log "Cleanup old packages/files"
248     dak clean-suites -m 10000
249     dak clean-queues
250 }
251
252 function buildd() {
253     # Needs to be rebuilt, as files have moved.  Due to unaccepts, we need to
254     # update this before wanna-build is updated.
255     log "Regenerating wanna-build/buildd information"
256     psql projectb -A -t -q -c "SELECT filename FROM queue_build WHERE suite = 5 AND queue = 0 AND in_queue = true AND filename ~ 'd(sc|eb)$'" > $dbdir/dists/unstable_accepted.list
257     symlinks -d /srv/incoming.debian.org/buildd > /dev/null
258     apt-ftparchive generate apt.conf.buildd
259 }
260
261 function buildd_dir() {
262     # Rebuilt the buildd dir to avoid long times of 403
263     log "Regenerating the buildd incoming dir"
264     STAMP=$(date "+%Y%m%d%H%M")
265     make_buildd_dir
266 }
267
268 function scripts() {
269     log "Running various scripts from $scriptsdir"
270     cd $scriptsdir
271     ./mkmaintainers
272     ./copyoverrides
273     ./mklslar
274     ./mkfilesindices
275     ./mkchecksums
276 }
277
278 function mirror() {
279     echo "Regenerating \"public\" mirror/ hardlink fun"
280     cd ${mirrordir}
281     rsync -aH --link-dest ${ftpdir} --exclude Archive_Maintenance_In_Progress --delete --delete-after --ignore-errors ${ftpdir}/. .
282 }
283
284 function wb() {
285     log "Trigger daily wanna-build run"
286     ssh -o BatchMode=yes -o SetupTimeOut=90 -o ConnectTimeout=90 wbadm@buildd /org/wanna-build/trigger.daily || echo "W-B trigger.daily failed" | mail -s "W-B Daily trigger failed" ftpmaster@ftp-master.debian.org
287 }
288
289 function expire() {
290     log "Expiring old database dumps..."
291     cd $base/backup
292     $scriptsdir/expire_dumps -d . -p -f "dump_*"
293 }
294
295 function transitionsclean() {
296     log "Removing out of date transitions..."
297     cd $base
298     dak transitions -c -a
299 }
300
301 function reports() {
302     # Send a report on NEW/BYHAND packages
303     log "Nagging ftpteam about NEW/BYHAND packages"
304     dak queue-report | mail -e -s "NEW and BYHAND on $(date +%D)" ftpmaster@ftp-master.debian.org
305     # and one on crufty packages
306     log "Sending information about crufty packages"
307     dak cruft-report > $webdir/cruft-report-daily.txt
308     dak cruft-report -s experimental >> $webdir/cruft-report-daily.txt
309     cat $webdir/cruft-report-daily.txt | mail -e -s "Debian archive cruft report for $(date +%D)" ftpmaster@ftp-master.debian.org
310 }
311
312 function dm() {
313     log "Updating DM html page"
314     $scriptsdir/dm-monitor >$webdir/dm-uploaders.html
315 }
316
317 function bts() {
318     log "Categorizing uncategorized bugs filed against ftp.debian.org"
319     dak bts-categorize
320 }
321
322 function merkel2() {
323     # Push dak@merkel so it syncs the projectb there. Returns immediately, the sync runs detached
324     log "Trigger merkel/flotows projectb sync"
325     ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_projectb dak@merkel.debian.org sleep 1
326     # Also trigger flotow, the ftpmaster test box
327     ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_flotow_projectb dak@flotow.debconf.org sleep 1
328 }
329
330 function merkel3() {
331     # Push dak@merkel to tell it to sync the dd accessible parts. Returns immediately, the sync runs detached
332     log "Trigger merkels dd accessible parts sync"
333     ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_ddaccess dak@merkel.debian.org sleep 1
334 }
335
336 function runparts() {
337     log "Using run-parts to run scripts in $base/scripts/distmnt"
338     run-parts --report $base/scripts/distmnt
339 }
340
341 function i18n2() {
342     log "Exporting package data foo for i18n project"
343     STAMP=$(date "+%Y%m%d%H%M")
344     mkdir -p ${scriptdir}/i18n/${STAMP}
345     cd ${scriptdir}/i18n/${STAMP}
346     dak control-suite -l stable > lenny
347     dak control-suite -l testing > squeeze
348     dak control-suite -l unstable > sid
349     echo "${STAMP}" > timestamp
350     gpg --secret-keyring /srv/ftp.debian.org/s3kr1t/dot-gnupg/secring.gpg --keyring /srv/ftp.debian.org/s3kr1t/dot-gnupg/pubring.gpg --no-options --batch --no-tty --armour --default-key 55BE302B --detach-sign -o timestamp.gpg timestamp
351     rm -f md5sum
352     md5sum * > md5sum
353     cd ${webdir}/
354     ln -sfT ${scriptdir}/i18n/${STAMP} i18n
355
356     cd ${scriptdir}
357     find ./i18n -mindepth 1 -maxdepth 1 -mtime +2 -not -name "${STAMP}" -type d -print0 | xargs --no-run-if-empty -0 rm -rf
358 }
359
360 function stats() {
361     log "Updating stats data"
362     cd $configdir
363     $scriptsdir/update-ftpstats $base/log/* > $base/misc/ftpstats.data
364     R --slave --vanilla < $base/misc/ftpstats.R
365     dak stats arch-space > $webdir/arch-space
366     dak stats pkg-nums > $webdir/pkg-nums
367 }
368
369 function aptftpcleanup() {
370     log "Clean up apt-ftparchive's databases"
371     cd $configdir
372     apt-ftparchive -q clean apt.conf
373 }
374
375 function compress() {
376     log "Compress old psql backups"
377     cd $base/backup/
378     find -maxdepth 1 -mindepth 1 -type f -name 'dump_pre_*' -mtime +2 -print0 | xargs -0 --no-run-if-empty rm
379
380     find -maxdepth 1 -mindepth 1 -type f -name 'dump_*' \! -name '*.bz2' \! -name '*.gz' -mmin +720 |
381     while read dumpname; do
382         echo "Compressing $dumpname"
383         bzip2 -9fv "$dumpname"
384     done
385     find -maxdepth 1 -mindepth 1 -type f -name "dumpall_*" \! -name '*.bz2' \! -name '*.gz' -mmin +720 |
386     while read dumpname; do
387         echo "Compressing $dumpname"
388         bzip2 -9fv "$dumpname"
389     done
390     finddup -l -d $base/backup
391 }
392
393 function logstats() {
394     $masterdir/tools/logs.py "$1"
395 }
396
397 # save timestamp when we start
398 function savetimestamp() {
399         NOW=`date "+%Y.%m.%d-%H:%M:%S"`
400         echo ${NOW} > "${dbdir}/dinstallstart"
401 }
402
403 function maillogfile() {
404     cat "$LOGFILE" | mail -s "Log for dinstall run of ${NOW}" cron@ftp-master.debian.org
405 }
406
407 function renamelogfile() {
408     if [ -f "${dbdir}/dinstallstart" ]; then
409         NOW=$(cat "${dbdir}/dinstallstart")
410         maillogfile
411         mv "$LOGFILE" "$logdir/dinstall_${NOW}.log"
412         logstats "$logdir/dinstall_${NOW}.log"
413         bzip2 -9 "$logdir/dinstall_${NOW}.log"
414     else
415         error "Problem, I don't know when dinstall started, unable to do log statistics."
416         NOW=`date "+%Y.%m.%d-%H:%M:%S"`
417         maillogfile
418         mv "$LOGFILE" "$logdir/dinstall_${NOW}.log"
419         bzip2 -9 "$logdir/dinstall_${NOW}.log"
420     fi
421 }
422
423 function testingsourcelist() {
424     dak ls -s testing -f heidi -r .| egrep 'source$' > ${webdir}/testing.list
425 }
426
427 # do a last run of process-unchecked before dinstall is on.
428 function process_unchecked() {
429     log "Processing the unchecked queue"
430     acceptnew
431     UNCHECKED_WITHOUT_LOCK="-p"
432     do_unchecked
433     sync_debbugs
434 }
435
436 ########################################################################
437 ########################################################################
438
439 # Function to save which stage we are in, so we can restart an interrupted
440 # dinstall. Or even run actions in parallel, if we dare to, by simply
441 # backgrounding the call to this function. But that should only really be
442 # done for things we don't care much about.
443 #
444 # This should be called with the first argument being an array, with the
445 # members
446 #  - FUNC - the function name to call
447 #  - ARGS - Possible arguments to hand to the function. Can be the empty string
448 #  - TIME - The timestamp name. Can be the empty string
449 #  - ERR  - if this is the string false, then the call will be surrounded by
450 #           set +e ... set -e calls, so errors in the function do not exit
451 #           dinstall. Can be the empty string, meaning true.
452 #
453 # MAKE SURE TO KEEP THIS THE LAST FUNCTION, AFTER ALL THE VARIOUS ONES
454 # ADDED FOR DINSTALL FEATURES!
455 function stage() {
456     ARGS='GO[@]'
457     local "${!ARGS}"
458
459     error=${ERR:-"false"}
460
461     STAGEFILE="${stagedir}/${FUNC}"
462     if [ -f "${STAGEFILE}" ]; then
463         stamptime=$(/usr/bin/stat -c %Z "${STAGEFILE}")
464         unixtime=$(date +%s)
465         difference=$(( $unixtime - $stamptime ))
466         if [ ${difference} -ge 14400 ]; then
467             log_error "Did already run ${FUNC}, stagefile exists, but that was ${difference} seconds ago. Please check."
468         else
469             log "Did already run ${FUNC}, not calling again..."
470         fi
471         return
472     fi
473
474     debug "Now calling function ${FUNC}. Arguments: ${ARGS}. Timestamp: ${TIME}"
475
476     # Make sure we are always at the same place. If a function wants to be elsewhere,
477     # it has to cd first!
478     cd ${configdir}
479
480     # Now redirect the output into $STAGEFILE.log. In case it errors out somewhere our
481     # errorhandler trap can then mail the contents of $STAGEFILE.log only, instead of a whole
482     # dinstall logfile. Short error mails ftw!
483     exec >> "${STAGEFILE}.log" 2>&1
484
485     if [ -f "${LOCK_STOP}" ]; then
486         log "${LOCK_STOP} exists, exiting immediately"
487         exit 42
488     fi
489
490     if [ "${error}" = "false" ]; then
491         set +e
492     fi
493     ${FUNC} ${ARGS}
494
495     # No matter what happened in the function, we make sure we have set -e default state back
496     set -e
497
498     # Make sure we are always at the same place.
499     cd ${configdir}
500
501     touch "${STAGEFILE}"
502
503     if [ -n "${TIME}" ]; then
504         ts "${TIME}"
505     fi
506
507     # And the output goes back to the normal logfile
508     exec >> "$LOGFILE" 2>&1
509
510     # Now we should make sure that we have a usable dinstall.log, so append the $STAGEFILE.log
511     # to it.
512     cat "${STAGEFILE}.log" >> "${LOGFILE}"
513     rm -f "${STAGEFILE}.log"
514
515     if [ -f "${LOCK_STOP}" ]; then
516         log "${LOCK_STOP} exists, exiting immediately"
517         exit 42
518     fi
519 }
520
521 ########################################################################
522
523 # We need logs.
524 LOGFILE="$logdir/dinstall.log"
525
526 exec >> "$LOGFILE" 2>&1
527
528 # usually we are not using debug logs. Set to 1 if you want them.
529 DEBUG=0
530
531 # our name
532 PROGRAM="dinstall"
533
534 # where do we want mails to go? For example log entries made with error()
535 if [ "x$(hostname -s)x" != "xriesx" ]; then
536     # Not our ftpmaster host
537     MAILTO=${MAILTO:-"root"}
538 else
539     # Yay, ftpmaster
540     MAILTO=${MAILTO:-"ftpmaster@debian.org"}
541 fi
542
543 # How many logfiles to keep
544 LOGROTATE=${LOGROTATE:-400}
545
546 # Marker for dinstall start
547 DINSTALLSTART="${lockdir}/dinstallstart"
548 # Marker for dinstall end
549 DINSTALLEND="${lockdir}/dinstallend"
550
551 touch "${DINSTALLSTART}"
552 ts "startup"
553
554 # Tell everyone we are doing some work
555 NOTICE="$ftpdir/Archive_Maintenance_In_Progress"
556
557 # lock cron.unchecked (it immediately exits when this exists)
558 LOCK_DAILY="$lockdir/daily.lock"
559
560 # Lock cron.unchecked from doing work
561 LOCK_ACCEPTED="$lockdir/unchecked.lock"
562
563 # Lock process-new from doing work
564 LOCK_NEW="$lockdir/processnew.lock"
565
566 # This file is simply used to indicate to britney whether or not
567 # the Packages file updates completed sucessfully.  It's not a lock
568 # from our point of view
569 LOCK_BRITNEY="$lockdir/britney.lock"
570
571 # If this file exists we exit immediately after the currently running
572 # function is done
573 LOCK_STOP="$lockdir/archive.stop"
574
575 lockfile -l 3600 "${LOCK_DAILY}"
576 trap onerror ERR
577 trap cleanup EXIT TERM HUP INT QUIT
578
579 touch "${LOCK_BRITNEY}"
580
581 GO=(
582     FUNC="savetimestamp"
583     TIME=""
584     ARGS=""
585     ERR="false"
586 )
587 stage $GO
588
589 GO=(
590     FUNC="notice"
591     TIME=""
592     ARGS=""
593     ERR="false"
594 )
595 stage $GO
596
597 GO=(
598     FUNC="merkel1"
599     TIME="init"
600     ARGS=""
601     ERR="false"
602 )
603 stage $GO &
604
605 GO=(
606     FUNC="pgdump_pre"
607     TIME="pg_dump1"
608     ARGS=""
609     ERR=""
610 )
611 stage $GO
612
613 GO=(
614     FUNC="updates"
615     TIME="External Updates"
616     ARGS=""
617     ERR="false"
618 )
619 stage $GO
620
621 GO=(
622     FUNC="punew"
623     TIME="p-u-new"
624     ARGS="p-u-new"
625     ERR=""
626 )
627 stage $GO
628
629 GO=(
630     FUNC="opunew"
631     TIME="o-p-u-new"
632     ARGS="o-p-u-new"
633     ERR=""
634 )
635 stage $GO
636
637 GO=(
638     FUNC="i18n1"
639     TIME="i18n 1"
640     ARGS=""
641     ERR="false"
642 )
643 stage $GO
644
645 lockfile "$LOCK_ACCEPTED"
646 lockfile "$LOCK_NEW"
647
648 GO=(
649     FUNC="process_unchecked"
650     TIME=""
651     ARGS=""
652     ERR=""
653 )
654 stage $GO
655
656
657 GO=(
658     FUNC="accepted"
659     TIME="accepted"
660     ARGS=""
661     ERR=""
662 )
663 stage $GO
664
665 GO=(
666     FUNC="buildd_dir"
667     TIME="buildd_dir"
668     ARGS=""
669     ERR="false"
670 )
671 stage $GO
672
673 GO=(
674     FUNC="cruft"
675     TIME="cruft"
676     ARGS=""
677     ERR=""
678 )
679 stage $GO
680
681 rm -f "$LOCK_ACCEPTED"
682 rm -f "$LOCK_NEW"
683
684 GO=(
685     FUNC="msfl"
686     TIME="make-suite-file-list"
687     ARGS=""
688     ERR=""
689 )
690 stage $GO
691
692 GO=(
693     FUNC="fingerprints"
694     TIME="import-keyring"
695     ARGS=""
696     ERR="false"
697 )
698 stage $GO
699
700 GO=(
701     FUNC="overrides"
702     TIME="overrides"
703     ARGS=""
704     ERR=""
705 )
706 stage $GO
707
708 GO=(
709     FUNC="mpfm"
710     TIME="pkg-file-mapping"
711     ARGS=""
712     ERR="false"
713 )
714 stage $GO
715
716 GO=(
717     FUNC="packages"
718     TIME="apt-ftparchive"
719     ARGS=""
720     ERR=""
721 )
722 stage $GO
723
724 GO=(
725     FUNC="pdiff"
726     TIME="pdiff"
727     ARGS=""
728     ERR=""
729 )
730 stage $GO
731
732 GO=(
733     FUNC="release"
734     TIME="release files"
735     ARGS=""
736     ERR=""
737 )
738 stage $GO
739
740 GO=(
741     FUNC="dakcleanup"
742     TIME="cleanup"
743     ARGS=""
744     ERR=""
745 )
746 stage $GO
747
748 GO=(
749     FUNC="buildd"
750     TIME="buildd"
751     ARGS=""
752     ERR=""
753 )
754 stage $GO
755
756 GO=(
757     FUNC="scripts"
758     TIME="scripts"
759     ARGS=""
760     ERR=""
761 )
762 stage $GO
763
764 GO=(
765     FUNC="mirror"
766     TIME="mirror hardlinks"
767     ARGS=""
768     ERR=""
769 )
770 stage $GO
771
772 GO=(
773     FUNC="wb"
774     TIME="w-b"
775     ARGS=""
776     ERR=""
777 )
778 stage $GO
779
780 rm -f "${NOTICE}"
781 rm -f "${LOCK_DAILY}"
782
783 ts "locked part finished"
784
785 GO=(
786     FUNC="pgdump_post"
787     TIME="pg_dump2"
788     ARGS=""
789     ERR=""
790 )
791 stage $GO
792
793 GO=(
794     FUNC="expire"
795     TIME="expire_dumps"
796     ARGS=""
797     ERR=""
798 )
799 stage $GO
800
801 GO=(
802     FUNC="transitionsclean"
803     TIME="transitionsclean"
804     ARGS=""
805     ERR=""
806 )
807 stage $GO
808
809 GO=(
810     FUNC="reports"
811     TIME="reports"
812     ARGS=""
813     ERR=""
814 )
815 stage $GO
816
817 GO=(
818     FUNC="dm"
819     TIME=""
820     ARGS=""
821     ERR=""
822 )
823 stage $GO
824
825 GO=(
826     FUNC="bts"
827     TIME=""
828     ARGS=""
829     ERR="false"
830 )
831 stage $GO
832
833 GO=(
834     FUNC="merkel2"
835     TIME="merkel projectb push"
836     ARGS=""
837     ERR="false"
838 )
839 stage $GO
840
841 GO=(
842     FUNC="runparts"
843     TIME="run-parts"
844     ARGS=""
845     ERR="false"
846 )
847 stage $GO
848
849 GO=(
850     FUNC="i18n2"
851     TIME="i18n 2"
852     ARGS=""
853     ERR="false"
854 )
855 stage $GO
856
857 GO=(
858     FUNC="stats"
859     TIME="stats"
860     ARGS=""
861     ERR="false"
862 )
863 stage $GO
864
865 GO=(
866     FUNC="testingsourcelist"
867     TIME=""
868     ARGS=""
869     ERR="false"
870 )
871 stage $GO
872
873 rm -f ${LOCK_BRITNEY}
874
875 GO=(
876     FUNC="pgdakdev"
877     TIME="dak-dev db"
878     ARGS=""
879     ERR="false"
880 )
881 stage $GO &
882
883 GO=(
884     FUNC="aptftpcleanup"
885     TIME="apt-ftparchive cleanup"
886     ARGS=""
887     ERR="false"
888 )
889 stage $GO
890
891 GO=(
892     FUNC="merkel3"
893     TIME="merkel ddaccessible sync"
894     ARGS=""
895     ERR="false"
896 )
897 stage $GO
898
899 GO=(
900     FUNC="compress"
901     TIME="compress"
902     ARGS=""
903     ERR=""
904 )
905 stage $GO
906
907 log "Daily cron scripts successful, all done"
908
909 exec > "$logdir/afterdinstall.log" 2>&1
910
911 GO=(
912     FUNC="renamelogfile"
913     TIME=""
914     ARGS=""
915     ERR="false"
916 )
917 stage $GO
918
919
920 # Now, at the very (successful) end of dinstall, make sure we remove
921 # our stage files, so the next dinstall run will do it all again.
922 rm -f ${stagedir}/*
923 touch "${DINSTALLEND}"