#!/bin/bash set -vx get_mirrorlist() { local list=$( ncftpls ${FTP_BASE}/ | grep pacman-mirrorlist ); curl -s -S "${FTP_BASE}/${list}" | tar -xzf - -O etc/pacman.d/mirrorlist ; } get_mirrors() { get_mirrorlist | sed -e "/^#Server.*=.*\/\$repo\/os\/${os}/!d"; } get_servers() { get_mirrors | sed -e 's/#Server =.*:\/\/\([^\/]*\).*\/$repo.*/\1/g' ; } resolve_servers() { for FF in `get_servers`; do host -qQ -t ANY -s 8 $FF &>/dev/null; test $? -ne 0 && host -qQ -t ANY -s 8 $FF; done ; } rank_servers() { local f="$1" get_mirrors | sed -e "s#^\#Server.*= *\(.*\)/\$repo/os/#\1/$repo/os/$os/$f#g" | xargs -iUR -P10 curl -o /dev/null --connect-timeout 10 --retry 2 --no-keepalive -w "%{time_total} %{speed_download} %{url_effective}\n" -m 20 -s --url "UR" |\ tee -a rank_mirrors.`echo $f|sed -e 's|[/.-]|_|g'`.log } os=`uname -m` repo=current FTP_BASE=ftp://ftp.archlinux.org/$repo/os/$os rank_servers core.db.tar.gz rank_servers `ncftpls -l $FTP_BASE/|awk '{print $5,$9}' |sort -nr|grep gcc- -m 1|awk '{print $2}'` pacget() { [[ $# -ne 2 ]] && echo "Usage: pacget URL(S) OUTFILE" os=${1//*\/os\//};os=${os%%\/*}; repo=$( basename ${1//%\/os\/*\/*} )[[ -z "$repo" ]] && repo=custom pacfile=$( basename $2.pacget ) /usr/bin/aria2c \ --no-conf \ --log=pacget.log \ --log-level=notice \ --dir=/var/cache/pacman/pkg/ \ --allow-overwrite=true \ --file-allocation=none \ --out="${pacfile}" \ --max-tries=5 \ --max-file-not-found=5 \ --connect-timeout=10 \ --split=5 \ --max-concurrent-downloads=15 \ --enable-http-keep-alive=true \ --uri-selector=adaptive \ --user-agent="Mozilla/5.0 (Windows; en-US) Gecko/2 Firefox/3.5" \ --summary-interval=0 \ --server-stat-if=pacget.stats \ --server-stat-of=pacget.stats \ --no-netrc \ --ftp-pasv=true --remote-time=true \ "$1" [[ ! -f "${pacfile}.aria2" ]] && mv -v "${pacfile}" $2 && chmod -c 644 $2 }