]> git.decadent.org.uk Git - dak.git/blob - config/debian/cron.dinstall
dinstall
[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     make_buildd_dir
242 }
243
244 function scripts() {
245     log "Running various scripts from $scriptsdir"
246     cd $scriptsdir
247     ./mkmaintainers
248     ./copyoverrides
249     ./mklslar
250     ./mkfilesindices
251     ./mkchecksums
252 }
253
254 function mirror() {
255     echo "Regenerating \"public\" mirror/ hardlink fun"
256     cd ${mirrordir}
257     rsync -aH --link-dest ${ftpdir} --delete --delete-after --ignore-errors ${ftpdir}/. .
258 }
259
260 function wb() {
261     log "Trigger daily wanna-build run"
262     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
263 }
264
265 function expire() {
266     log "Expiring old database dumps..."
267     cd $base/backup
268     $scriptsdir/expire_dumps -d . -p -f "dump_*"
269 }
270
271 function reports() {
272     # Send a report on NEW/BYHAND packages
273     log "Nagging ftpteam about NEW/BYHAND packages"
274     dak queue-report | mail -e -s "NEW and BYHAND on $(date +%D)" ftpmaster@ftp-master.debian.org
275     # and one on crufty packages
276     log "Sending information about crufty packages"
277     dak cruft-report > $webdir/cruft-report-daily.txt
278     dak cruft-report -s experimental >> $webdir/cruft-report-daily.txt
279     cat $webdir/cruft-report-daily.txt | mail -e -s "Debian archive cruft report for $(date +%D)" ftpmaster@ftp-master.debian.org
280 }
281
282 function dm() {
283     log "Updating DM html page"
284     $scriptsdir/dm-monitor >$webdir/dm-uploaders.html
285 }
286
287 function bts() {
288     log "Categorizing uncategorized bugs filed against ftp.debian.org"
289     dak bts-categorize
290 }
291
292 function merkel2() {
293     # Push dak@merkel so it syncs the projectb there. Returns immediately, the sync runs detached
294     log "Trigger merkels projectb sync"
295     ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_projectb dak@merkel.debian.org sleep 1
296 }
297
298 function merkel3() {
299     # Push dak@merkel to tell it to sync the dd accessible parts. Returns immediately, the sync runs detached
300     log "Trigger merkels dd accessible parts sync"
301     ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_ddaccess dak@merkel.debian.org sleep 1
302 }
303
304 function runparts() {
305     log "Using run-parts to run scripts in $base/scripts/distmnt"
306     run-parts --report $base/scripts/distmnt
307 }
308
309 function i18n2() {
310     log "Exporting package data foo for i18n project"
311     STAMP=$(date "+%Y%m%d%H%M")
312     mkdir -p ${scriptdir}/i18n/${STAMP}
313     cd ${scriptdir}/i18n/${STAMP}
314     dak control-suite -l stable > lenny
315     dak control-suite -l testing > squeeze
316     dak control-suite -l unstable > sid
317     echo "${STAMP}" > timestamp
318     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
319     rm -f md5sum
320     md5sum * > md5sum
321     cd ${webdir}/
322     ln -sfT ${scriptdir}/i18n/${STAMP} i18n
323
324     cd ${scriptdir}
325     find ./i18n -mindepth 1 -maxdepth 1 -mtime +2 -not -name "${STAMP}" -type d -print0 | xargs --no-run-if-empty -0 rm -rf
326 }
327
328 function stats() {
329     log "Updating stats data"
330     cd $configdir
331     $scriptsdir/update-ftpstats $base/log/* > $base/misc/ftpstats.data
332     R --slave --vanilla < $base/misc/ftpstats.R
333     dak stats arch-space > $webdir/arch-space
334     dak stats pkg-nums > $webdir/pkg-nums
335 }
336
337 function aptftpcleanup() {
338     log "Clean up apt-ftparchive's databases"
339     cd $configdir
340     apt-ftparchive -q clean apt.conf
341 }
342
343 function compress() {
344     log "Compress old psql backups"
345     cd $base/backup/
346     find -maxdepth 1 -mindepth 1 -type f -name 'dump_pre_*' -mtime +2 -print0 | xargs -0 --no-run-if-empty rm
347
348     find -maxdepth 1 -mindepth 1 -type f -name 'dump_*' \! -name '*.bz2' \! -name '*.gz' -mmin 720 |
349     while read dumpname; do
350         echo "Compressing $dumpname"
351         bzip2 -9v "$dumpname"
352     done
353     find -maxdepth 1 -mindepth 1 -type f -name "dumpall_*" \! -name '*.bz2' \! -name '*.gz' -mmin 720 |
354     while read dumpname; do
355         echo "Compressing $dumpname"
356         bzip2 -9v "$dumpname"
357     done
358     finddup -l -d $base/backup
359 }
360
361 function logstats() {
362     $masterdir/tools/logs.py "$1"
363 }
364
365 # save timestamp when we start
366 function savetimestamp() {
367         NOW=`date "+%Y.%m.%d-%H:%M:%S"`
368         echo ${NOW} > "${dbdir}/dinstallstart"
369 }
370
371 function maillogfile() {
372     cat "$LOGFILE" | mail -s "Log for dinstall run of ${NOW}" cron@ftp-master.debian.org
373 }
374
375 function renamelogfile() {
376     if [ -f "${dbdir}/dinstallstart" ]; then
377         NOW=$(cat "${dbdir}/dinstallstart")
378         maillogfile
379     mv "$LOGFILE" "$logdir/dinstall_${NOW}.log"
380         logstats "$logdir/dinstall_${NOW}.log"
381         bzip2 -9 "$logdir/dinstall_${NOW}.log"
382     else
383         error "Problem, I don't know when dinstall started, unable to do log statistics."
384         NOW=`date "+%Y.%m.%d-%H:%M:%S"`
385         maillogfile
386         mv "$LOGFILE" "$logdir/dinstall_${NOW}.log"
387         bzip2 -9 "$logdir/dinstall_${NOW}.log"
388     fi
389 }
390
391 function testingsourcelist() {
392     dak ls -s testing -f heidi -r .| egrep 'source$' > ${webdir}/testing.list
393 }
394 ########################################################################
395 ########################################################################
396
397 # Function to save which stage we are in, so we can restart an interrupted
398 # dinstall. Or even run actions in parallel, if we dare to, by simply
399 # backgrounding the call to this function. But that should only really be
400 # done for things we dont care much about.
401 #
402 # This should be called with the first argument being an array, with the
403 # members
404 #  - FUNC - the function name to call
405 #  - ARGS - Possible arguments to hand to the function. Can be the empty string
406 #  - TS   - The timestamp name. Can be the empty string
407 #  - ERR  - if this is the string false, then the call will be surrounded by
408 #           set +e ... set -e calls, so errors in the function do not exit
409 #           dinstall. Can be the empty string, meaning true.
410 #
411 # MAKE SURE TO KEEP THIS THE LAST FUNCTION, AFTER ALL THE VARIOUS ONES
412 # ADDED FOR DINSTALL FEATURES!
413 function stage() {
414     ARGS='GO[@]'
415     local "${!ARGS}"
416
417     if [ -f "${stagedir}/${FUNC}" ]; then
418         stamptime=$(/usr/bin/stat -c %Z "${stagedir}/${FUNC}")
419         unixtime=$(date +%s)
420         difference=$(( $unixtime - $stamptime ))
421         if [ ${difference} -ge 14400 ]; then
422             log_error "Did already run ${FUNC}, stagefile exists, but that was ${difference} seconds ago. Please check."
423         else
424             log "Did already run ${FUNC}, not calling again..."
425         fi
426         return
427     fi
428
429     debug "Now calling function ${FUNC}. Arguments: ${ARGS}. Timestamp: ${TS}"
430
431     # Make sure we are always at the same place. If a function wants to be elsewhere,
432     # it has to cd first!
433     cd ${configdir}
434
435     if [ -f "${LOCK_STOP}" ]; then
436         log "${LOCK_STOP} exists, exiting immediately"
437         exit 42
438     fi
439
440     if [ "${ERR}" = "false" ]; then
441         set +e
442     fi
443     ${FUNC} ${ARGS}
444
445     # No matter what happened in the function, we make sure we have set -e default state back
446     set -e
447
448     # Make sure we are always at the same place.
449     cd ${configdir}
450
451     touch "${stagedir}/${FUNC}"
452
453     if [ -n "${TIME}" ]; then
454         ts "${TIME}"
455     fi
456
457     if [ -f "${LOCK_STOP}" ]; then
458         log "${LOCK_STOP} exists, exiting immediately"
459         exit 42
460     fi
461 }
462
463 ########################################################################
464
465 # We need logs.
466 LOGFILE="$logdir/dinstall.log"
467
468 exec >> "$LOGFILE" 2>&1
469
470 # usually we are not using debug logs. Set to 1 if you want them.
471 DEBUG=0
472
473 # our name
474 PROGRAM="dinstall"
475
476 # where do we want mails to go? For example log entries made with error()
477 if [ "x$(hostname -s)x" != "xriesx" ]; then
478     # Not our ftpmaster host
479     MAILTO=${MAILTO:-"root"}
480 else
481     # Yay, ftpmaster
482     MAILTO=${MAILTO:-"ftpmaster@debian.org"}
483 fi
484
485 # How many logfiles to keep
486 LOGROTATE=${LOGROTATE:-400}
487
488 # Marker for dinstall start
489 DINSTALLSTART="${lockdir}/dinstallstart"
490 # Marker for dinstall end
491 DINSTALLEND="${lockdir}/dinstallend"
492
493 # Timestamps start at -1. so first gets 0
494 TS=-1
495 touch "${DINSTALLSTART}"
496 ts "startup"
497
498 # Tell everyone we are doing some work
499 NOTICE="$ftpdir/Archive_Maintenance_In_Progress"
500
501 # lock cron.unchecked (it immediately exits when this exists)
502 LOCK_DAILY="$lockdir/daily.lock"
503
504 # Lock process-new and cron.unchecked from doing work
505 LOCK_ACCEPTED="$lockdir/unchecked.lock"
506
507 # This file is simply used to indicate to britney whether or not
508 # the Packages file updates completed sucessfully.  It's not a lock
509 # from our point of view
510 LOCK_BRITNEY="$lockdir/britney.lock"
511
512 # If this file exists we exit immediately after the currently running
513 # function is done
514 LOCK_STOP="$lockdir/archive.stop"
515
516 lockfile -l 3600 "${LOCK_DAILY}"
517 trap onerror ERR
518 trap cleanup EXIT TERM HUP INT QUIT
519
520 touch "${LOCK_BRITNEY}"
521
522 GO=(
523     FUNC="savetimestamp"
524     TIME=""
525     ARGS=""
526     ERR="false"
527 )
528 stage $GO
529
530 GO=(
531     FUNC="notice"
532     TIME=""
533     ARGS=""
534     ERR="false"
535 )
536 stage $GO
537
538 GO=(
539     FUNC="merkel1"
540     TIME="init"
541     ARGS=""
542     ERR="false"
543 )
544 stage $GO
545
546 GO=(
547     FUNC="pgdump_pre"
548     TIME="pg_dump1"
549     ARGS=""
550     ERR=""
551 )
552 stage $GO
553
554 GO=(
555     FUNC="updates"
556     TIME="External Updates"
557     ARGS=""
558     ERR="false"
559 )
560 stage $GO
561
562 GO=(
563     FUNC="punew"
564     TIME="p-u-new"
565     ARGS="p-u-new"
566     ERR=""
567 )
568 stage $GO
569
570 GO=(
571     FUNC="opunew"
572     TIME="o-p-u-new"
573     ARGS="o-p-u-new"
574     ERR=""
575 )
576 stage $GO
577
578 GO=(
579     FUNC="i18n1"
580     TIME="i18n 1"
581     ARGS=""
582     ERR="false"
583 )
584 stage $GO
585
586 lockfile "$LOCK_ACCEPTED"
587
588 GO=(
589     FUNC="accepted"
590     TIME="accepted"
591     ARGS=""
592     ERR=""
593 )
594 stage $GO
595
596 GO=(
597     FUNC="buildd_dir"
598     TIME="buildd_dir"
599     ARGS=""
600     ERR="false"
601 )
602 stage $GO
603
604 GO=(
605     FUNC="cruft"
606     TIME="cruft"
607     ARGS=""
608     ERR=""
609 )
610 stage $GO
611
612 rm -f "$LOCK_ACCEPTED"
613
614 GO=(
615     FUNC="msfl"
616     TIME="make-suite-file-list"
617     ARGS=""
618     ERR=""
619 )
620 stage $GO
621
622 GO=(
623     FUNC="fingerprints"
624     TIME="import-keyring"
625     ARGS=""
626     ERR="false"
627 )
628 stage $GO
629
630 GO=(
631     FUNC="overrides"
632     TIME="overrides"
633     ARGS=""
634     ERR=""
635 )
636 stage $GO
637
638 GO=(
639     FUNC="mpfm"
640     TIME="pkg-file-mapping"
641     ARGS=""
642     ERR="false"
643 )
644 stage $GO
645
646 GO=(
647     FUNC="packages"
648     TIME="apt-ftparchive"
649     ARGS=""
650     ERR=""
651 )
652 stage $GO
653
654 GO=(
655     FUNC="pdiff"
656     TIME="pdiff"
657     ARGS=""
658     ERR=""
659 )
660 stage $GO
661
662 GO=(
663     FUNC="release"
664     TIME="release files"
665     ARGS=""
666     ERR=""
667 )
668 stage $GO
669
670 GO=(
671     FUNC="dakcleanup"
672     TIME="cleanup"
673     ARGS=""
674     ERR=""
675 )
676 stage $GO
677
678 GO=(
679     FUNC="buildd"
680     TIME="buildd"
681     ARGS=""
682     ERR=""
683 )
684 stage $GO
685
686 GO=(
687     FUNC="scripts"
688     TIME="scripts"
689     ARGS=""
690     ERR=""
691 )
692 stage $GO
693
694 GO=(
695     FUNC="mirror"
696     TIME="mirror hardlinks"
697     ARGS=""
698     ERR=""
699 )
700 stage $GO
701
702 GO=(
703     FUNC="wb"
704     TIME="w-b"
705     ARGS=""
706     ERR=""
707 )
708 stage $GO
709
710 rm -f "${NOTICE}"
711 rm -f "${LOCK_DAILY}"
712
713 ts "locked part finished"
714
715 GO=(
716     FUNC="pgdump_post"
717     TIME="pg_dump2"
718     ARGS=""
719     ERR=""
720 )
721 stage $GO
722
723 GO=(
724     FUNC="expire"
725     TIME="expire_dumps"
726     ARGS=""
727     ERR=""
728 )
729 stage $GO
730
731 GO=(
732     FUNC="reports"
733     TIME="reports"
734     ARGS=""
735     ERR=""
736 )
737 stage $GO
738
739 GO=(
740     FUNC="dm"
741     TIME=""
742     ARGS=""
743     ERR=""
744 )
745 stage $GO
746
747 GO=(
748     FUNC="bts"
749     TIME=""
750     ARGS=""
751     ERR="false"
752 )
753 stage $GO
754
755 GO=(
756     FUNC="merkel2"
757     TIME="merkel projectb push"
758     ARGS=""
759     ERR="false"
760 )
761 stage $GO
762
763 GO=(
764     FUNC="runparts"
765     TIME="run-parts"
766     ARGS=""
767     ERR="false"
768 )
769 stage $GO
770
771 GO=(
772     FUNC="i18n2"
773     TIME="i18n 2"
774     ARGS=""
775     ERR="false"
776 )
777 stage $GO
778
779 GO=(
780     FUNC="stats"
781     TIME="stats"
782     ARGS=""
783     ERR="false"
784 )
785 stage $GO
786
787 GO=(
788     FUNC="testingsourcelist"
789     TIME=""
790     ARGS=""
791     ERR="false"
792 )
793 stage $GO
794
795 rm -f ${LOCK_BRITNEY}
796
797 GO=(
798     FUNC="pgdakdev"
799     TIME="dak-dev db"
800     ARGS=""
801     ERR="false"
802 )
803 stage $GO
804
805 GO=(
806     FUNC="aptftpcleanup"
807     TIME="apt-ftparchive cleanup"
808     ARGS=""
809     ERR=""
810 )
811 stage $GO
812
813 GO=(
814     FUNC="merkel3"
815     TIME="merkel ddaccessible sync"
816     ARGS=""
817     ERR="false"
818 )
819 stage $GO
820
821 GO=(
822     FUNC="compress"
823     TIME="compress"
824     ARGS=""
825     ERR=""
826 )
827 stage $GO
828
829 log "Daily cron scripts successful, all done"
830
831 exec > "$logdir/afterdinstall.log" 2>&1
832
833 GO=(
834     FUNC="renamelogfile"
835     TIME=""
836     ARGS=""
837     ERR="false"
838 )
839 stage $GO
840
841
842 # Now, at the very (successful) end of dinstall, make sure we remove
843 # our stage files, so the next dinstall run will do it all again.
844 rm -f ${stagedir}/*
845 touch "${DINSTALLEND}"