]> git.donarmstrong.com Git - dak.git/blob - config/debian/cron.dinstall
de44fe5f05ac7e98e4a1e30a9c1bc6be19a68a05
[dak.git] / config / debian / cron.dinstall
1 #! /bin/sh
2 #
3 # Executed daily via cron, out of dak's crontab.
4
5 set -e
6 export SCRIPTVARS=/srv/ftp.debian.org/dak/config/debian/vars
7 . $SCRIPTVARS
8
9 ################################################################################
10
11 # Start logging
12 NOW=`date "+%Y.%m.%d-%H:%M:%S"`
13 LOGFILE="$logdir/dinstall_${NOW}.log"
14 exec > "$LOGFILE" 2>&1
15
16 ts() {
17         TS=$(($TS+1));
18         echo Archive maintenance timestamp $TS: $(date +%H:%M:%S)
19 }
20
21 echo Archive maintenance started at $(date +%H:%M:%S)
22 TS=0
23
24 NOTICE="$ftpdir/Archive_Maintenance_In_Progress"
25 LOCKCU="$lockdir/daily.lock"
26 LOCKAC="$lockdir/unchecked.lock"
27 BRITNEYLOCK="$lockdir/britney.lock"
28 lockac=0
29
30 cleanup() {
31   rm -f "$NOTICE"
32   rm -f "$LOCKCU"
33   if [ "$lockac" -eq "1" ]; then
34     rm -f "$LOCKAC"
35   fi
36   echo "Cleanup"
37 }
38 lockfile -l 3600 $LOCKCU
39 trap cleanup 0
40
41 # This file is simply used to indicate to britney whether or not
42 # the Packages file updates completed sucessfully.  It's not a lock
43 # from our point of view
44 touch ${BRITNEYLOCK}
45
46 rm -f "$NOTICE"
47 cat > "$NOTICE" <<EOF
48 Packages are currently being installed and indices rebuilt.
49 Maintenance is automatic, starting at 07:52 and 19:52 UTC, and
50 ending about an hour later.  This file is then removed.
51
52 You should not mirror the archive during this period.
53 EOF
54
55 # Push merkels qa user, so the qa pages can show "dinstall is running" information
56 echo "Telling merkels QA user that we start dinstall"
57 ssh -2 -i ~dak/.ssh/push_merkel_qa  -o BatchMode=yes -o SetupTimeOut=90 -o ConnectTimeout=90 qa@merkel.debian.org sleep 1 || true
58 ts
59
60 ################################################################################
61
62 echo "Creating pre-daily-cron-job backup of projectb database..."
63 pg_dump projectb > $base/backup/dump_$(date +%Y.%m.%d-%H:%M:%S)
64
65 ################################################################################
66
67 ts
68 echo "Updating Bugs docu, Mirror list and mailing-lists.txt"
69 cd $configdir
70 $scriptsdir/update-bugdoctxt
71 $scriptsdir/update-mirrorlists
72 $scriptsdir/update-mailingliststxt
73 $scriptsdir/update-pseudopackages.sh
74
75 ################################################################################
76
77 ts
78 echo "Doing automated p-u-new processing"
79 cd $queuedir/p-u-new
80 date -u -R >> REPORT
81 dak process-new -a -C COMMENTS >> REPORT || true
82 echo >> REPORT
83
84 ts
85 echo "Doing automated o-p-u-new processing"
86 cd $queuedir/o-p-u-new
87 date -u -R >> REPORT
88 dak process-new -a -C COMMENTS >> REPORT || true
89 echo >> REPORT
90
91 ################################################################################
92
93 ts
94
95 echo "Synchronizing i18n package descriptions"
96 # First sync their newest data
97 cd ${scriptdir}/i18nsync
98 rsync -aq --delete --delete-after ddtp-sync:/does/not/matter . || true
99
100 # Now check if we still know about the packages for which they created the files
101 # is the timestamp signed by us?
102 if $(gpgv --keyring /srv/ftp.debian.org/s3kr1t/dot-gnupg/pubring.gpg timestamp.gpg timestamp); then
103     # now read it. As its signed by us we are sure the content is what we expect, no need
104         # to do more here. And we only test -d a directory on it anyway.
105     TSTAMP=$(cat timestamp)
106     # do we have the dir still?
107     if [ -d ${scriptdir}/i18n/${TSTAMP} ]; then
108         # Lets check!
109         if ${scriptsdir}/ddtp-i18n-check.sh . ${scriptdir}/i18n/${TSTAMP}; then
110                         # Yay, worked, lets copy around
111                         for dir in lenny sid; do
112                                 if [ -d dists/${dir}/ ]; then
113                                         cd dists/${dir}/main/i18n
114                                         rsync -aq --delete --delete-after  . ${ftpdir}/dists/${dir}/main/i18n/.
115                                 fi
116                                 cd ${scriptdir}/i18nsync
117                         done
118                 else
119                         echo "ARRRR, bad guys, wrong files, ARRR"
120                         echo "Arf, Arf, Arf, bad guys, wrong files, arf, arf, arf" | mail debian-l10n-devel@lists.alioth.debian.org
121                 fi
122     else
123                 echo "ARRRR, missing the timestamp ${TSTAMP} directory, not updating i18n, ARRR"
124                 echo "Arf, Arf, Arf, missing the timestamp ${TSTAMP} directory, not updating i18n, arf, arf, arf" | mail debian-l10n-devel@lists.alioth.debian.org
125         fi
126 else
127     echo "ARRRRRRR, could not verify our timestamp signature, ARRR. Don't mess with our files, i18n guys, ARRRRR."
128         echo "Arf, Arf, Arf, could not verify our timestamp signature, arf. Don't mess with our files, i18n guys, arf, arf, arf" | mail debian-l10n-devel@lists.alioth.debian.org
129 fi
130
131 ################################################################################
132
133 ts
134 lockfile $LOCKAC
135 lockac=1
136 echo "Processing queue/accepted"
137 cd $accepted
138 rm -f REPORT
139 dak process-accepted -pa *.changes | tee REPORT | \
140      mail -s "Install for $(date +%D)" ftpmaster@ftp-master.debian.org
141 chgrp debadmin REPORT
142 chmod 664 REPORT
143
144 ts
145 echo "Checking for cruft in overrides"
146 dak check-overrides
147 rm -f $LOCKAC
148 lockac=0
149
150 echo "Fixing symlinks in $ftpdir"
151 symlinks -d -r $ftpdir
152
153 ts
154
155 echo "Generating suite file lists for apt-ftparchive"
156 dak make-suite-file-list
157
158 ts
159
160 echo "Updating fingerprints"
161 # Update fingerprints
162 dak import-keyring -L /srv/keyring.debian.org/keyrings/debian-keyring.gpg || true
163
164 ts
165
166 # Generate override files
167 echo "Writing overrides into text files"
168 cd $overridedir
169 dak make-overrides
170
171 ts
172
173 # FIXME
174 rm -f override.sid.all3
175 for i in main contrib non-free main.debian-installer; do cat override.sid.$i >> override.sid.all3; done
176
177 ts
178
179 # Generate Packages and Sources files
180 echo "Generating Packages and Sources files"
181 cd $configdir
182 apt-ftparchive generate apt.conf
183
184 ts
185
186 # Generate *.diff/ incremental updates
187 echo "Generating pdiff files"
188 dak generate-index-diffs
189
190 ts
191
192 # Generate Release files
193 echo "Generating Release files"
194 dak generate-releases
195
196 ts
197
198 # Clean out old packages
199 echo "Cleanup old packages/files"
200 dak clean-suites
201 dak clean-queues
202
203 ts
204
205 # Needs to be rebuilt, as files have moved.  Due to unaccepts, we need to
206 # update this before wanna-build is updated.
207 echo "Regenerating wanna-build/buildd information"
208 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
209 symlinks -d /srv/incoming.debian.org/buildd > /dev/null
210 apt-ftparchive generate apt.conf.buildd
211
212 ts
213
214 echo "Running various scripts from $scriptsdir"
215 cd $scriptsdir
216 ./mkmaintainers
217 ./copyoverrides
218 ./mklslar
219 ./mkfilesindices
220 ./mkchecksums
221
222 ts
223
224 # (Re)generate the hardlinked mirror directory for "public" buildd / mirror access
225 echo "Regenerating mirror/ hardlink fun"
226 cd ${mirrordir}
227 rsync -aH --link-dest ${ftpdir} --delete --delete-after --ignore-errors ${ftpdir}/. .
228
229
230 ts
231
232 echo "Trigger daily wanna-build run"
233 ssh -o BatchMode=yes -o SetupTimeOut=90 -o ConnectTimeout=90 buildd@buildd /org/wanna-build/trigger.daily || echo "W-B trigger.daily failed" | mail -s "W-B Daily trigger failed" ftpmaster@ftp-master.debian.org
234
235 rm -f $NOTICE
236 rm -f $LOCKCU
237 echo Archive maintenance finished at $(date +%H:%M:%S)
238
239 ################################################################################
240
241 echo "Creating post-daily-cron-job backup of projectb database..."
242 POSTDUMP=$base/backup/dump_$(date +%Y.%m.%d-%H:%M:%S)
243 pg_dump projectb > $POSTDUMP
244 (cd $base/backup; ln -sf $POSTDUMP current)
245
246 ################################################################################
247
248 ts
249
250 echo "Expiring old database dumps..."
251 (cd $base/backup; $scriptsdir/expire_dumps -d . -p -f "dump_*")
252
253 ################################################################################
254
255 ts
256
257 # Send a report on NEW/BYHAND packages
258 echo "Nagging ftpteam about NEW/BYHAND packages"
259 dak queue-report | mail -e -s "NEW and BYHAND on $(date +%D)" ftpmaster@ftp-master.debian.org
260 # and one on crufty packages
261 echo "Sending information about crufty packages"
262 dak cruft-report > $webdir/cruft-report-daily.txt
263 dak cruft-report -s experimental >> $webdir/cruft-report-daily.txt
264 cat $webdir/cruft-report-daily.txt | mail -e -s "Debian archive cruft report for $(date +%D)" ftpmaster@ftp-master.debian.org
265
266 ts
267
268 echo "Updating DM html page"
269 $scriptsdir/dm-monitor >$webdir/dm-uploaders.html
270
271 ################################################################################
272
273 # Push katie@merkel so it syncs the projectb there. Returns immediately, the sync runs detached
274 echo "Trigger merkels projectb sync"
275 ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_projectb katie@merkel.debian.org sleep 1 || true
276
277 ################################################################################
278
279 ts
280
281 ulimit -m 90000 -d 90000 -s 10000 -v 200000
282
283 echo "Using run-parts to run scripts in $base/scripts/distmnt"
284 run-parts --report $base/scripts/distmnt
285
286 ts
287
288 echo "Exporting package data foo for i18n project"
289 STAMP=$(date "+%Y%m%d%H%M")
290 mkdir -p ${scriptdir}/i18n/${STAMP}
291 cd ${scriptdir}/i18n/${STAMP}
292 dak control-suite -l stable > etch
293 dak control-suite -l testing > lenny
294 dak control-suite -l unstable > sid
295 echo "${STAMP}" > timestamp
296 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
297 rm -f md5sum
298 md5sum * > md5sum
299 cd ${webdir}/
300 ln -sfT ${scriptdir}/i18n/${STAMP} i18n
301
302 cd ${scriptdir}
303 find ./i18n -mtime +2 -mindepth 1 -maxdepth 1 -not -name "${STAMP}" -type d -print0 | xargs --no-run-if-empty -0 rm -rf
304
305 ts
306
307 echo "Daily cron scripts successful."
308
309 ts
310
311 # Stats pr0n
312 echo "Updating stats data"
313 cd $configdir
314 $scriptsdir/update-ftpstats $base/log/* > $base/misc/ftpstats.data
315 R --slave --vanilla < $base/misc/ftpstats.R
316
317 ts
318
319 # Remove the britney lock
320 rm -f ${BRITNEYLOCK}
321
322 # Clean up apt-ftparchive's databases
323 echo "Clean up apt-ftparchive's databases"
324 cd $configdir
325 apt-ftparchive -q clean apt.conf
326
327 ts
328
329 # Compress psql backups
330 echo "Compress old psql backups"
331 (cd $base/backup/
332         find -maxdepth 1 -mindepth 1 -type f -name 'dump_*' \! -name '*.bz2' \! -name '*.gz' -mtime +1 | 
333         while read dumpname; do
334                 echo "Compressing $dumpname"
335                 bzip2 -9 "$dumpname"
336         done
337 )
338
339 ts
340
341 echo "Finally, all is done, sending mail and compressing logfile"
342 exec > /dev/null 2>&1
343
344 cat "$LOGFILE" | mail -s "Log for dinstall run of ${NOW}" cron@ftp-master.debian.org
345 bzip2 -9 "$LOGFILE"
346
347 ################################################################################