]> git.decadent.org.uk Git - dak.git/blob - config/debian/cron.dinstall
Merge branch 'psycopg2' into content_generation
[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 ($1): $(date +%H:%M:%S)"
19 }
20
21 TS=-1
22 ts "startup"
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 "init"
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 ts "pg_dump1"
65
66 ################################################################################
67
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 ts "External Updates"
75
76 ################################################################################
77
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 ts "p-u-new"
84
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 ts "o-p-u-new"
91
92 ################################################################################
93
94 # Temporary until lenny is there
95 dak control-suite -s lenny-r0 /srv/ftp.debian.org/misc/lenny-r0.txt
96
97 echo "Synchronizing i18n package descriptions"
98 # First sync their newest data
99 cd ${scriptdir}/i18nsync
100 rsync -aq --delete --delete-after ddtp-sync:/does/not/matter . || true
101
102 # Now check if we still know about the packages for which they created the files
103 # is the timestamp signed by us?
104 if $(gpgv --keyring /srv/ftp.debian.org/s3kr1t/dot-gnupg/pubring.gpg timestamp.gpg timestamp); then
105     # now read it. As its signed by us we are sure the content is what we expect, no need
106         # to do more here. And we only test -d a directory on it anyway.
107     TSTAMP=$(cat timestamp)
108     # do we have the dir still?
109     if [ -d ${scriptdir}/i18n/${TSTAMP} ]; then
110         # Lets check!
111         if ${scriptsdir}/ddtp-i18n-check.sh . ${scriptdir}/i18n/${TSTAMP}; then
112                         # Yay, worked, lets copy around
113                         for dir in lenny sid; do
114                                 if [ -d dists/${dir}/ ]; then
115                                         cd dists/${dir}/main/i18n
116                                         rsync -aq --delete --delete-after  . ${ftpdir}/dists/${dir}/main/i18n/.
117                                 fi
118                                 cd ${scriptdir}/i18nsync
119                         done
120                 else
121                         echo "ARRRR, bad guys, wrong files, ARRR"
122                         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
123                 fi
124     else
125                 echo "ARRRR, missing the timestamp ${TSTAMP} directory, not updating i18n, ARRR"
126                 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
127         fi
128 else
129     echo "ARRRRRRR, could not verify our timestamp signature, ARRR. Don't mess with our files, i18n guys, ARRRRR."
130         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
131 fi
132 ts "i18n 1"
133
134 ################################################################################
135
136 lockfile $LOCKAC
137 lockac=1
138 echo "Processing queue/accepted"
139 cd $accepted
140 rm -f REPORT
141 dak process-accepted -pa *.changes | tee REPORT | \
142      mail -s "Install for $(date +%D)" ftpmaster@ftp-master.debian.org
143 chgrp debadmin REPORT
144 chmod 664 REPORT
145 ts "accepted"
146
147 echo "Checking for cruft in overrides"
148 dak check-overrides
149 rm -f $LOCKAC
150 lockac=0
151
152 echo "Fixing symlinks in $ftpdir"
153 symlinks -d -r $ftpdir
154 ts "cruft"
155
156 echo "Generating suite file lists for apt-ftparchive"
157 dak make-suite-file-list
158 ts "make-suite-file-list"
159
160 echo "Updating fingerprints"
161 # Update fingerprints
162 dak import-keyring -L /srv/keyring.debian.org/keyrings/debian-keyring.gpg || true
163 ts "import-keyring"
164
165 # Generate override files
166 echo "Writing overrides into text files"
167 cd $overridedir
168 dak make-overrides
169
170 # FIXME
171 rm -f override.sid.all3
172 for i in main contrib non-free main.debian-installer; do cat override.sid.$i >> override.sid.all3; done
173 ts "overrides"
174
175 # Generate package / file mapping
176 echo "Generating package / file mapping"
177 dak make-pkg-file-mapping | bzip2 -9 > $base/ftp/indices/package-file.map.bz2
178 ts "pkg-file-mapping"
179
180 # Generate Packages and Sources files
181 echo "Generating Packages and Sources files"
182 cd $configdir
183 apt-ftparchive generate apt.conf
184 ts "apt-ftparchive"
185
186 # Generate *.diff/ incremental updates
187 echo "Generating pdiff files"
188 dak generate-index-diffs
189 ts "pdiff"
190
191 # Generate Release files
192 echo "Generating Release files"
193 dak generate-releases
194 ts "release files"
195
196 # Clean out old packages
197 echo "Cleanup old packages/files"
198 dak clean-suites
199 dak clean-queues
200 ts "cleanup"
201
202 # Needs to be rebuilt, as files have moved.  Due to unaccepts, we need to
203 # update this before wanna-build is updated.
204 echo "Regenerating wanna-build/buildd information"
205 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
206 symlinks -d /srv/incoming.debian.org/buildd > /dev/null
207 apt-ftparchive generate apt.conf.buildd
208 ts "buildd"
209
210 echo "Running various scripts from $scriptsdir"
211 cd $scriptsdir
212 ./mkmaintainers
213 ./copyoverrides
214 ./mklslar
215 ./mkfilesindices
216 ./mkchecksums
217 ts "scripts"
218
219 # (Re)generate the hardlinked mirror directory for "public" buildd / mirror access
220 echo "Regenerating mirror/ hardlink fun"
221 cd ${mirrordir}
222 rsync -aH --link-dest ${ftpdir} --delete --delete-after --ignore-errors ${ftpdir}/. .
223 ts "mirror hardlinks"
224
225 echo "Trigger daily wanna-build run"
226 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
227 ts "w-b"
228
229 rm -f $NOTICE
230 rm -f $LOCKCU
231
232 ts "locked part finished"
233
234 ################################################################################
235
236 echo "Creating post-daily-cron-job backup of projectb database..."
237 POSTDUMP=$base/backup/dump_$(date +%Y.%m.%d-%H:%M:%S)
238 pg_dump projectb > $POSTDUMP
239 (cd $base/backup; ln -sf $POSTDUMP current)
240 ts "pg_dump2"
241
242 ################################################################################
243
244
245 echo "Expiring old database dumps..."
246 (cd $base/backup; $scriptsdir/expire_dumps -d . -p -f "dump_*")
247 ts "expire_dumps"
248
249 ################################################################################
250
251
252 # Send a report on NEW/BYHAND packages
253 echo "Nagging ftpteam about NEW/BYHAND packages"
254 dak queue-report | mail -e -s "NEW and BYHAND on $(date +%D)" ftpmaster@ftp-master.debian.org
255 # and one on crufty packages
256 echo "Sending information about crufty packages"
257 dak cruft-report > $webdir/cruft-report-daily.txt
258 dak cruft-report -s experimental >> $webdir/cruft-report-daily.txt
259 cat $webdir/cruft-report-daily.txt | mail -e -s "Debian archive cruft report for $(date +%D)" ftpmaster@ftp-master.debian.org
260 ts "reports"
261
262 echo "Updating DM html page"
263 $scriptsdir/dm-monitor >$webdir/dm-uploaders.html
264
265 echo "Categorizing uncategorized bugs filed against ftp.debian.org"
266 dak bts-categorize
267
268 ################################################################################
269
270 # Push katie@merkel so it syncs the projectb there. Returns immediately, the sync runs detached
271 echo "Trigger merkels projectb sync"
272 ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_projectb katie@merkel.debian.org sleep 1 || true
273 ts "merkel projectb push"
274
275 ################################################################################
276
277
278 ulimit -m 90000 -d 90000 -s 10000 -v 200000
279
280 echo "Using run-parts to run scripts in $base/scripts/distmnt"
281 run-parts --report $base/scripts/distmnt
282 ts "run-parts"
283
284 echo "Exporting package data foo for i18n project"
285 STAMP=$(date "+%Y%m%d%H%M")
286 mkdir -p ${scriptdir}/i18n/${STAMP}
287 cd ${scriptdir}/i18n/${STAMP}
288 dak control-suite -l stable > etch
289 dak control-suite -l testing > lenny
290 dak control-suite -l unstable > sid
291 echo "${STAMP}" > timestamp
292 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
293 rm -f md5sum
294 md5sum * > md5sum
295 cd ${webdir}/
296 ln -sfT ${scriptdir}/i18n/${STAMP} i18n
297
298 cd ${scriptdir}
299 find ./i18n -mtime +2 -mindepth 1 -maxdepth 1 -not -name "${STAMP}" -type d -print0 | xargs --no-run-if-empty -0 rm -rf
300 ts "i18n 2"
301
302 echo "Daily cron scripts successful."
303
304 # Stats pr0n
305 echo "Updating stats data"
306 cd $configdir
307 $scriptsdir/update-ftpstats $base/log/* > $base/misc/ftpstats.data
308 R --slave --vanilla < $base/misc/ftpstats.R
309 ts "stats"
310
311 # Remove the britney lock
312 rm -f ${BRITNEYLOCK}
313
314 # Clean up apt-ftparchive's databases
315 echo "Clean up apt-ftparchive's databases"
316 cd $configdir
317 apt-ftparchive -q clean apt.conf
318 ts "apt-ftparchive cleanup"
319
320 # Compress psql backups
321 echo "Compress old psql backups"
322 (cd $base/backup/
323         find -maxdepth 1 -mindepth 1 -type f -name 'dump_*' \! -name '*.bz2' \! -name '*.gz' -mtime +1 | 
324         while read dumpname; do
325                 echo "Compressing $dumpname"
326                 bzip2 -9 "$dumpname"
327         done
328 )
329 ts "compress"
330
331 echo "Removing old dinstall logfiles"
332 (cd $logdir
333         find -maxdepth 1 -mindepth 1 -type f -name 'dinstall_*' -mtime +60 | 
334         while read dumpname; do
335                 echo "Removing $dumpname"
336                 rm -f "$dumpname"
337         done
338
339         find -maxdepth 1 -mindepth 1 -type f -name 'weekly_*' -mtime +60 | 
340         while read dumpname; do
341                 echo "Removing $dumpname"
342                 rm -f "$dumpname"
343         done
344 )
345 ts "logremove"
346
347 echo "Finally, all is done, sending mail and compressing logfile"
348 exec > /dev/null 2>&1
349
350 $masterdir/tools/logs.py "$LOGFILE"
351
352 cat "$LOGFILE" | mail -s "Log for dinstall run of ${NOW}" cron@ftp-master.debian.org
353 bzip2 -9 "$LOGFILE"
354
355 ################################################################################