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