Add the complete option to complete and finalize the indexes after a larger -m run... I've been rebuilding the indexes a lot as I tweek the format so this has become necessary...main
| @@ -1,6 +1,11 @@ | |||||
| Fetch all of the archive: | Fetch all of the archive: | ||||
| scp -r freefall:/local/mail/archive/*/freebsd-snapshots . | scp -r freefall:/local/mail/archive/*/freebsd-snapshots . | ||||
| Expand all the "validly" formed messages to a file: | |||||
| zcat $(zgrep -l 'PGP SIGNED MESSAGE' *) > ../complete.txt | |||||
| We only lose 2012, and we'll loose everything before 2015 later. | |||||
| XXX - don't use the following, doesn't decode body properly | XXX - don't use the following, doesn't decode body properly | ||||
| Explode the mbox to files: | Explode the mbox to files: | ||||
| cat 201810* freebsd-snapshots | split -p '^From ' - snap. | cat 201810* freebsd-snapshots | split -p '^From ' - snap. | ||||
| @@ -9,12 +14,11 @@ The stdin trick is needed so the numbering/lettering continues properly. | |||||
| Correct way to split the bodies off. | Correct way to split the bodies off. | ||||
| python splitbody.py arch/complete.txt arch/snap. | python splitbody.py arch/complete.txt arch/snap. | ||||
| Expand all the "validly" formed messages to a file: | |||||
| zcat $(zgrep -l 'PGP SIGNED MESSAGE' *) > ../complete.txt | |||||
| We only lose 2012, so no big deal. | |||||
| Bulk import, -m is used to not check if they exist till the end: | |||||
| for i in arch/snap.????; do sh addinfo.sh -m $i; done | |||||
| Bulk import: | |||||
| for i in snap.??; do sh addinfo.sh -m < $i; done | |||||
| Clean things up and skip checking for ones before given date | |||||
| sh addinfo.sh -c 20180900 | |||||
| -m is used to not check if they exist till the end. | |||||
| Copy them up to freefall: | |||||
| scp snapshot.* freefall:public_html/FreeBSD-snap | |||||
| @@ -9,6 +9,27 @@ file. | |||||
| The only file needed for this is the snapaid.sh script. The other files | The only file needed for this is the snapaid.sh script. The other files | ||||
| are used for generating the index. | are used for generating the index. | ||||
| NOTE: The xz vs non-xz versions of some of the images are not able to be | |||||
| differentiated. Currently shorting rules should always put the xz version | |||||
| before the non-xz version. | |||||
| NOTE: Only snapshots that have SHA512 hashes are included. This excludes | |||||
| most snapshots from 2015 and before. The tool could be updated to include | |||||
| SHA256, but not a priority currently. | |||||
| NOTE: Not all of the snapshots are in the database. Some snapshot names, | NOTE: Not all of the snapshots are in the database. Some snapshot names, | ||||
| like 11.0-RC1, don't contain all the info others do, and are not | like 11.0-RC1, don't contain all the info others do, and are not | ||||
| included. In the future, hopefully this will be fixed. | included. In the future, hopefully this will be fixed. | ||||
| backend | |||||
| ------- | |||||
| The backend is just a simple text file the indexes all the published | |||||
| snapshots. It is built from the emails to the freebsd-snapshot | |||||
| list. After verification of the email's signature, the SHA512 entry | |||||
| lines are extracted, the file name is parsed, and added to the complete | |||||
| index. The message-id of the email is in the index so that the frontend | |||||
| can d/l the original email, verify the GPG signature locally. The | |||||
| complete index is used for verifying a snapshot that has already been | |||||
| downloaded. Another index is also maintained which only contains the | |||||
| currently available to d/l snapshots. | |||||
| @@ -2,14 +2,28 @@ | |||||
| set -e | set -e | ||||
| args=`getopt m $*` | |||||
| usage() { | |||||
| echo 'Usage: $0 [ -m ] <file>' | |||||
| echo 'Usage: $0 -c <date>' | |||||
| echo '' | |||||
| echo 'date is specified as YYYYMMDD' | |||||
| if [ x"$1" != x"" ]; then | |||||
| exit $1 | |||||
| fi | |||||
| } | |||||
| args=`getopt cm $*` | |||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||
| echo 'Usage: $0 [ -m ]' | |||||
| exit 2 | |||||
| usage 2 | |||||
| fi | fi | ||||
| set -- $args | set -- $args | ||||
| while :; do | while :; do | ||||
| case "$1" in | case "$1" in | ||||
| -c) | |||||
| complete=1 | |||||
| shift | |||||
| ;; | |||||
| -m) | -m) | ||||
| more=1 | more=1 | ||||
| shift | shift | ||||
| @@ -19,9 +33,31 @@ while :; do | |||||
| ;; | ;; | ||||
| esac | esac | ||||
| done | done | ||||
| if [ x"$complete" = x"1" -a x"$more" = x"1" ]; then | |||||
| echo '-m and -c cannot be specified at the same time.' | |||||
| usage 2 | |||||
| elif [ x"$complete" = x"1" -a $# -ne 1 ]; then | |||||
| echo 'must only specify a date with -c' | |||||
| usage 2 | |||||
| elif [ x"$complete" != x"1" -a $# -ne 1 ]; then | |||||
| echo 'must specify exactly one file' | |||||
| usage 2 | |||||
| fi | |||||
| mkdir "$0.running" | mkdir "$0.running" | ||||
| if [ x"$complete" = x"1" ]; then | |||||
| sort -u snapshot.complete.idx | xz > snapshot.complete.idx.xz | |||||
| awk '$5 >= "'"$1"'" { | |||||
| if (!system("wget --method=HEAD " $9)) | |||||
| } | |||||
| ' snapshot.idx | sort -u | xz > snapshot.idx.xz | |||||
| rm snapshot.idx snapshot.complete.idx | |||||
| rmdir "$0.running" | |||||
| exit 0 | |||||
| fi | |||||
| # minimize file | # minimize file | ||||
| tmpfname="tmp.snapinf.asc" | tmpfname="tmp.snapinf.asc" | ||||
| awk ' | awk ' | ||||
| @@ -40,7 +76,7 @@ awk ' | |||||
| $0 == "-----END PGP SIGNATURE-----" { | $0 == "-----END PGP SIGNATURE-----" { | ||||
| output = 0 | output = 0 | ||||
| }' > "$tmpfname" | |||||
| }' "$1" > "$tmpfname" | |||||
| if ! gpg --verify "$tmpfname"; then | if ! gpg --verify "$tmpfname"; then | ||||
| echo 'failed verify' | echo 'failed verify' | ||||