squid 和缓存 dnf/yum 下载

Man*_*gor 7 fedora centos squid

对不起,如果这是一个新手问题。我试着先描述一下情况,然后鱿鱼questin就会进来。

当前的 Fedora/Centos 安装在 /etc/yum.repos.conf 中的正常配置文件中有一个如下所示的金属链接。

metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
Run Code Online (Sandbox Code Playgroud)

这个 metalink 实际上让 yum/dnf 选择一个“随机”的服务器站点(由服务器根据 metalink 客户端的位置在世界区域随机选择)。
这也用于下载速度较慢的情况下切换到下一个更好的站点。

我注意到由于 docker 构建了大量下载,这就是为什么我正在考虑所有机器都必须使用的鱿鱼代理。但是 yum/dnf 的这种“随机”策略让我很担心。我确实理解 fedora/centos 分配这个免费存储库的负载的意图,所以实际上我不想破坏这个策略

鱿鱼可以以某种方式智能地检测到客户端只是使用“另一个 fedora/centos 存储库 url”并智能地缓存它吗?metalink 列表本身似乎非常稳定(它只是在询问时更改顺序,但列表本身似乎是相同的)。

意图:不要存储 1000 个相同文件的副本,仅仅因为它来自不同的服务器。

我怎么用鱿鱼做到这一点?

编辑:有人有使用这个http://wiki.squid-cache.org/Features/StoreID缓存 dnf/yum 的经验吗?

Man*_*gor 5

回答我自己的问题。发现squid 支持使用storeid_file_rewrite 脚本处理此类问题。唯一棘手的事情是获取一个有效的 url 列表,它们代表相同的存储库。到目前为止似乎工作正常。

在 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
Run Code Online (Sandbox Code Playgroud)

要获取 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
Run Code Online (Sandbox Code Playgroud)

您需要将“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
Run Code Online (Sandbox Code Playgroud)

编辑:替代,更危险的路径,但也许也足够了,更全局的模式匹配是这样的:

\/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
Run Code Online (Sandbox Code Playgroud)

来源


iwa*_*rue 0

您可以考虑使用 baseurl 代替,如下所示: http: //serverascode.com/2014/03/29/squid-cache-yum.html

所以使用:

baseurl=http://mirror.fedoraproject.org/fedora/$releasever/os/$basearch/

代替:

metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch

这通过降低动态性来避免 Metalink 的问题。

如果你打算使用baseurl,我怀疑实现你想要做的事情的另一种方法是使用apache或nginx(我会选择nginx)作为repo镜像的反向代理。

除非你打算将鱿鱼用于其他目的,否则我想我实际上可能更喜欢将 nginx 设置为本地镜像,而不是使用互联网镜像作为后端/上游。