]> git.decadent.org.uk Git - dak.git/blob - config/debian/cron.dinstall
dont run gitpdiff right now
[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-master.debian.org/dak/config/debian/vars
39 . $SCRIPTVARS
40
41 ########################################################################
42 # Functions                                                            #
43 ########################################################################
44 # common functions are "outsourced"
45 . "${configdir}/common"
46
47 # source the dinstall functions
48 . "${configdir}/dinstall.functions"
49
50 ########################################################################
51 ########################################################################
52
53 # Function to save which stage we are in, so we can restart an interrupted
54 # dinstall. Or even run actions in parallel, if we dare to, by simply
55 # backgrounding the call to this function. But that should only really be
56 # done for things we don't care much about.
57 #
58 # This should be called with the first argument being an array, with the
59 # members
60 #  - FUNC - the function name to call
61 #  - ARGS - Possible arguments to hand to the function. Can be the empty string
62 #  - TIME - The timestamp name. Can be the empty string
63 #  - ERR  - if this is the string false, then the call will be surrounded by
64 #           set +e ... set -e calls, so errors in the function do not exit
65 #           dinstall. Can be the empty string, meaning true.
66 #
67 # MAKE SURE TO KEEP THIS THE LAST FUNCTION, AFTER ALL THE VARIOUS ONES
68 # ADDED FOR DINSTALL FEATURES!
69 function stage() {
70     ARGS='GO[@]'
71     local "${!ARGS}"
72
73     error=${ERR:-"true"}
74
75     STAGEFILE="${stagedir}/${FUNC}"
76     if [ -f "${STAGEFILE}" ]; then
77         stamptime=$(/usr/bin/stat -c %Z "${STAGEFILE}")
78         unixtime=$(date +%s)
79         difference=$(( $unixtime - $stamptime ))
80         if [ ${difference} -ge 14400 ]; then
81             log_error "Did already run ${FUNC}, stagefile exists, but that was ${difference} seconds ago. Please check."
82         else
83             log "Did already run ${FUNC}, not calling again..."
84         fi
85         return
86     fi
87
88     debug "Now calling function ${FUNC}. Arguments: ${ARGS}. Timestamp: ${TIME}"
89
90     # Make sure we are always at the same place. If a function wants to be elsewhere,
91     # it has to cd first!
92     cd ${configdir}
93
94     # Now redirect the output into $STAGEFILE.log. In case it errors out somewhere our
95     # errorhandler trap can then mail the contents of $STAGEFILE.log only, instead of a whole
96     # dinstall logfile. Short error mails ftw!
97     exec >> "${STAGEFILE}.log" 2>&1
98
99     if [ -f "${LOCK_STOP}" ]; then
100         log "${LOCK_STOP} exists, exiting immediately"
101         exit 42
102     fi
103
104     if [ "${error}" = "false" ]; then
105         set +e
106     fi
107     ${FUNC} ${ARGS}
108
109     # No matter what happened in the function, we make sure we have set -e default state back
110     set -e
111
112     # Make sure we are always at the same place.
113     cd ${configdir}
114
115     # We always use the same umask. If a function wants to do different, fine, but we reset.
116     umask 022
117
118     touch "${STAGEFILE}"
119
120     if [ -n "${TIME}" ]; then
121         ts "${TIME}"
122     fi
123
124     # And the output goes back to the normal logfile
125     exec >> "$LOGFILE" 2>&1
126
127     # Now we should make sure that we have a usable dinstall.log, so append the $STAGEFILE.log
128     # to it.
129     cat "${STAGEFILE}.log" >> "${LOGFILE}"
130     rm -f "${STAGEFILE}.log"
131
132     if [ -f "${LOCK_STOP}" ]; then
133         log "${LOCK_STOP} exists, exiting immediately"
134         exit 42
135     fi
136 }
137
138 ########################################################################
139
140 # We need logs.
141 LOGFILE="$logdir/dinstall.log"
142
143 exec >> "$LOGFILE" 2>&1
144
145 # And now source our default config
146 . "${configdir}/dinstall.variables"
147
148 # Make sure we start out with a sane umask setting
149 umask 022
150
151 # And use one locale, no matter what the caller has set
152 export LANG=C
153 export LC_ALL=C
154
155 touch "${DINSTALLSTART}"
156 ts "startup"
157 DINSTALLBEGIN="$(date -u +"%a %b %d %T %Z %Y (%s)")"
158 state "Startup"
159
160 lockfile -l 3600 "${LOCK_DAILY}"
161 trap onerror ERR
162 trap remove_daily_lock EXIT TERM HUP INT QUIT
163
164 touch "${LOCK_BRITNEY}"
165
166 GO=(
167     FUNC="savetimestamp"
168     TIME=""
169     ARGS=""
170     ERR="false"
171 )
172 stage $GO
173
174 GO=(
175     FUNC="qa1"
176     TIME="init"
177     ARGS=""
178     ERR="false"
179 )
180 stage $GO &
181
182 GO=(
183     FUNC="pg_timestamp"
184     TIME="pg_dump1"
185     ARGS="predinstall"
186     ERR=""
187 )
188 stage $GO
189
190 GO=(
191     FUNC="updates"
192     TIME="External Updates"
193     ARGS=""
194     ERR="false"
195 )
196 stage $GO
197
198 GO=(
199     FUNC="i18n1"
200     TIME="i18n 1"
201     ARGS=""
202     ERR="false"
203 )
204 stage $GO
205
206 lockfile "$LOCK_ACCEPTED"
207 lockfile "$LOCK_NEW"
208 trap remove_all_locks EXIT TERM HUP INT QUIT
209
210 GO=(
211     FUNC="punew"
212     TIME="p-u-new"
213     ARGS="proposedupdates"
214     ERR="false"
215 )
216 stage $GO
217
218 GO=(
219     FUNC="opunew"
220     TIME="o-p-u-new"
221     ARGS="oldproposedupdates"
222     ERR="false"
223 )
224 stage $GO
225
226 GO=(
227     FUNC="newstage"
228     TIME="newstage"
229     ARGS=""
230     ERR=""
231 )
232 stage $GO
233
234 GO=(
235     FUNC="cruft"
236     TIME="cruft"
237     ARGS=""
238     ERR=""
239 )
240 stage $GO
241
242 state "indices"
243
244 GO=(
245     FUNC="dominate"
246     TIME="dominate"
247     ARGS=""
248     ERR=""
249 )
250 stage $GO
251
252 GO=(
253     FUNC="filelist"
254     TIME="generate-filelist"
255     ARGS=""
256     ERR=""
257 )
258 #stage $GO
259
260 GO=(
261     FUNC="fingerprints"
262     TIME="import-keyring"
263     ARGS=""
264     ERR="false"
265 )
266 stage $GO
267
268 GO=(
269     FUNC="overrides"
270     TIME="overrides"
271     ARGS=""
272     ERR=""
273 )
274 stage $GO
275
276 GO=(
277     FUNC="mpfm"
278     TIME="pkg-file-mapping"
279     ARGS=""
280     ERR="false"
281 )
282 stage $GO
283
284 state "packages/contents"
285 GO=(
286     FUNC="packages"
287     TIME="apt-ftparchive"
288     ARGS=""
289     ERR=""
290 )
291 stage $GO
292
293 state "dists/"
294 GO=(
295     FUNC="pdiff"
296     TIME="pdiff"
297     ARGS=""
298     ERR=""
299 )
300 stage $GO
301
302 GO=(
303     FUNC="gitpdiff"
304     TIME="gitpdiff"
305     ARGS=""
306     ERR=""
307 )
308 #stage $GO
309
310 GO=(
311     FUNC="release"
312     TIME="release files"
313     ARGS=""
314     ERR=""
315 )
316 stage $GO
317
318 GO=(
319     FUNC="dakcleanup"
320     TIME="cleanup"
321     ARGS=""
322     ERR=""
323 )
324 stage $GO
325
326 GO=(
327     FUNC="buildd_dir"
328     TIME="buildd_dir"
329     ARGS=""
330     ERR=""
331 )
332 stage $GO
333
334 state "scripts"
335 GO=(
336     FUNC="mkmaintainers"
337     TIME="mkmaintainers"
338     ARGS=""
339     ERR=""
340 )
341 stage $GO
342
343 GO=(
344     FUNC="copyoverrides"
345     TIME="copyoverrides"
346     ARGS=""
347     ERR=""
348 )
349 stage $GO
350
351 GO=(
352     FUNC="mklslar"
353     TIME="mklslar"
354     ARGS=""
355     ERR=""
356 )
357 stage $GO
358
359 GO=(
360     FUNC="mkfilesindices"
361     TIME="mkfilesindices"
362     ARGS=""
363     ERR=""
364 )
365 stage $GO
366
367 GO=(
368     FUNC="mkchecksums"
369     TIME="mkchecksums"
370     ARGS=""
371     ERR=""
372 )
373 stage $GO
374
375 GO=(
376     FUNC="mirror"
377     TIME="mirror hardlinks"
378     ARGS=""
379     ERR=""
380 )
381 stage $GO
382
383 GO=(
384     FUNC="ddaccess"
385     TIME="ddaccessible sync"
386     ARGS=""
387     ERR="false"
388 )
389 stage $GO
390
391 remove_all_locks
392 trap - EXIT TERM HUP INT QUIT
393
394 ts "locked part finished"
395 state "postlock"
396
397 GO=(
398     FUNC="changelogs"
399     TIME="changelogs"
400     ARGS=""
401     ERR="false"
402 )
403 stage $GO &
404
405 GO=(
406     FUNC="pg_timestamp"
407     TIME="pg_dump2"
408     ARGS="postdinstall"
409     ERR=""
410 )
411 stage $GO
412
413 GO=(
414     FUNC="expire"
415     TIME="expire_dumps"
416     ARGS=""
417     ERR=""
418 )
419 stage $GO &
420
421 GO=(
422     FUNC="transitionsclean"
423     TIME="transitionsclean"
424     ARGS=""
425     ERR=""
426 )
427 stage $GO &
428
429 GO=(
430     FUNC="dm"
431     TIME=""
432     ARGS=""
433     ERR=""
434 )
435 stage $GO &
436
437 GO=(
438     FUNC="bts"
439     TIME=""
440     ARGS=""
441     ERR="false"
442 )
443 stage $GO &
444
445 GO=(
446     FUNC="mirrorpush"
447     TIME="mirrorpush"
448     ARGS=""
449     ERR="false"
450 )
451 stage $GO &
452
453 GO=(
454     FUNC="i18n2"
455     TIME="i18n 2"
456     ARGS=""
457     ERR="false"
458 )
459 stage $GO &
460
461 GO=(
462     FUNC="stats"
463     TIME="stats"
464     ARGS=""
465     ERR="false"
466 )
467 stage $GO &
468
469 GO=(
470     FUNC="testingsourcelist"
471     TIME=""
472     ARGS=""
473     ERR="false"
474 )
475 stage $GO &
476
477 rm -f "${LOCK_BRITNEY}"
478
479 GO=(
480     FUNC="cleantransactions"
481     TIME=""
482     ARGS=""
483     ERR=""
484 )
485 stage $GO
486
487 GO=(
488     FUNC="aptftpcleanup"
489     TIME="apt-ftparchive cleanup"
490     ARGS=""
491     ERR="false"
492 )
493 #stage $GO
494
495 # we need to wait for the background processes before the end of dinstall
496 wait
497
498 log "Daily cron scripts successful, all done"
499
500 exec > "$logdir/afterdinstall.log" 2>&1
501
502 GO=(
503     FUNC="renamelogfile"
504     TIME=""
505     ARGS=""
506     ERR="false"
507 )
508 stage $GO
509 state "all done"
510
511
512 # Now, at the very (successful) end of dinstall, make sure we remove
513 # our stage files, so the next dinstall run will do it all again.
514 rm -f ${stagedir}/*
515 touch "${DINSTALLEND}"