意外的鱿鱼行为(openSUSE 更新的缓存)

意外的鱿鱼行为(openSUSE 更新的缓存)

由于没有任何经验,我刚刚设置了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% 的节省。

以下是该文章的分步详细信息。

一步步

  1. 乌贼

    Squid Web 代理是此设置中的关键元素,因此安装有效的 Squid 是先决条件。设置 Squid 并不像看起来那么复杂,但您必须查阅鱿鱼文档,这超出了本文的范围。无论您是喜欢使用环境变量 http_proxy 等直接访问,还是运行透明代理(就像我一样),都不是很重要。

    笔记:这里的设置适用于 Squid 2.7,我认为 storeurl_rewrite 功能尚未在 Squid 3.x 中实现。

  2. 杰斯雷德

    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
    
  3. /etc/squid/squid.conf

    配置:将以下行添加到/etc/squid/squid.conf storeurl_rewrite_program /usr/bin/jesred storeurl_rewrite_children 5

    acl 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
    
  4. 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
    }
    
  5. 鱿鱼延迟池

    这是一个可选步骤 - 根据您的可用下游带宽,您可能希望限制 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。

  6. 镜像数据库

    我们需要可用 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
    
  7. 重新加载鱿鱼

    当你已经走到这一步时,是时候重新加载鱿鱼了

    squid -k reconfigure
    
  8. 获取器206

    fetcher206 目前是一个 PHP 脚本。只需将其复制到 /usr/bin 即可安装。它有一些硬编码选项,例如同时运行的 wget 数量、日志文件名称等。

    fetcher206 还没有 systemd 服务单元,也没有 LSB 初始化脚本。目前,您只需从以下内容开始:

    startproc -s -q /usr/bin/fetcher206
    

参考

相关内容