#!/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 --no-check-certificate --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