当前的Fedora / Centos安装在/etc/yum.repos.conf中的正常配置文件中有一个看起来像这样的Metalink.
Metalink=https://mirrors.fedoraproject.org/Metalink?repo=fedora-$releasever&arch=$basearch
这个Metalink实际上使yum / dnf选择一个“随机”服务器站点(由服务器随机地按照地理位置由世界地区根据Metalink客户端的位置选择).
这也用于缓慢下载以切换到下一个更好的站点.
我注意到由于docker构建了大量的下载,这就是我考虑所有机器必须使用的squid代理的原因.但是这种yum / dnf的“随机”策略让我很担心.我确实理解fedora / centos分配这个免费存储库的负载的意图,所以实际上我不想破坏这个策略
鱿鱼能以某种方式智能地检测到客户端只使用“另一个fedora / centos repo url”并智能地缓存这个吗? Metalink列表本身似乎非常稳定(它只是在被问到时改变顺序,但列表本身似乎是相同的).
意图:不要存储同一文件的1000份副本,只是因为它来自不同的服务器.
我怎么用鱿鱼呢?
编辑:有人有经验使用这个http://wiki.squid-cache.org/Features/StoreID来缓存dnf / yum吗?
添加到squid.conf以下
store_id_program /usr/lib64/squid/storeid_file_rewrite /etc/squid/fedora.db store_id_access allow localnet store_id_access deny all
获取fedora.db的内容(此时缓存fedora 25)是获取镜像列表中的URL的一些技巧
basearch="x86_64" releasever=25 mirrorlist="https://mirrors.fedoraproject.org/Metalink?repo=fedora-$releasever&arch=$basearc curl -s "$mirrorlist" >tmp.db
您需要将“tmp.db”结果中的“url”转换为此处说明的格式http://wiki.squid-cache.org/Features/StoreID/DB.这可能是自动化的(任何志愿者?)
然后你会得到像这样的“fedora.db”,它在上面的squid.conf中使用.
^http:\/\/ftp\.halifax\.rwth-aachen\.de\/fedora\/linux\/releases\/25\/Everything\/(x86_64\/[a-zA-Z0-9\-\_\.\/]+rpm)$ http://repo.mirrors.squid.internal/fedora/25/$1 ^http:\/\/mirror2\.hs-esslingen\.de\/fedora\/linux\/releases\/25\/Everything\/(x86_64\/[a-zA-Z0-9\-\_\.\/]+rpm)$ http://repo.mirrors.squid.internal/fedora/25/$1 ^http:\/\/fedora\.tu-chemnitz\.de\/pub\/linux\/fedora\/linux\/releases\/25\/Everything\/(x86_64\/[a-zA-Z0-9\-\_\.\/]+rpm)$ http://repo.mirrors.squid.internal/fedora/25/$1 ... much more
编辑:替代方案,一个更危险的路径,但也许也足够了,这样一个更全局的模式匹配:
\/fedora\/linux\/releases\/([0-9]+)\/Everything/x86_64\/(.*)$ http://repo.mirrors.squid.internal/fedora/releases/$1/$2 \/fedora\/linux\/updates\/([0-9]+)\/x86_64\/(.*)$ http://repo.mirrors.squid.internal/fedora/updates/$1/$2
资料来源:
> http://wiki.squid-cache.org/Features/StoreID
> http://wiki.squid-cache.org/Features/StoreID/DB