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