![意外的鱿鱼行为(openSUSE 更新的缓存)](https://linux22.com/image/53320/%E6%84%8F%E5%A4%96%E7%9A%84%E9%B1%BF%E9%B1%BC%E8%A1%8C%E4%B8%BA%EF%BC%88openSUSE%20%E6%9B%B4%E6%96%B0%E7%9A%84%E7%BC%93%E5%AD%98%EF%BC%89.png)
由于没有任何经验,我刚刚设置了squid
代理。它的唯一目的是防止所有 Linux 系统 (openSUSE) 从 Internet 下载更新。
可以轻松地为 openSUSE 更新工具配置代理。tcpdump
显示其他系统访问代理并且代理访问存储库。
我不明白的是:发行版升级后,第一次在线更新应该是 400 MiB 到 700 MiB(这是 YaST 在开始更新之前所说的)。但squid
存储目录仅包含约 80 MiB 数据。
这些access.log
节目既有成功也有失败。即使由于某些奇怪的原因,Linux 系统会访问不同的服务器(是否存在某种 DNS 不透明重定向?),那么我预计代理存储至少与最大下载一样大。
存储库是http
,不是,https
因此代理应该不会有问题。
发现问题
这个链接在这个答案在这里提供了鱿鱼为什么不能正常工作的信息:
软件包是通过分布在多个镜像上的分段下载来下载的,这使得鱿鱼无法进行大量缓存。
答案1
我找到了这个教程:如何使用 Squid 缓存 openSUSE 存储库。
摘抄
如何使本地 Squid Web 缓存与 openSUSE 存储库和 openSUSE 网络安装过程配合使用。实际上,如何运行完全自主的本地按需存储库镜像。即使使用高速 ADSL 互联网连接,也可以轻松实现高达 60% 的节省。
以下是该文章的分步详细信息。
一步步
乌贼
Squid Web 代理是此设置中的关键元素,因此安装有效的 Squid 是先决条件。设置 Squid 并不像看起来那么复杂,但您必须查阅鱿鱼文档,这超出了本文的范围。无论您是喜欢使用环境变量 http_proxy 等直接访问,还是运行透明代理(就像我一样),都不是很重要。
笔记:这里的设置适用于 Squid 2.7,我认为 storeurl_rewrite 功能尚未在 Squid 3.x 中实现。
杰斯雷德
jesred 是 URL 重写器。它相当成熟,但功能齐全。 (原始网页)。我必须进行一些更改才能使其完全兼容鱿鱼2.7:
目前,它还没有打包,您必须从头开始构建它:
tar xzvf <tarball> cd jesred-1.3 make
安装:完成后,将二进制文件 jesred 复制到
/usr/local/bin
您自己的二进制文件的首选位置。jesred 的配置文件:
/etc/squid/jesred.conf
allow = /etc/squid/redirector.acl rules = /etc/squid/opensuse-redirect.rules redirect_log = /var/log/squid/redirect.log rewrite_log = /var/log/squid/rewrite.log
使用
/etc/squid/redirector.acl
你可以控制重写器应该处理哪些客户端的请求,但我发现使用 Squid 的 ACL 和 storeurl_access 指令实际上更容易控制,因此我为所有客户端启用:# rewrite all URLs from 0.0.0.0/0
/etc/squid/squid.conf
配置:将以下行添加到
/etc/squid/squid.conf
storeurl_rewrite_program /usr/bin/jesred storeurl_rewrite_children 5acl metalink req_mime_type application/metalink4+xml storeurl_access deny metalink storeurl_access allow localnet storeurl_access allow localhost acl localhost src 127.0.0.0/8 acl localnet src 192.168.0.0/16
fetcher206 日志文件
修改
/etc/squid/squid./conf
如下:logformat f206 %{%Y-%m-%dT%H:%M:%S}tl %Ss/%03Hs %rm %ru %mt access_log /var/log/squid/fetch206.log f206
该日志将由 fetcher206 读取。
为了防止它变得太大,请将以下内容添加到
/etc/logrotate.d/
:/var/log/squid/fetch206.log { compress dateext maxage 365 rotate 5 size=+4M notifempty missingok create 640 squid root sharedscripts postrotate /etc/init.d/squid reload endscript }
鱿鱼延迟池
这是一个可选步骤 - 根据您的可用下游带宽,您可能希望限制 fetcher206 用于检索存储库文件的内容。这可以防止
- 减慢当前安装速度并
- 滥用互联网连接
delay_pools 1 delay_class 1 1 delay_access 1 allow localhost delay_parameters 1 1000000/1000000
将以上内容添加到 /etc/squid/squid.conf - 它定义了一个delay_pool,只能从本地主机(其中 fetcher206 将运行 wget)访问,最大带宽为 1MByte/sec。
如果您有其他来自 localhost 的 http/代理流量,您只需添加另一个 127.0.0.x 地址,并将其专门用于 fetcher206。
镜像数据库
我们需要可用 openSUSE 镜像的最新列表。这可以从mirrors.opensuse.org 检索。目前,我使用 XSL 来解析 HTML 页面,但我希望直接从 MirrorBrain 转移到适当格式的列表。
mkdir -p /var/lib/fetcher206 cp tarball/Makefile.mirrors /var/lib/fetcher206/Makefile cp tarball/extract* /var/lib/fetcher206/ make -C /var/lib/fetcher206 cp tarball/opensuse_mirrors.cron /etc/cron.d/opensuse_mirrors
重新加载鱿鱼
当你已经走到这一步时,是时候重新加载鱿鱼了
squid -k reconfigure
获取器206
fetcher206 目前是一个 PHP 脚本。只需将其复制到 /usr/bin 即可安装。它有一些硬编码选项,例如同时运行的 wget 数量、日志文件名称等。
fetcher206 还没有 systemd 服务单元,也没有 LSB 初始化脚本。目前,您只需从以下内容开始:
startproc -s -q /usr/bin/fetcher206