110 lines
3.2 KiB
Bash
110 lines
3.2 KiB
Bash
|
#!/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)
|
||
|
local ZIEL=$DEST_DIR/$1
|
||
|
# leider sind die exitcodes von wget derzeit noch nicht zuverlaessig (< v1.11)
|
||
|
wget --continue --output-document "$ZIEL" "$QUELLE"
|
||
|
# loesche die Datei, falls sie existiert jedoch leer ist
|
||
|
test -e "$ZIEL" -a ! -s "$ZIEL" && rm "$ZIEL"
|
||
|
}
|
||
|
|
||
|
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 # nochmal - diesmal mit Fehlerausgabe
|
||
|
gpg --quiet --keyserver $KEY_SERVERS --keyserver-options auto-key-retrieve \
|
||
|
--verify "$SIG_FILE" "$DEST_DIR/$1"
|
||
|
# loesche die heruntergeladene Datei und die Signatur falls die
|
||
|
# Verifikation fehlschlaegt
|
||
|
rm "$DEST_DIR/$1" "$SIG_FILE"
|
||
|
echo "Die heruntergeladene Datei und die Signatur-Datei wurden geloescht."
|
||
|
echo "Versuche es nochmal ..."
|
||
|
return 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
########### main ############
|
||
|
|
||
|
if [ $# -lt 2 ]
|
||
|
then echo "wrong parameters: $@"
|
||
|
echo
|
||
|
echo "Syntax: $(basename $0) DATEI_LISTE ACTION [DESTINATION]"
|
||
|
echo
|
||
|
exit 1
|
||
|
fi
|
||
|
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 )
|
||
|
grep -v "^#" "$URL_FILE" | cut -f 1 | while read a
|
||
|
do [ ! -e "$DEST_DIR/$a" ] && download_file "$a"
|
||
|
done
|
||
|
# ExitCode auf Null setzen
|
||
|
true
|
||
|
;;
|
||
|
verify )
|
||
|
grep -v "^#" "$URL_FILE" | cut -f 1 | while read a
|
||
|
do if verify_file "$a"
|
||
|
then true
|
||
|
else echo "Verification of '$a' failed ..."
|
||
|
exit 1
|
||
|
fi
|
||
|
done
|
||
|
;;
|
||
|
clean )
|
||
|
# Datei loeschen
|
||
|
grep -v "^#" "$URL_FILE" | cut -f 1 | while read a; do rm -f "$DEST_DIR/$a"; done
|
||
|
# Signatur loeschen, falls vorhanden
|
||
|
grep -v "^#" "$URL_FILE" | cut -f 3 | 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"
|
||
|
grep -v "^#" "$URL_FILE" | cut -f 1 | 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
|
||
|
|