3 # Remove changelog lock
4 function remove_changelog_lock() {
9 function remove_all_locks() {
10 rm -f $LOCK_DAILY $LOCK_ACCEPTED
13 # Get rid of all locks and unset the trap
14 function remove_locks {
16 trap - EXIT TERM HUP INT QUIT
17 ts "locked part finished"
21 function lockaccepted {
22 lockfile "$LOCK_ACCEPTED"
23 trap remove_all_locks EXIT TERM HUP INT QUIT
26 # If we error out this one is called, *FOLLOWED* by cleanup in common
28 ERRDATE=$(date "+%Y.%m.%d-%H:%M:%S")
30 subject="ATTENTION ATTENTION!"
31 if [[ ${error} = false ]]; then
32 subject="${subject} (continued)"
34 subject="${subject} (interrupted)"
36 subject="${subject} dinstall error at ${ERRDATE} in ${STAGEFILE} - (Be quiet, Brain, or I'll stab you with a Q-tip)"
38 if [[ -r ${STAGEFILE}.log ]]; then
39 cat "${STAGEFILE}.log"
41 echo "file ${STAGEFILE}.log does not exist, sorry"
42 fi | mail -s "${subject}" -a "X-Debian: DAK" -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" cron@ftp-master.debian.org
45 ########################################################################
46 # the actual functions follow #
47 ########################################################################
49 # pushing merkels QA user, part one
51 log "Telling QA user that we start dinstall"
52 ssh -n -2 -i ~dak/.ssh/push_merkel_qa -o BatchMode=yes -o SetupTimeOut=90 -o ConnectTimeout=90 qa@qa.debian.org sleep 1
55 function mirrorlists() {
56 local mldir="${scriptdir}/mirrorlist"
57 local masterlist=${mldir}/Mirrors.masterlist
61 [[ -f ${HOME}/.cvspass ]] || touch ${HOME}/.cvspass
63 grep -q "anonscm.debian.org:/cvs/webwml" ~/.cvspass || \
64 echo ":pserver:anonymous@anonscm.debian.org:/cvs/webwml A" >> ${HOME}/.cvspass
68 if [[ ! -f ${ftpdir}/README.mirrors.html ]] || [[ ${masterlist} -nt ${ftpdir}/README.mirrors.html ]]; then
69 rm -f ${ftpdir}/README.mirrors.{html,txt}
70 ${mldir}/mirror_list.pl -m ${masterlist} -t html > ${ftpdir}/README.mirrors.html
71 ${mldir}/mirror_list.pl -m ${masterlist} -t text > ${ftpdir}/README.mirrors.txt
72 log Updated archive version of mirrors file
76 function mailingliststxt() {
79 log "Updating archive version of mailing-lists.txt"
80 wget ${wgetopts} https://www.debian.org/misc/mailing-lists.txt
83 function pseudopackages() {
84 cd ${scriptdir}/masterfiles
86 log "Updating archive version of pseudo-packages"
87 for file in maintainers description; do
88 wget ${wgetopts} https://bugs.debian.org/pseudopackages/pseudo-packages.${file}
92 # Updating various files
93 function bugdoctxt() {
94 log "Updating Bugs docu"
96 $scriptsdir/update-bugdoctxt
99 # The first i18n one, syncing new descriptions
101 log "Synchronizing i18n package descriptions"
102 # First sync their newest data
103 cd ${scriptdir}/i18nsync
104 rsync -aq --delete --delete-after ddtp-sync:/does/not/matter . || true
106 # Now check if we still know about the packages for which they created the files
107 # is the timestamp signed by us?
108 if $(gpgv --keyring /srv/ftp-master.debian.org/s3kr1t/dot-gnupg/pubring.gpg timestamp.gpg timestamp); then
109 # now read it. As its signed by us we are sure the content is what we expect, no need
110 # to do more here. And we only test -d a directory on it anyway.
111 TSTAMP=$(cat timestamp)
112 # do we have the dir still?
113 if [[ -d ${scriptdir}/i18n/${TSTAMP} ]]; then
115 if ${scriptsdir}/ddtp-i18n-check.sh . ${scriptdir}/i18n/${TSTAMP}; then
116 # Yay, worked, lets copy around
117 for dir in ${extimportdists}; do
118 if [[ -d dists/${dir}/ ]]; then
119 cd dists/${dir}/main/i18n
120 rsync -aq --delete --delete-after --exclude Translation-en.bz2 --exclude Translation-*.diff/ . ${ftpdir}/dists/${dir}/main/i18n/.
122 cd ${scriptdir}/i18nsync
125 echo "ARRRR, bad guys, wrong files, ARRR"
126 echo "Arf, Arf, Arf, bad guys, wrong files, arf, arf, arf" | mail -a "X-Debian: DAK" -s "Don't you kids take anything. I'm watching you. I've got eye implants in the back of my head." -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" debian-l10n-devel@lists.alioth.debian.org
129 echo "ARRRR, missing the timestamp ${TSTAMP} directory, not updating i18n, ARRR"
130 echo "Arf, Arf, Arf, missing the timestamp ${TSTAMP} directory, not updating i18n, arf, arf, arf" | mail -a "X-Debian: DAK" -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." -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" debian-l10n-devel@lists.alioth.debian.org
133 echo "ARRRRRRR, could not verify our timestamp signature, ARRR. Don't mess with our files, i18n guys, ARRRRR."
134 echo "Arf, Arf, Arf, could not verify our timestamp signature, arf. Don't mess with our files, i18n guys, arf, arf, arf" | mail -a "X-Debian: DAK" -s "You can't keep blaming yourself. Just blame yourself once, and move on." -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" debian-l10n-devel@lists.alioth.debian.org
138 # Syncing AppStream/DEP-11 data
140 log "Synchronizing AppStream metadata"
141 # First sync their newest data
142 local dep11dir="${scriptdir}/dep11"
145 rsync -aq --delete --delete-after dep11-sync:/does/not/matter . || true
148 if ${scriptsdir}/dep11-basic-validate.py . ${dep11dir}/; then
149 # Yay, worked, lets copy around
150 for dir in ${extimportdists}; do
151 if [[ -d ${dir}/ ]]; then
152 for comp in main contrib non-free; do
153 mkdir -p ${ftpdir}/dists/${dir}/${comp}/dep11
155 rsync -aq --delete --delete-after --exclude *.tmp . ${ftpdir}/dists/${dir}/${comp}/dep11/.
161 echo "ARRRR, bad guys, wrong files, ARRR"
162 echo "Arf, Arf, Arf, bad guys, wrong files, arf, arf, arf" | mail -a "X-Debian: DAK" -s "Don't you kids take anything. I'm watching you. I've got eye implants in the back of my head." -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" mak@debian.org
167 log "Checking for cruft in overrides"
171 function dominate() {
172 log "Removing obsolete source and binary associations"
174 dak manage-debug-suites unstable-debug experimental-debug
177 function autocruft() {
178 log "Check for obsolete binary packages"
179 dak auto-decruft -s unstable
180 dak auto-decruft -s experimental --if-newer-version-in unstable --if-newer-version-in-rm-msg "NVIU"
183 function fingerprints() {
184 log "Updating fingerprints"
185 dak import-keyring -L /srv/keyring.debian.org/keyrings/debian-keyring.gpg
187 OUTFILE=$( gettempfile )
188 dak import-keyring --generate-users "%s" /srv/keyring.debian.org/keyrings/debian-maintainers.gpg >"${OUTFILE}"
190 if [[ -s ${OUTFILE} ]]; then
191 /usr/sbin/sendmail -odq -oi -t -f envelope@ftp-master.debian.org <<EOF
192 From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>
193 To: <debian-project@lists.debian.org>
194 Subject: Debian Maintainers Keyring changes
195 Content-Type: text/plain; charset=utf-8
199 The following changes to the debian-maintainers keyring have just been activated:
203 Debian distribution maintenance software,
204 on behalf of the Keyring maintainers
211 function overrides() {
212 log "Writing overrides into text files"
220 log "Generating package / file mapping"
221 for archive in "${public_archives[@]}"; do
222 log " archive: ${archive}"
223 archiveroot="$(get_archiveroot "${archive}")"
224 dak make-pkg-file-mapping "${archive}" | bzip2 -9 > "${archiveroot}/indices/package-file.map.bz2"
228 function packages() {
229 for archive in "${public_archives[@]}"; do
230 log " Generating Packages/Sources for ${archive}"
231 dak generate-packages-sources2 -a "${archive}"
232 log " Generating Contents for ${archive}"
233 dak contents generate -a "${archive}"
238 log "Generating pdiff files"
239 dak generate-index-diffs
243 log "Generating Release files"
244 for archive in "${public_archives[@]}"; do
245 log " archive: ${archive}"
246 dak generate-releases -a "${archive}"
250 function dakcleanup() {
251 log "Cleanup old packages/files"
252 dak clean-suites -m 10000
253 dak clean-queues -i "$unchecked"
260 for archive in "${public_archives[@]}"; do
261 archiveroot="$(get_archiveroot "${archive}")"
264 log "Removing any core files ..."
265 find -type f -name core -print -delete
267 log "Checking symlinks ..."
270 log "Creating recursive directory listing ... "
272 TZ=UTC ls -lR | gzip -9c --rsyncable > ${FILENAME}.gz
276 function mkmaintainers() {
280 log 'Creating Maintainers index ... '
282 for archive in "${public_archives[@]}"; do
283 archiveroot="$(get_archiveroot "${archive}")"
284 indices="${archiveroot}/indices"
285 if ! [[ -d ${indices} ]]; then
290 dak make-maintainers -a "${archive}" ${scriptdir}/masterfiles/pseudo-packages.maintainers
291 gzip -9v --rsyncable <Maintainers >Maintainers.gz
292 gzip -9v --rsyncable <Uploaders >Uploaders.gz
296 function copyoverrides() {
297 log 'Copying override files into public view ...'
301 for ofile in ${overridedir}/override.{squeeze,wheezy,jessie,stretch,sid}.{,extra.}{main,contrib,non-free}*; do
303 gzip -9cv --rsyncable ${ofile} > ${indices}/${bname}.gz
304 chmod g+w ${indices}/${bname}.gz
309 function mkfilesindices() {
312 cd $base/ftp/indices/files/components
316 log "Querying postgres"
318 SELECT './pool/' || c.name || '/' || f.filename AS path, a.arch_string AS arch_string
320 JOIN files_archive_map af ON f.id = af.file_id
321 JOIN component c ON af.component_id = c.id
322 JOIN archive ON af.archive_id = archive.id
325 JOIN architecture a ON b.architecture = a.id)
327 WHERE archive.name = 'ftp-master'
328 ORDER BY path, arch_string
330 psql -At -c "$query" >$ARCHLIST
333 perl -ne 'print; while (m,/[^/]+$,) { $_=$`; print $_ . "\n" unless $d{$_}++; }'
336 perl -e '@nonpool=(); while (<>) { if (m,^\./pool/,) { print; } else { push @nonpool, $_; } } print for (@nonpool);'
339 log "Generating sources list"
341 sed -n 's/|$//p' $ARCHLIST
343 find ./dists -maxdepth 1 \! -type d
344 find ./dists \! -type d | grep "/source/"
345 ) | sort -u | gzip -9 > source.list.gz
347 log "Generating arch lists"
349 ARCHES=$( (<$ARCHLIST sed -n 's/^.*|//p'; echo amd64) | grep . | grep -v all | sort -u)
351 (sed -n "s/|$a$//p" $ARCHLIST
352 sed -n 's/|all$//p' $ARCHLIST
355 find ./dists -maxdepth 1 \! -type d
356 find ./dists \! -type d | grep -E "(proposed-updates.*_$a.changes$|/main/disks-$a/|/main/installer-$a/|/Contents-$a|/binary-$a/)"
357 ) | sort -u | gzip -9 > arch-$a.list.gz
360 log "Generating suite lists"
363 local suite_id="$(printf %d $1)"
366 SELECT DISTINCT './pool/' || c.name || '/' || f.filename
368 (SELECT sa.source AS source
369 FROM src_associations sa
370 WHERE sa.suite = $suite_id
373 FROM extra_src_references esr
374 JOIN bin_associations ba ON esr.bin_id = ba.bin
375 WHERE ba.suite = $suite_id
377 SELECT b.source AS source
378 FROM bin_associations ba
379 JOIN binaries b ON ba.bin = b.id WHERE ba.suite = $suite_id) s
380 JOIN dsc_files df ON s.source = df.source
381 JOIN files f ON df.file = f.id
382 JOIN files_archive_map af ON f.id = af.file_id
383 JOIN component c ON af.component_id = c.id
384 JOIN archive ON af.archive_id = archive.id
385 WHERE archive.name = 'ftp-master'
387 psql -F' ' -A -t -c "$query"
390 SELECT './pool/' || c.name || '/' || f.filename
391 FROM bin_associations ba
392 JOIN binaries b ON ba.bin = b.id
393 JOIN files f ON b.file = f.id
394 JOIN files_archive_map af ON f.id = af.file_id
395 JOIN component c ON af.component_id = c.id
396 JOIN archive ON af.archive_id = archive.id
397 WHERE ba.suite = $suite_id AND archive.name = 'ftp-master'
399 psql -F' ' -A -t -c "$query"
402 psql -F' ' -At -c "SELECT id, suite_name FROM suite" |
403 while read id suite; do
404 [[ -e $base/ftp/dists/$suite ]] || continue
407 distname=$(cd dists; readlink $suite || echo $suite)
408 find ./dists/$distname \! -type d
409 for distdir in ./dists/*; do
410 [[ $(readlink $distdir) != $distname ]] || echo $distdir
414 ) | sort -u | gzip -9 > suite-${suite}.list.gz
417 log "Finding everything on the ftp site to generate sundries"
418 (cd $base/ftp; find . \! -type d \! -name 'Archive_Maintenance_In_Progress' | sort) >$ARCHLIST
421 zcat *.list.gz | cat - *.list | sort -u |
422 diff - $ARCHLIST | sed -n 's/^> //p' > sundries.list
424 log "Generating files list"
427 (echo ./project/trace; zcat arch-$a.list.gz source.list.gz) |
428 cat - sundries.list dists.list project.list docs.list indices.list |
429 sort -u | poolfirst > ../arch-$a.files
433 for dist in sid jessie stretch; do
434 find ./dists/$dist/main/i18n/ \! -type d | sort -u | gzip -9 > $base/ftp/indices/files/components/translation-$dist.list.gz
438 (cat ../arch-i386.files ../arch-amd64.files; zcat suite-proposed-updates.list.gz ; zcat translation-sid.list.gz ; zcat translation-jessie.list.gz ; zcat translation-stretch.list.gz) |
439 sort -u | poolfirst > ../typical.files
446 function mkchecksums() {
447 local archiveroot dsynclist md5list
449 for archive in "${public_archives[@]}"; do
450 archiveroot="$(get_archiveroot "${archive}")"
451 dsynclist=$dbdir/dsync.${archive}.list
452 md5list=${archiveroot}/indices/md5sums
454 log -n "Creating md5 / dsync index file for ${archive}... "
457 ${bindir}/dsync-flist -q generate $dsynclist --exclude $dsynclist --md5
458 ${bindir}/dsync-flist -q md5sums $dsynclist | gzip -9n > ${md5list}.gz
459 ${bindir}/dsync-flist -q link-dups $dsynclist || true
464 local archiveroot targetpath TRACEFILE
466 for archive in "${public_archives[@]}"; do
467 archiveroot="$(get_archiveroot "${archive}")"
468 targetpath="${mirrordir}/${archive}"
469 TRACEFILE="${archiveroot}/project/trace/ftp-master.debian.org"
470 mkdir -p "${archiveroot}/project/trace/"
472 log "Regenerating \"public\" mirror/${archive} hardlink fun"
473 DATE_SERIAL=$(date +"%Y%m%d01")
474 FILESOAPLUS1=$(awk '/serial/ { print $3+1 }' ${TRACEFILE} || echo ${DATE_SERIAL} )
475 if [[ ${DATE_SERIAL} -gt ${FILESOAPLUS1} ]]; then
476 SERIAL="${DATE_SERIAL}"
478 SERIAL="${FILESOAPLUS1}"
480 date -u > ${TRACEFILE}
481 echo "Using dak v1" >> ${TRACEFILE}
482 echo "Running on host: $(hostname -f)" >> ${TRACEFILE}
483 echo "Archive serial: ${SERIAL}" >> ${TRACEFILE}
484 # Now make it accessible via one name, no matter on which host we run
485 cd ${archiveroot}/project/trace/
486 ln -sf ftp-master.debian.org master
488 mkdir -p ${targetpath}
490 rsync -aH --link-dest ${archiveroot} --delete --delete-after --delete-excluded --exclude Packages.*.new --exclude Sources.*.new --ignore-errors ${archiveroot}/. .
495 log "Expiring old database dumps..."
497 ${scriptsdir}/expire_dumps -d . -p -f "dump_*"
500 function transitionsclean() {
501 log "Removing out of date transitions..."
503 dak transitions -c -a
507 log "Updating DM permissions page"
508 dak acl export-per-source dm >${exportdir}/dm.txt
512 log "Categorizing uncategorized bugs filed against ftp.debian.org"
513 sudo -u dak-unpriv dak bts-categorize
516 function mirrorpush() {
517 log "Checking the public archive copies..."
519 local archiveroot targetpath
521 for archive in "${public_archives[@]}"; do
522 log "... archive: ${archive}"
523 archiveroot="$(get_archiveroot "${archive}")"
524 targetpath="${mirrordir}/${archive}"
525 cd ${archiveroot}/dists
528 for release in $(find . -name "InRelease"); do
529 echo "Processing: ${release}"
530 subdir=${release%/InRelease}
531 while read SHASUM SIZE NAME; do
532 if ! [[ -f ${subdir}/${NAME} ]]; then
533 bname=$(basename ${NAME})
534 if [[ "${bname}" =~ ^(Packages|Sources|Contents-[a-zA-Z0-9-]+|Translation-[a-zA-Z_]+|Components-(amd64|i386)\.yml|icons-(128x128|64x64)\.tar)$ ]]; then
536 # We don't keep unpacked files, don't check for their existance.
537 # We might want to go and check their unpacked shasum, but right now
538 # I don't care. I believe it should be enough if all the packed shasums
542 broken=$(( broken + 1 ))
543 echo "File ${subdir}/${NAME} is missing"
547 # We do have symlinks in the tree (see the contents files currently).
548 # So we use "readlink -f" to check the size of the target, as thats basically
549 # what gen-releases does
550 fsize=$(stat -c %s $(readlink -f "${subdir}/${NAME}"))
551 if [[ ${fsize} -ne ${SIZE} ]]; then
552 broken=$(( broken + 1 ))
553 echo "File ${subdir}/${NAME} has size ${fsize}, expected is ${SIZE}"
557 fshasum=$(sha1sum $(readlink -f "${subdir}/${NAME}"))
558 fshasum=${fshasum%% *}
559 if [[ ${fshasum} != ${SHASUM} ]]; then
560 broken=$(( broken + 1 ))
561 echo "File ${subdir}/${NAME} has checksum ${fshasum}, expected is ${SHASUM}"
564 done < <(sed '1,/SHA1:/d' "${release}" | sed '/SHA256:/,$d')
567 if [[ $broken -gt 0 ]]; then
568 log_error "Trouble with the public mirror for ${archive}, found ${broken} errors"
571 log "Starting the mirrorpush for ${archive}"
581 pusharg="-a backports"
584 fname="mirrorstart.${archive}"
587 date -u > /srv/ftp.debian.org/web/${fname}
588 echo "Using dak v1" >> /srv/ftp.debian.org/web/${fname}
589 echo "Running on host $(hostname -f)" >> /srv/ftp.debian.org/web/${fname}
590 sudo -H -u archvsync /home/archvsync/runmirrors ${pusharg} > ~dak/runmirrors-${archive}.log 2>&1 &
595 function mirrorpush-backports() {
596 log "Syncing backports mirror"
597 sudo -u backports /home/backports/bin/update-archive
601 log "Exporting package data foo for i18n project"
602 STAMP=$(date "+%Y%m%d%H%M")
603 mkdir -p ${scriptdir}/i18n/${STAMP}
604 cd ${scriptdir}/i18n/${STAMP}
605 for suite in stable testing unstable; do
606 codename=$(dak admin s show ${suite}|grep '^Codename')
607 codename=${codename##* }
608 echo "Codename is ${codename}"
609 dak control-suite -l ${suite} >${codename}
611 echo "${STAMP}" > timestamp
612 gpg --secret-keyring /srv/ftp-master.debian.org/s3kr1t/dot-gnupg/secring.gpg --keyring /srv/ftp-master.debian.org/s3kr1t/dot-gnupg/pubring.gpg --no-options --batch --no-tty --armour --default-key 473041FA --detach-sign -o timestamp.gpg timestamp
616 ln -sfT ${scriptdir}/i18n/${STAMP} i18n
619 find ./i18n -mindepth 1 -maxdepth 1 -mtime +2 -not -name "${STAMP}" -type d -print0 | xargs --no-run-if-empty -0 rm -rf
623 log "Updating stats data"
625 ${scriptsdir}/update-ftpstats ${base}/log/* > ${base}/misc/ftpstats.data
626 R --slave --vanilla < ${base}/misc/ftpstats.R
627 dak stats arch-space > ${webdir}/arch-space
628 dak stats pkg-nums > ${webdir}/pkg-nums
631 function cleantransactions() {
632 log "Cleanup transaction ids older than 3 months"
634 find -maxdepth 1 -mindepth 1 -type f -name 'txid_*' -mtime +90 -delete
637 function logstats() {
638 ${masterdir}/tools/logs.py "$1"
641 # save timestamp when we start
642 function savetimestamp() {
643 echo ${NOW} > "${dbdir}/dinstallstart"
646 function maillogfile() {
647 cat "$LOGFILE" | mail -a "X-Debian: DAK" -s "Log for dinstall run of ${NOW}" -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" cron@ftp-master.debian.org
650 function testingsourcelist() {
651 dak ls -s testing -f heidi -r .| egrep 'source$' > ${webdir}/testing.list
654 # Function to update a "statefile" telling people what we are doing
657 # This should be called with the argument(s)
658 # - Status name we want to show.
661 RIGHTNOW="$(date -u +"%a %b %d %T %Z %Y (%s)")"
662 cat >"${DINSTALLSTATE}" <<EOF
663 Dinstall start: ${DINSTALLBEGIN}
665 Action start: ${RIGHTNOW}
669 # extract changelogs and stuff
670 function changelogs() {
671 if lockfile -r3 ${LOCK_CHANGELOG}; then
672 trap remove_changelog_lock EXIT TERM HUP INT QUIT
673 log "Extracting changelogs"
674 dak make-changelog -e -a ftp-master
675 [[ -f ${exportdir}/changelogs/filelist.yaml ]] && xz -f ${exportdir}/changelogs/filelist.yaml
676 mkdir -p ${exportpublic}/changelogs
677 cd ${exportpublic}/changelogs
678 rsync -aHW --delete --delete-after --ignore-errors ${exportdir}/changelogs/. .
679 sudo -H -u staticsync /usr/local/bin/static-update-component metadata.ftp-master.debian.org >/dev/null 2>&1 &
681 dak make-changelog -e -a backports
682 [[ -f /srv/backports-master.debian.org/export/changelogs/filelist.yaml ]] && xz -f /srv/backports-master.debian.org/export/changelogs/filelist.yaml
683 mkdir -p /srv/backports-master.debian.org/rsync/export/changelogs
684 cd /srv/backports-master.debian.org/rsync/export/changelogs
685 rsync -aHW --delete --delete-after --ignore-errors /srv/backports-master.debian.org/export/changelogs/. .
686 remove_changelog_lock
690 # Generate a list of extra mirror files, sha256sum em and sign that
691 function signotherfiles() {
692 log "Signing extra mirror files"
696 for archive in "${public_archives[@]}"; do
697 log "... archive: ${archive}"
698 archiveroot="$(get_archiveroot "${archive}")"
699 local TMPLO=$( gettempfile )
703 sha256sum $(find * -type f | egrep -v '(pool|i18n|dep11|source)/|Contents-.*\.(gz|diff)|installer|binary-|(In)?Release(.gpg)?|\.changes' | sort) > ${TMPLO}
704 gpg --no-options --batch --no-tty --armour --personal-digest-preferences=SHA256 --secret-keyring /srv/ftp-master.debian.org/s3kr1t/dot-gnupg/secring.gpg --keyring /srv/ftp-master.debian.org/s3kr1t/dot-gnupg/pubring.gpg --no-options --batch --no-tty --armour --default-key 473041FA --clearsign --output ${archiveroot}/extrafiles ${TMPLO}
710 touch "${DINSTALLSTART}"
712 lockfile -l 3600 "${LOCK_DAILY}"
714 touch "${LOCK_BRITNEY}"
715 TMPFILES="${TMPFILES} ${LOCK_DAILY} ${LOCK_BRITNEY}"
718 function postcronscript() {
721 touch "${DINSTALLEND}"