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}
482 echo "Using dak v1" >> ${TRACEFILE}
483 echo "Running on host: $(hostname -f)" >> ${TRACEFILE}
484 echo "Archive serial: ${SERIAL}" >> ${TRACEFILE}
485 echo "Date: ${RFC822DATE}" >> ${TRACEFILE}
486 # Now make it accessible via one name, no matter on which host we run
487 cd ${archiveroot}/project/trace/
488 ln -sf ftp-master.debian.org master
490 mkdir -p ${targetpath}
492 rsync -aH --link-dest ${archiveroot} --delete --delete-after --delete-excluded --exclude Packages.*.new --exclude Sources.*.new --ignore-errors ${archiveroot}/. .
497 log "Expiring old database dumps..."
499 ${scriptsdir}/expire_dumps -d . -p -f "dump_*"
502 function transitionsclean() {
503 log "Removing out of date transitions..."
505 dak transitions -c -a
509 log "Updating DM permissions page"
510 dak acl export-per-source dm >${exportdir}/dm.txt
514 log "Categorizing uncategorized bugs filed against ftp.debian.org"
515 sudo -u dak-unpriv dak bts-categorize
518 function mirrorpush() {
519 log "Checking the public archive copies..."
521 local archiveroot targetpath
523 for archive in "${public_archives[@]}"; do
524 log "... archive: ${archive}"
525 archiveroot="$(get_archiveroot "${archive}")"
526 targetpath="${mirrordir}/${archive}"
527 cd ${archiveroot}/dists
530 for release in $(find . -name "InRelease"); do
531 echo "Processing: ${release}"
532 subdir=${release%/InRelease}
533 while read SHASUM SIZE NAME; do
534 if ! [[ -f ${subdir}/${NAME} ]]; then
535 bname=$(basename ${NAME})
536 if [[ "${bname}" =~ ^(Packages|Sources|Contents-[a-zA-Z0-9-]+|Translation-[a-zA-Z_]+|Components-(amd64|i386)\.yml|icons-(128x128|64x64)\.tar)$ ]]; then
538 # We don't keep unpacked files, don't check for their existance.
539 # We might want to go and check their unpacked shasum, but right now
540 # I don't care. I believe it should be enough if all the packed shasums
544 broken=$(( broken + 1 ))
545 echo "File ${subdir}/${NAME} is missing"
549 # We do have symlinks in the tree (see the contents files currently).
550 # So we use "readlink -f" to check the size of the target, as thats basically
551 # what gen-releases does
552 fsize=$(stat -c %s $(readlink -f "${subdir}/${NAME}"))
553 if [[ ${fsize} -ne ${SIZE} ]]; then
554 broken=$(( broken + 1 ))
555 echo "File ${subdir}/${NAME} has size ${fsize}, expected is ${SIZE}"
559 fshasum=$(sha1sum $(readlink -f "${subdir}/${NAME}"))
560 fshasum=${fshasum%% *}
561 if [[ ${fshasum} != ${SHASUM} ]]; then
562 broken=$(( broken + 1 ))
563 echo "File ${subdir}/${NAME} has checksum ${fshasum}, expected is ${SHASUM}"
566 done < <(sed '1,/SHA1:/d' "${release}" | sed '/SHA256:/,$d')
569 if [[ $broken -gt 0 ]]; then
570 log_error "Trouble with the public mirror for ${archive}, found ${broken} errors"
573 log "Starting the mirrorpush for ${archive}"
584 pusharg="-a backports"
587 fname="mirrorstart.${archive}"
591 mkdir -p ${webdir}/${pname}/project/trace/
592 ln -sf ${mirrordir}/${archive}/project/trace/master ${webdir}/${pname}/project/trace/master
594 date -u > ${webdir}/${fname}
595 echo "Using dak v1" >> ${webdir}/${fname}
596 echo "Running on host $(hostname -f)" >> ${webdir}/${fname}
597 sudo -H -u archvsync /home/archvsync/runmirrors ${pusharg} > ~dak/runmirrors-${archive}.log 2>&1 &
602 function mirrorpush-backports() {
603 log "Syncing backports mirror"
604 sudo -u backports /home/backports/bin/update-archive
608 log "Exporting package data foo for i18n project"
609 STAMP=$(date "+%Y%m%d%H%M")
610 mkdir -p ${scriptdir}/i18n/${STAMP}
611 cd ${scriptdir}/i18n/${STAMP}
612 for suite in stable testing unstable; do
613 codename=$(dak admin s show ${suite}|grep '^Codename')
614 codename=${codename##* }
615 echo "Codename is ${codename}"
616 dak control-suite -l ${suite} >${codename}
618 echo "${STAMP}" > timestamp
619 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
623 ln -sfT ${scriptdir}/i18n/${STAMP} i18n
626 find ./i18n -mindepth 1 -maxdepth 1 -mtime +2 -not -name "${STAMP}" -type d -print0 | xargs --no-run-if-empty -0 rm -rf
630 log "Updating stats data"
632 ${scriptsdir}/update-ftpstats ${base}/log/* > ${base}/misc/ftpstats.data
633 R --slave --vanilla < ${base}/misc/ftpstats.R
634 dak stats arch-space > ${webdir}/arch-space
635 dak stats pkg-nums > ${webdir}/pkg-nums
638 function cleantransactions() {
639 log "Cleanup transaction ids older than 3 months"
641 find -maxdepth 1 -mindepth 1 -type f -name 'txid_*' -mtime +90 -delete
644 function logstats() {
645 ${masterdir}/tools/logs.py "$1"
648 # save timestamp when we start
649 function savetimestamp() {
650 echo ${NOW} > "${dbdir}/dinstallstart"
653 function maillogfile() {
654 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
657 function testingsourcelist() {
658 dak ls -s testing -f heidi -r .| egrep 'source$' > ${webdir}/testing.list
661 # Function to update a "statefile" telling people what we are doing
664 # This should be called with the argument(s)
665 # - Status name we want to show.
668 RIGHTNOW="$(date -u +"%a %b %d %T %Z %Y (%s)")"
669 cat >"${DINSTALLSTATE}" <<EOF
670 Dinstall start: ${DINSTALLBEGIN}
672 Action start: ${RIGHTNOW}
676 # extract changelogs and stuff
677 function changelogs() {
678 if lockfile -r3 ${LOCK_CHANGELOG}; then
679 trap remove_changelog_lock EXIT TERM HUP INT QUIT
680 log "Extracting changelogs"
681 dak make-changelog -e -a ftp-master
682 [[ -f ${exportdir}/changelogs/filelist.yaml ]] && xz -f ${exportdir}/changelogs/filelist.yaml
683 mkdir -p ${exportpublic}/changelogs
684 cd ${exportpublic}/changelogs
685 rsync -aHW --delete --delete-after --ignore-errors ${exportdir}/changelogs/. .
686 sudo -H -u staticsync /usr/local/bin/static-update-component metadata.ftp-master.debian.org >/dev/null 2>&1 &
688 dak make-changelog -e -a backports
689 [[ -f /srv/backports-master.debian.org/export/changelogs/filelist.yaml ]] && xz -f /srv/backports-master.debian.org/export/changelogs/filelist.yaml
690 mkdir -p /srv/backports-master.debian.org/rsync/export/changelogs
691 cd /srv/backports-master.debian.org/rsync/export/changelogs
692 rsync -aHW --delete --delete-after --ignore-errors /srv/backports-master.debian.org/export/changelogs/. .
693 remove_changelog_lock
697 # Generate a list of extra mirror files, sha256sum em and sign that
698 function signotherfiles() {
699 log "Signing extra mirror files"
703 for archive in "${public_archives[@]}"; do
704 log "... archive: ${archive}"
705 archiveroot="$(get_archiveroot "${archive}")"
706 local TMPLO=$( gettempfile )
710 sha256sum $(find * -type f | egrep -v '(pool|i18n|dep11|source)/|Contents-.*\.(gz|diff)|installer|binary-|(In)?Release(.gpg)?|\.changes' | sort) > ${TMPLO}
711 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}
717 touch "${DINSTALLSTART}"
719 lockfile -l 3600 "${LOCK_DAILY}"
721 touch "${LOCK_BRITNEY}"
722 TMPFILES="${TMPFILES} ${LOCK_DAILY} ${LOCK_BRITNEY}"
725 function postcronscript() {
728 touch "${DINSTALLEND}"