#!/bin/bash -e [ -z "$BBB_ADDRESS" ] && BBB_ADDRESS=root@192.168.7.2 case "$1" in --help) cat <&2; exit 0; }; } | xargs -t -I___ curl -s -w '%{filename_effective} %{url_effective} %{http_code}\n' -LO ___ | tee $TMP_LOG grep -q 404 $TMP_LOG || : if [ "$?" -eq 0 ] then echo echo 'Some packages failed to download, trying to guess a more recent URL' while read line do line=`echo $line | grep " 404" || :` if [ "" != "$line" ] then oldurl=`echo $line | cut -d" " -f 2` echo This failed: $oldurl oldfile=`echo $line | cut -d" " -f 1` rm -rf $oldfile grepped=`echo $oldurl | grep ".*+deb[0-9]\{1,2\}u\([0-9]\{1,\}\)_$ARCH.deb" || :` if [ "$grepped" == "" ] then # no debu : we need to add a fictious one oldurl=`echo $oldurl | sed "s/_$ARCH\.deb/+deb${DEB}u0_$ARCH.deb/"` fi debu=`echo $oldurl | sed "s/.*+deb[0-9]\{1,2\}u\([0-9]\{1,\}\)_$ARCH.deb/\1/"` if [ "$debu" == "" ] then echo "Unable to parse URL $oldurl to attempt automated guessing" exit 1 else ATTEMPTS=1 while [ $ATTEMPTS -lt $MAX_DEBU_ATTEMPTS ] do newdebu=$((debu + ATTEMPTS)) # try and replace the last revision number of the debXuY newurl=`echo $oldurl | sed "s/u${debu}_$ARCH.deb.*/u${newdebu}_$ARCH.deb/"` echo Retrying: $newurl curl -s -w '%{filename_effective} %{url_effective} %{http_code}\n' -LO $newurl > $ONE_LINE_LOG cat $ONE_LINE_LOG | grep " 404" || { echo SUCCESS; break; } oldfile=`cat $ONE_LINE_LOG | cut -d" " -f 1` rm -rf $oldfile ATTEMPTS=$(( ATTEMPTS + 1 )) done fi echo fi done < $TMP_LOG fi rm -rf $TMP_LOG $ONE_LINE_LOG ls $TMP_DIR/* 2>/dev/null || exit 0 rsync -a $TMP_DIR $BBB_ADDRESS:$TMP_DIR ssh $BBB_ADDRESS "dpkg -i $TMP_DIR/*"