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