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 RFC822DATE=$(LC_ALL=POSIX LANG=POSIX date -u -R)
481 date -u > ${TRACEFILE}
484 echo "Running on host: $(hostname -f)"
485 echo "Archive serial: ${SERIAL}"
486 echo "Date: ${RFC822DATE}"
488 # Now make it accessible via one name, no matter on which host we run
489 cd ${archiveroot}/project/trace/
490 ln -sf ftp-master.debian.org master
492 mkdir -p ${targetpath}
494 rsync -aH --link-dest ${archiveroot} --delete --delete-after --delete-excluded --exclude Packages.*.new --exclude Sources.*.new --ignore-errors ${archiveroot}/. .
499 log "Expiring old database dumps..."
501 ${scriptsdir}/expire_dumps -d . -p -f "dump_*"
504 function transitionsclean() {
505 log "Removing out of date transitions..."
507 dak transitions -c -a
511 log "Updating DM permissions page"
512 dak acl export-per-source dm >${exportdir}/dm.txt
516 log "Categorizing uncategorized bugs filed against ftp.debian.org"
517 sudo -u dak-unpriv dak bts-categorize
520 function mirrorpush() {
521 log "Checking the public archive copies..."
523 local archiveroot targetpath
525 for archive in "${public_archives[@]}"; do
526 log "... archive: ${archive}"
527 archiveroot="$(get_archiveroot "${archive}")"
528 targetpath="${mirrordir}/${archive}"
529 cd ${archiveroot}/dists
532 for release in $(find . -name "InRelease"); do
533 echo "Processing: ${release}"
534 subdir=${release%/InRelease}
535 while read SHASUM SIZE NAME; do
536 if ! [[ -f ${subdir}/${NAME} ]]; then
537 bname=$(basename ${NAME})
538 if [[ "${bname}" =~ ^(Packages|Sources|Contents-[a-zA-Z0-9-]+|Translation-[a-zA-Z_]+|Components-[a-zA-Z0-9-]\.yml|icons-(128x128|64x64)\.tar)$ ]]; then
540 # We don't keep unpacked files, don't check for their existance.
541 # We might want to go and check their unpacked shasum, but right now
542 # I don't care. I believe it should be enough if all the packed shasums
546 broken=$(( broken + 1 ))
547 echo "File ${subdir}/${NAME} is missing"
551 # We do have symlinks in the tree (see the contents files currently).
552 # So we use "readlink -f" to check the size of the target, as thats basically
553 # what gen-releases does
554 fsize=$(stat -c %s $(readlink -f "${subdir}/${NAME}"))
555 if [[ ${fsize} -ne ${SIZE} ]]; then
556 broken=$(( broken + 1 ))
557 echo "File ${subdir}/${NAME} has size ${fsize}, expected is ${SIZE}"
561 fshasum=$(sha1sum $(readlink -f "${subdir}/${NAME}"))
562 fshasum=${fshasum%% *}
563 if [[ ${fshasum} != ${SHASUM} ]]; then
564 broken=$(( broken + 1 ))
565 echo "File ${subdir}/${NAME} has checksum ${fshasum}, expected is ${SHASUM}"
568 done < <(sed '1,/SHA1:/d' "${release}" | sed '/SHA256:/,$d')
571 if [[ $broken -gt 0 ]]; then
572 log_error "Trouble with the public mirror for ${archive}, found ${broken} errors"
575 log "Starting the mirrorpush for ${archive}"
586 pusharg="-a backports"
589 fname="mirrorstart.${archive}"
593 mkdir -p ${webdir}/${pname}/project/trace/
594 ln -sf ${mirrordir}/${archive}/project/trace/master ${webdir}/${pname}/project/trace/master
596 date -u > ${webdir}/${fname}
597 echo "Using dak v1" >> ${webdir}/${fname}
598 echo "Running on host $(hostname -f)" >> ${webdir}/${fname}
599 sudo -H -u archvsync /home/archvsync/runmirrors ${pusharg} > ~dak/runmirrors-${archive}.log 2>&1 &
604 function mirrorpush-backports() {
605 log "Syncing backports mirror"
606 sudo -u backports /home/backports/bin/update-archive
610 log "Exporting package data foo for i18n project"
611 STAMP=$(date "+%Y%m%d%H%M")
612 mkdir -p ${scriptdir}/i18n/${STAMP}
613 cd ${scriptdir}/i18n/${STAMP}
614 for suite in stable testing unstable; do
615 codename=$(dak admin s show ${suite}|grep '^Codename')
616 codename=${codename##* }
617 echo "Codename is ${codename}"
618 dak control-suite -l ${suite} >${codename}
620 echo "${STAMP}" > timestamp
621 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
625 ln -sfT ${scriptdir}/i18n/${STAMP} i18n
628 find ./i18n -mindepth 1 -maxdepth 1 -mtime +2 -not -name "${STAMP}" -type d -print0 | xargs --no-run-if-empty -0 rm -rf
632 log "Updating stats data"
634 ${scriptsdir}/update-ftpstats ${base}/log/* > ${base}/misc/ftpstats.data
635 R --slave --vanilla < ${base}/misc/ftpstats.R
636 dak stats arch-space > ${webdir}/arch-space
637 dak stats pkg-nums > ${webdir}/pkg-nums
640 function cleantransactions() {
641 log "Cleanup transaction ids older than 3 months"
643 find -maxdepth 1 -mindepth 1 -type f -name 'txid_*' -mtime +90 -delete
646 function logstats() {
647 ${masterdir}/tools/logs.py "$1"
650 # save timestamp when we start
651 function savetimestamp() {
652 echo ${NOW} > "${dbdir}/dinstallstart"
655 function maillogfile() {
656 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 < "${LOGFILE}"
659 function testingsourcelist() {
660 dak ls -s testing -f heidi -r .| egrep 'source$' > ${webdir}/testing.list
663 # Function to update a "statefile" telling people what we are doing
666 # This should be called with the argument(s)
667 # - Status name we want to show.
670 RIGHTNOW="$(date -u +"%a %b %d %T %Z %Y (%s)")"
671 cat >"${DINSTALLSTATE}" <<EOF
672 Dinstall start: ${DINSTALLBEGIN}
674 Action start: ${RIGHTNOW}
678 # extract changelogs and stuff
679 function changelogs() {
680 if lockfile -r3 ${LOCK_CHANGELOG}; then
681 trap remove_changelog_lock EXIT TERM HUP INT QUIT
682 log "Extracting changelogs"
683 dak make-changelog -e -a ftp-master
684 [[ -f ${exportdir}/changelogs/filelist.yaml ]] && xz -f ${exportdir}/changelogs/filelist.yaml
685 mkdir -p ${exportpublic}/changelogs
686 cd ${exportpublic}/changelogs
687 rsync -aHW --delete --delete-after --ignore-errors ${exportdir}/changelogs/. .
688 sudo -H -u staticsync /usr/local/bin/static-update-component metadata.ftp-master.debian.org >/dev/null 2>&1 &
690 dak make-changelog -e -a backports
691 [[ -f /srv/backports-master.debian.org/export/changelogs/filelist.yaml ]] && xz -f /srv/backports-master.debian.org/export/changelogs/filelist.yaml
692 mkdir -p /srv/backports-master.debian.org/rsync/export/changelogs
693 cd /srv/backports-master.debian.org/rsync/export/changelogs
694 rsync -aHW --delete --delete-after --ignore-errors /srv/backports-master.debian.org/export/changelogs/. .
695 remove_changelog_lock
699 # Generate a list of extra mirror files, sha256sum em and sign that
700 function signotherfiles() {
701 log "Signing extra mirror files"
705 for archive in "${public_archives[@]}"; do
706 log "... archive: ${archive}"
707 archiveroot="$(get_archiveroot "${archive}")"
708 local TMPLO=$( gettempfile )
712 sha256sum $(find * -type f | egrep -v '(pool|i18n|dep11|source)/|Contents-.*\.(gz|diff)|installer|binary-|(In)?Release(.gpg)?|\.changes' | sort) > ${TMPLO}
713 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}
719 touch "${DINSTALLSTART}"
721 lockfile -l 3600 "${LOCK_DAILY}"
723 touch "${LOCK_BRITNEY}"
724 TMPFILES="${TMPFILES} ${LOCK_DAILY} ${LOCK_BRITNEY}"
727 function postcronscript() {
730 touch "${DINSTALLEND}"