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