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