如何在服务器端触发 apt-cacher-ng 的缓存更新?

如何在服务器端触发 apt-cacher-ng 的缓存更新?

我已apt-cacher-ng在服务器上成功运行,并将其用作 20 多个使用各种发行版和 ppa 的设备/vm 的 apt 代理(除了要求它们使用缓存之外,我无法控制客户端)

我正在寻找一种方法,当我知道网络使用量最小时,在服务器端触发更新apt-cacher-ng缓存更新。换句话说,我想在服务器端检索代理客户端正在使用的所有 dists 和代理 ppa 的所有软件包的最新版本。目标是确保当客户端触发升级时,缓存已更新的可能性尽可能高(因此可以立即下载软件包)。

我想象有一个 cron 作业触发一个脚本,该脚本扫描apt-cacher-ng缓存,检索有关缓存、dists、ppas、包的信息,并请求下载所有包的最新版本(无需在本地安装它们)

不幸的是,我不知道从哪里开始“使它成为现实”,并且找不到可以做到这一点的工具/脚本(也许这是一个愚蠢的想法,这就是为什么没有人实现它)。

实现这一目标的最佳方法是什么?

答案1

您可以尝试部分镜像中的功能apt-cacher-ng

可以创建远程软件包存储库的部分本地镜像。执行此操作的方法通常称为预缓存。... 浏览器生成的 CGI URL 可由其他客户端调用以重复此作业,例如在每日执行的脚本中。

然而,我认为最好的解决方案是客户配置APT::Periodic设置。

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";

这种方法的优点

  • 仅会下载和缓存所需的包。
  • 当客户端进行升级时,所有软件包都已经下载到客户端。
  • 周期性脚本内置了随机休眠功能apt,可保护代理免受大量请求的影响。这还有助于确保当文件不在缓存中时,只有第一个客户端受到影响。

如果您能够请求客户端使用代理,那么我希望您也可以请求客户端配置定期设置。

一切APT::Periodic选项均在apt.systemd.daily 脚本

#  APT::Periodic::Update-Package-Lists "0";
#  - Do "apt-get update" automatically every n-days (0=disable)
#    
#  APT::Periodic::Download-Upgradeable-Packages "0";
#  - Do "apt-get upgrade --download-only" every n-days (0=disable)

相关内容