如何在可用时使用apt-cacher-ng?

我在本地网络上使用apt-cacher-ng,并在客户端上进行了以下配置:
Acquire::http { Proxy "http://acng-host:3142"; };

一些客户端是笔记本电脑,那么我该如何配置它们只在此网络可用时使用缓存呢?
3个回答

从服务器上,你可以通过avahi向网络宣告存在一个apt-cacher-ng实例。
从客户端上,你可以检查是否存在apt-cacher-ng服务,并相应地修改apt代理设置。

服务器

安装

$ sudo apt-get install apt-cacher-ng squid-deb-proxy-client

对于早于14.04版本的Ubuntu,请将以下片段放入/etc/avahi/services/apt-cacher-ng.service文件中。
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
 <name replace-wildcards="yes">apt-cacher-ng proxy on %h</name>
 <service protocol="ipv4">
  <type>_apt_proxy._tcp</type>
  <port>3142</port>
 </service>
</service-group>

客户

安装

$ sudo apt-get install squid-deb-proxy-client

这里是一个安装服务器|客户端的片段,根据是否已经存在apt-get代理来决定。 来源:http://blog.surgut.co.uk/2013/03/avahi-apt-cacher-ng-sbuild.html

这真是个不错的发现!我在想为什么每当建议使用apt-cacher-ng时,这不是默认设置呢?Dimitri John Ledkov有一个canonical.com的地址,而且这段代码已经包含在14.04中了。我刚刚对你的回答进行了编辑。 - LiveWireBT
所以,在18.04上的魔法似乎出现在/etc/apt/apt.conf.d/30autoproxy中,其中包含一行代码:Acquire::http::ProxyAutoDetect "/usr/share/squid-deb-proxy-client/apt-avahi-discover";(指的是一个Python脚本)。太棒了。这是由squid-deb-proxy-client安装的。所以对于我的情况来说,我根本不需要在服务器上使用它! - 0xC0000022L

这样的东西应该可以工作:

/etc/NetworkManager/dispatcher.d

#!/bin/bash
ip=10.0.1.13
port=3142
nc -w 1 $ip $port
proxy_file="/etc/apt/apt.conf.d/02local_proxy"
if [ $? -eq 0 ]; then
    echo "Acquire::http { Proxy \"http://$ip:$port\"; };" > $proxy_file
    echo 'Acquire::https { Proxy "false"; };' >> $proxy_file
else
    rm -f $proxy_file
fi

修复权限
sudo chmod +x /etc/NetworkManager/dispatcher.d/99SetAptProxy

注意事项:

  • "nc"命令测试它是否能够连接到给定IP地址上的3142端口。
  • 此脚本在网络管理器更改网络接口时每次运行。
  • 请随意更改您检测代理的方式,这对我来说有效,但如果您在外部网络上安装软件包,这可能会造成安全漏洞。

不是一个完美的答案,因为您将需要更改现有的缓存设置,但是 squid-deb-proxy 是一个很好的解决方案,可以提供一个如果可用就会被透明使用的缓存,而且在缓存服务器和客户端上都非常容易设置。有关详细信息,请参阅这个问题的第一个答案


...希望这是指“如果可用并且客户端安装了avahi,则将透明地使用” ;) - 0xC0000022L