cryptocd/downloads/get_files.sh

92 lines
2.6 KiB
Bash
Executable file

#!/bin/sh
#
# Parameter: LISTE ACTION
# z.B. ./get_files programme download
#
set -eu
# die Key-Server muessen wohl einzeln angegeben werden - somit einzelne Direktiven
KEY_SERVERS="x-hkp://pgp.mit.edu --keyserver hkp://subkeys.pgp.net"
function download_file()
{
local QUELLE=$(grep "^$1[[:space:]]" $URL_FILE | cut -f 2)
wget --continue --output-document "$DEST_DIR/$1" "$QUELLE"
}
function verify_file()
{
# eventuell die Datei herunterladen
[ ! -e "$DEST_DIR/$1" ] && download_file "$1"
[ ! -e "$DEST_DIR/$1" ] && return 1
# Signatur-URL ermitteln
local SIG_URL=$(grep "^$1[[:space:]]" $URL_FILE | cut -f 3)
# bei fehlender Signatur erfolgreich abbrechen
[ -z "$SIG_URL" ] && return 0
# Signatur herunterladen
local SIG_FILE=$DEST_DIR/$(basename "$SIG_URL")
# html-encodierte Leerzeichen wiederherstellen
SIG_FILE=${SIG_FILE//\%20/ }
[ ! -e "$SIG_FILE" ] && wget --output-document "$SIG_FILE" "$SIG_URL"
# pruefen - notfalls den Schluessel importieren
# erstmal Ausgabe unterdruecken
if gpg --quiet --keyserver $KEY_SERVERS --keyserver-options auto-key-retrieve --verify "$SIG_FILE" "$DEST_DIR/$1" &>/dev/null
then return 0
else gpg --quiet --keyserver $KEY_SERVERS --keyserver-options auto-key-retrieve --verify "$SIG_FILE" "$DEST_DIR/$1"
# do it again (with output), if verification failed
return 1
fi
}
########### main ############
[ $# -eq 0 ] && echo "die Download-Liste muss angegeben werden!" && exit 1
URL_FILE=$(dirname $0)/${1}.lst
DEST_DIR=$(dirname $0)/${1}
shift
[ ! -e "$URL_FILE" ] && echo "Die Datei ($URL_FILE) existiert nicht!" && exit 2
[ -e "$DEST_DIR" ] || mkdir -p "$DEST_DIR"
ACTION=help
[ $# -gt 0 ] && ACTION=$1 && shift
case "$ACTION" in
download )
cut -f 1 "$URL_FILE" | while read a
do [ ! -e "$DEST_DIR/$a" ] && download_file "$a"
done
# ExitCode auf Null setzen
true
;;
verify )
cut -f 1 "$URL_FILE" | while read a
do if verify_file "$a"
then true
else echo "Verification of '$a' failed ..."
exit 1
fi
done
;;
clean )
# Datei loeschen
cut -f 1 "$URL_FILE" | while read a; do rm -f "$DEST_DIR/$a"; done
# Signatur loeschen, falls vorhanden
cut -f 3 "$URL_FILE" | sed /^$/d | while read a; do rm -f "$DEST_DIR/$(basename $a)"; done
;;
install )
[ $# -eq 0 ] && echo 'You need to specify the destination directory!' && exit 1
INST_DIR=$1
[ ! -e "$INST_DIR" ] && mkdir -p "$INST_DIR"
cut -f 1 "$URL_FILE" | while read a
do [ -e "$DEST_DIR/$a" ] || download_file "$a"
cp "$DEST_DIR/$a" "$INST_DIR/"
done
;;
* )
echo "Syntax: $0 LIST { download | install | clean } [ZIEL_VERZEICHNIS]"
echo
;;
esac