自动寻找最快的 CTAN 镜像

自动寻找最快的 CTAN 镜像

当我使用 Linux 时,有一个程序可以根据您的位置为您找到最快的 Debian 软件包存储库。CTAN 有类似的程序吗?我一直在手动选择我认为物理上离我很近的存储库,并根据 ping 时间来查找,但这并不是非常可靠。只是问一下,因为我的下载连接速度超过 100 MBit/s,但我仍然需要几个小时才能安装 LaTeX,并且更新软件包需要很长时间。

答案1

假设您使用的是 Linux,您可以使用此命令来查找最快的镜像:

netselect -vv -t40 -s20 $(\
  curl -sSL http://dante.ctan.org/mirmon/ | \
  grep -oE '<TD ALIGN=RIGHT><A HREF="[^"]*' | \
  cut -d\" -f2 \
) | \
cut -c7- | \
LC_ALL=C xargs -tn1 -i curl -sSL -w "%{time_total} %{speed_download} {}\n" -o /dev/null {}FILES.byname | \
sort -n

这将为您提供 20 个最快的镜像(实际测量的下载速度)。它会按速度对它们进行排序(最快的排在最上面),并告诉您下载文件列表(/FILES.byname)所需的时间以及平均下载速度。
它还相当冗长,会告诉您它在此过程中做了什么。您可以通过删除命令-t中的标志xargs以及从命令中删除 1 个或两个-v标志来减少冗长netselect。使用参数调整要检查下载速度的服务器总数-s20

下面是一个可以在 shell 脚本中使用的版本,它只会输出最快的镜像,而不会输出其他内容。对于 shell 脚本非常有用。

netselect -t40 -s20 $(\
  curl -sSL http://dante.ctan.org/mirmon/ | \
  grep -oE '<TD ALIGN=RIGHT><A HREF="[^"]*' | \
  cut -d\" -f2 \
) | \
cut -c7- | \
LC_ALL=C xargs -n1 -i curl -sSL -w "%{time_total} {}\n" -o /dev/null {}FILES.byname | \
sort -n | \
head -n1 | \
cut -d\  -f2

答案2

netselect在 Ubuntu 上不再可用,因此我提供了一个不依赖于它的更通用(如果速度慢得多)的答案版本:

curl -sSL http://dante.ctan.org/mirmon/ | grep -oE '<TD ALIGN=RIGHT><A HREF="[^"]*' | cut -d\" -f2 | LC_ALL=C xargs -n1 -i curl -sSL -w "%{time_total} %{speed_download} {}\n" -o /dev/null {}FILES.byname | sort -n

由于某种原因,今天这对我来说不起作用,因此我使用了:

#!/bin/bash
if [ -z "$1" ]
then
    for mirror in `curl -sSL http://dante.ctan.org/mirmon/ | grep -oE '<TD ALIGN=RIGHT><A HREF="[^"]*' | cut -d\" -f2`
    do
        (
            host=`echo $mirror |sed s,.*//,,|sed s,/.*,,`
            echo -e `ping $host -c1 | grep time=|sed s,.*time=,,`:'  \t\t'$mirror
        ) &
        done
    wait
    exit 1
fi

然后将其通过管道传输到 sort -n

相关内容