]> git.decadent.org.uk Git - dak.git/blob - config/debian/cron.dinstall
dbfcd1bb42a33ffe44957f229cd97fbe1f016182
[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 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 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 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
176 # Generate Packages and Sources files
177 echo "Generating Packages and Sources files"
178 cd $configdir
179 apt-ftparchive generate apt.conf
180 ts "apt-ftparchive"
181
182 # Generate *.diff/ incremental updates
183 echo "Generating pdiff files"
184 dak generate-index-diffs
185 ts "pdiff"
186
187 # Generate Release files
188 echo "Generating Release files"
189 dak generate-releases
190 ts "release files"
191
192 # Clean out old packages
193 echo "Cleanup old packages/files"
194 dak clean-suites
195 dak clean-queues
196 ts "cleanup"
197
198 # Needs to be rebuilt, as files have moved.  Due to unaccepts, we need to
199 # update this before wanna-build is updated.
200 echo "Regenerating wanna-build/buildd information"
201 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
202 symlinks -d /srv/incoming.debian.org/buildd > /dev/null
203 apt-ftparchive generate apt.conf.buildd
204 ts "buildd"
205
206 echo "Running various scripts from $scriptsdir"
207 cd $scriptsdir
208 ./mkmaintainers
209 ./copyoverrides
210 ./mklslar
211 ./mkfilesindices
212 ./mkchecksums
213 ts "scripts"
214
215 # (Re)generate the hardlinked mirror directory for "public" buildd / mirror access
216 echo "Regenerating mirror/ hardlink fun"
217 cd ${mirrordir}
218 rsync -aH --link-dest ${ftpdir} --delete --delete-after --ignore-errors ${ftpdir}/. .
219 ts "mirror hardlinks"
220
221 echo "Trigger daily wanna-build run"
222 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
223 ts "w-b"
224
225 rm -f $NOTICE
226 rm -f $LOCKCU
227
228 ts "locked part finished"
229
230 ################################################################################
231
232 echo "Creating post-daily-cron-job backup of projectb database..."
233 POSTDUMP=$base/backup/dump_$(date +%Y.%m.%d-%H:%M:%S)
234 pg_dump projectb > $POSTDUMP
235 (cd $base/backup; ln -sf $POSTDUMP current)
236 ts "pg_dump2"
237
238 ################################################################################
239
240
241 echo "Expiring old database dumps..."
242 (cd $base/backup; $scriptsdir/expire_dumps -d . -p -f "dump_*")
243 ts "expire_dumps"
244
245 ################################################################################
246
247
248 # Send a report on NEW/BYHAND packages
249 echo "Nagging ftpteam about NEW/BYHAND packages"
250 dak queue-report | mail -e -s "NEW and BYHAND on $(date +%D)" ftpmaster@ftp-master.debian.org
251 # and one on crufty packages
252 echo "Sending information about crufty packages"
253 dak cruft-report > $webdir/cruft-report-daily.txt
254 dak cruft-report -s experimental >> $webdir/cruft-report-daily.txt
255 cat $webdir/cruft-report-daily.txt | mail -e -s "Debian archive cruft report for $(date +%D)" ftpmaster@ftp-master.debian.org
256 ts "reports"
257
258 echo "Updating DM html page"
259 $scriptsdir/dm-monitor >$webdir/dm-uploaders.html
260
261 echo "Categorizing uncategorized bugs filed against ftp.debian.org"
262 dak bts-categorize
263
264 ################################################################################
265
266 # Push katie@merkel so it syncs the projectb there. Returns immediately, the sync runs detached
267 echo "Trigger merkels projectb sync"
268 ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_projectb katie@merkel.debian.org sleep 1 || true
269 ts "merkel projectb push"
270
271 ################################################################################
272
273
274 ulimit -m 90000 -d 90000 -s 10000 -v 200000
275
276 echo "Using run-parts to run scripts in $base/scripts/distmnt"
277 run-parts --report $base/scripts/distmnt
278 ts "run-parts"
279
280 echo "Exporting package data foo for i18n project"
281 STAMP=$(date "+%Y%m%d%H%M")
282 mkdir -p ${scriptdir}/i18n/${STAMP}
283 cd ${scriptdir}/i18n/${STAMP}
284 dak control-suite -l stable > etch
285 dak control-suite -l testing > lenny
286 dak control-suite -l unstable > sid
287 echo "${STAMP}" > timestamp
288 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
289 rm -f md5sum
290 md5sum * > md5sum
291 cd ${webdir}/
292 ln -sfT ${scriptdir}/i18n/${STAMP} i18n
293
294 cd ${scriptdir}
295 find ./i18n -mtime +2 -mindepth 1 -maxdepth 1 -not -name "${STAMP}" -type d -print0 | xargs --no-run-if-empty -0 rm -rf
296 ts "i18n 2"
297
298 echo "Daily cron scripts successful."
299
300 # Stats pr0n
301 echo "Updating stats data"
302 cd $configdir
303 $scriptsdir/update-ftpstats $base/log/* > $base/misc/ftpstats.data
304 R --slave --vanilla < $base/misc/ftpstats.R
305 ts "stats"
306
307 # Remove the britney lock
308 rm -f ${BRITNEYLOCK}
309
310 # Clean up apt-ftparchive's databases
311 echo "Clean up apt-ftparchive's databases"
312 cd $configdir
313 apt-ftparchive -q clean apt.conf
314 ts "apt-ftparchive cleanup"
315
316 # Compress psql backups
317 echo "Compress old psql backups"
318 (cd $base/backup/
319         find -maxdepth 1 -mindepth 1 -type f -name 'dump_*' \! -name '*.bz2' \! -name '*.gz' -mtime +1 | 
320         while read dumpname; do
321                 echo "Compressing $dumpname"
322                 bzip2 -9 "$dumpname"
323         done
324 )
325 ts "compress"
326
327 echo "Removing old dinstall logfiles"
328 (cd $logdir
329         find -maxdepth 1 -mindepth 1 -type f -name 'dinstall_*' -mtime +60 | 
330         while read dumpname; do
331                 echo "Removing $dumpname"
332                 rm -f "$dumpname"
333         done
334
335         find -maxdepth 1 -mindepth 1 -type f -name 'weekly_*' -mtime +60 | 
336         while read dumpname; do
337                 echo "Removing $dumpname"
338                 rm -f "$dumpname"
339         done
340 )
341 ts "logremove"
342
343 echo "Finally, all is done, sending mail and compressing logfile"
344 exec > /dev/null 2>&1
345
346 $masterdir/tools/logs.py "$LOGFILE"
347
348 cat "$LOGFILE" | mail -s "Log for dinstall run of ${NOW}" cron@ftp-master.debian.org
349 bzip2 -9 "$LOGFILE"
350
351 ################################################################################