#!/bin/sh # 20150827 bkw: attempt to find missing source tarballs SELF=$( basename $0 ) # to add a repo, list its name here, and write a _download() # function, which should return success if a file was downloaded # and failure otherwise. repos="wayback naptime tld ponce sfdirect gentoo netbsd freebsd debian" usage() { cat <&2 exit 1 } read_info_file() { case "$1" in "") dir=. ;; "*.info") file="$1" ;; *) dir="$1" ;; esac if [ "$dir" != "" ]; then file="$dir"/*.info fi if [ ! -f $file ]; then die "Can't find .info file matching $file" fi source $file # snarfed straight from template.SlackBuild: if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i486 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi # TODO: handle DOWNLOAD_x86_64 and MD5SUM_x86_64 # if [ "$ARCH" = "x86_64" ]; then # fi } do_wget() { url="$1" shift echo wget $wgetopts $@ $url wget $wgetopts $@ $url } # ponce's server returns 200 OK status for its 404 page, hence the ugly: ponce_download() { do_wget "http://ponce.cc/slackware/sources/repo/$dlfile" 2>&1 | tee tmp.$$ ret=$? grep -q '^Length.*text/html' tmp.$$ && ret=1 rm -f tmp.$$ return $ret } # the user agent is set because sf does something different if it thinks # you're using a browser, and some of us like to set the user agent to # firefox in .wgetrc because it fixes downloading from most other sites # that check it. sfdirect_download() { do_wget "http://downloads.sourceforge.net/project/slackbuildsdirectlinks/$PRGNAM/$dlfile" --user-agent wget } gentoo_download() { do_wget "http://ftp.osuosl.org/pub/gentoo/distfiles/$dlfile" } freebsd_download() { do_wget "http://distcache.FreeBSD.org/ports-distfiles/$dlfile" } netbsd_download() { do_wget "http://ftp.netbsd.org/pub/pkgsrc/distfiles/$dlfile" } # debian's tricky because they rename the files: all lowercase, an # underscore between name and version, and .orig added before the # filename extension. Also they're fanned out into subdirs, see # http://http.debian.net/debian/pool/main/ debian_download() { case "$dlfile" in *.tar.*) ext="$( echo $dlfile | sed 's,.*\.\(tar\..*\)$,\1,' )" ;; *) ext="$( echo $dlfile | sed 's,.*\.\([^.]*\)$,\1,' )" ;; esac prog="$( echo $dlfile | tr A-Z a-z | sed 's,_,-,g' | sed "s,\.$ext\$,," )" ver="$( echo $prog | rev | cut -d- -f1 | rev )" prog="$( echo $prog | rev | cut -d- -f2- | rev )" case "$prog" in lib*) subdir="$( echo $prog | head -c4 )" ;; *) subdir="$( echo $prog | head -c1 )" ;; esac #echo "prog='$prog' ver='$ver' ext='$ext' subdir='$subdir'" debfile=${prog}_$ver.orig.$ext do_wget "http://http.debian.net/debian/pool/main/$subdir/$prog/$debfile" ret=$? mv "$debfile" "$dlfile" 2>/dev/null return $ret } naptime_download() { do_wget "http://urchlay.naptime.net/~urchlay/src/$dlfile" } tld_download() { dir="$( echo $dlmd5 | cut -b1 )/$( echo $dlmd5 | cut -b2 )/$dlmd5" do_wget "http://df.tld-linux.org/distfiles/by-md5/$dir/" -r -l1 -nH -np -nd -Rdesc -Rindex.html\* } # https://archive.org/help/wayback_api.php # json_pp included in slackware's perl package wayback_download() { url=$( wget -O- "http://archive.org/wayback/available?url=$srcurl" | \ json_pp -f json -t dumper | \ perl -e 'undef $/; $_=<>; eval $_; print $VAR1->{archived_snapshots}->{closest}->{url};' ) if [ "$url" = "" ]; then return 1 fi do_wget "$url" } check_file() { if [ ! -f "$dlfile" ]; then echo "Nothing downloaded" return 1 fi gotmd5="$( md5sum $dlfile | cut -d' ' -f1 )" if [ "$gotmd5" != "$dlmd5" ]; then echo "md5sum doesn't match, should be $dlmd5, got $gotmd5" rm -f "$dlfile" return 1 fi return 0 } # main() if [ "$1" = "--help" ]; then usage 0 fi if [ "$1" = "-t" ]; then wgetopts="--spider --tries 1" # might want -S here too testmode=1 shift else wgetopts="--content-disposition" fi if [ "$#" -gt 1 ]; then usage 1 fi read_info_file "$1" for srcurl in $DOWNLOAD; do dlfile="$( basename "$srcurl" )" set $MD5SUM dlmd5=$1 shift for repo in $repos; do echo echo "Trying $repo:" eval ${repo}_download got="$?" if [ "$testmode" = "1" ]; then [ "$got" = "0" ] && found=1 else check_file && break fi done done if [ "$found" = "1" ]; then echo echo "=== Found $dlfile" exit 0 fi echo "--- FAILED to find $dlfile" exit 1