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