我已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)