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