为了节省我的互联网计划的带宽和数据,我在一台台式机上安装了 squid-deb-proxy,并在这台台式机和其他几台机器上安装了客户端。然而,基于邮报这让我想到了这一点,听起来如果我将我的笔记本电脑*带到不同的网络并在那里进行更新,当我回到我的网络时,下载的更新将不会自动复制回 squid-deb-proxy 服务器。
假设这是正确的(我稍后会进行测试),有没有办法可以将这些包粘贴到缓存中,这样我就不必再为网络中的其他机器下载它们一次了?
* 正如评论中所述,我可以直接将笔记本电脑设置为代理服务器,但在我的特定情况下,笔记本电脑实际上是 1) 并非始终运行的 VM,2) 位于并非始终打开的笔记本电脑中。因此,该解决方案虽然不错,但并不适用于我的情况。
答案1
您可以使用apt-move
(来自同名软件包)从笔记本电脑的 apt 缓存中的文件创建本地 apt 存储库。然后使用rsync
在您的 LAN 上保留此存储库的同步副本。最后,将其他 LAN 机器指向 顶部的本地存储库的 LAN 副本sources.list
,以便 apt 优先使用本地存储库而不是远程存储库。
答案2
这仍然是一个不完整的答案,但它可能是最好的答案,所以如果对可能的部分/丑陋/复杂的解决方案感到好奇,请继续阅读。
有趣的问题,我遇到过同样的问题,但我从未解决过,相反,我只是试图将我的 apt-getting 限制在本地局域网之外。这真的不值得这么麻烦,去年我最多浪费了 20MB。我的 iso torrent 种子弥补了这一点。但是!
您可以在笔记本电脑和家里之间设置隧道/代理,以利用家里的缓存(出于隐私原因,这无论如何都是个好主意),但是,这样一来,您将依赖于上传速度。这不仅会很慢,而且您将使用 2 倍的带宽来下载相同的东西。1 倍从 Ubuntu 镜像进入您的局域网,1 倍传出到咖啡店。
我建议可以在笔记本电脑上运行缓存服务器,然后使用 rsync 使其与家庭服务器保持同步。但这也带来了一个问题,即当您在家时,笔记本电脑上的服务器仍将运行。为了解决这个问题,我认为有两种可能。1. 在家时停止笔记本电脑上的缓存服务器 2. 将家庭服务器上的所有缓存副本也保留在笔记本电脑上(额外的空间要求),并且不仅通过回家时使用 rsync 将缓存数据推送到服务器来实现这一点,还定期将缓存数据拉到笔记本电脑服务器。在提出这个建议时,我假设一台服务器上的 squid-deb-proxy 缓存与另一台服务器兼容,并且您可以像这样交换文件。这些选项当然也需要一些脚本。我的缓存位于 /var/cache/squid-deb-proxy/,而下面的内容不是人类可以立即理解的。
答案3
我们使用一种简单而愚蠢的方法:squid-deb-proxy 可以使用自身作为代理。因此我只需执行以下操作:
我在 squid-deb-proxy 服务器上安装客户端软件:
apt-get 安装 squid-deb-proxy-client
我创建了一个简单的脚本,列出了所有已安装的包 - 并重新下载每个包:
#!/bin/bash # Create temp dir & change into it tmpdir=$(mktemp -d) pushd $tmpdir # Get all installed packages and re-download them for package in $(dpkg --get-selections | cut -f 1); do apt-get download $package; done; popd # Delete tmp dir
这样我们已经有一个不太糟糕的基本缓存了。
如果我们想将现有服务器的所有包添加到缓存中,那么我们只需执行相同的步骤 1)和 2)