我家里有多台Ubuntu机器,并且互联网连接速度非常慢,有时需要一次更新多台机器(尤其是在新的Ubuntu版本中)。需要下载软件包,其他机器可以使用第一台机器来获得Debs吗?是否涉及建立我自己的本地镜像?还是代理服务器?还是可以使它更简单?

#1 楼

我对一系列解决方案进行了研究,一些Ubuntu开发人员提出了适用于10.04及更高版本的代理配置(基于Squid)。称为squid-deb-proxy。它只需要一台机器即可充当服务器。大型组织通常会运行自己的完整镜像,但是对于大多数人而言,按需镜像就足够了。
为什么使用squid-deb-proxy?

在客户端无需编辑文件。
使用zeroconf,以使客户端成为“零配置”
使用现有的可靠代理解决方案,而不是编写新工具。
易于设置为典型的Linux管理员。

服务器配置
在要用作服务器的计算机上,使用以下工具安装该工具:
sudo apt-get install squid-deb-proxy avahi-utils
现在启动服务位:
 sudo start squid-deb-proxy

和avahi位(如果您使用的是12.04+,则不需要此功能):
 sudo start squid-deb-proxy-avahi

这将安装代理服务器(默认情况下侦听端口8000)和该服务器进行播发所需的avahi工具本身通过zeroconf在网络上。
客户端配置
在要使用缓存的每台计算机上(客户端和服务器本身,以便它也可以使用缓存),您需要安装让我们易于寻找的客户端工具如果要自动配置服务器,请单击此处:

或通过命令行:
sudo apt-get install squid-deb-proxy-client

可选:为了获得最大效率,您应该将一台计算机设置为自动下载更新,以便在您的其他计算机需要它已经在缓存中。您可以通过以下方法执行此操作:转到系统->管理->更新管理器,然后单击“设置...”按钮,在“更新”选项卡中将其设置为自动下载所有更新。

缓存第三方来源
默认情况下,缓存设置为仅缓存官方Ubuntu存储库。要添加更多,您需要将它们添加到/etc/squid-deb-proxy/mirror-dstdomain.acl的源列表中。您可以在此处添加ppa.launchpad.net或可能使用的其他服务。对该文件进行更改后,必须运行sudo restart squid-deb-proxy才能使更改生效。
手动配置
如果由于某些原因您不想使用zeroconf(出于网络原因或其他原因),则可以可以通过编辑/etc/apt/apt.conf并添加以下节来手动设置客户端以使用代理,(将0.0.0.0替换为服务器的IP地址):
 Acquire { 
   Retries "0"; 
   HTTP { Proxy "http://0.0.0.0:8000"; };
 };

防火墙
正在使用防火墙,avahi在地址224.0.0.0/4上使用5353,并要求使用如下规则:
# Specifically port 5353 which avahi uses
-A INPUT -i eth2 -d 224.0.0.0/4 --dport 5353 -j ACCEPT

# OR

# Wide open so all local broadcasting works
-A INPUT -i eth2 -d 224.0.0.0/4 -j ACCEPT

接下来,您需要打开TCP端口8000才能通过代理进行实际通信。差不多是这样的:
-A INPUT -i eth2 -p tcp -m tcp --dport 8000 -d 192.168.0.1 -s 192.168.0.0/24 --syn -j ACCEPT

这些规则只是为了帮助您。它们可能不会一对一地匹配您的设置。 (即错误的接口,错误的专用网络IP地址等)。
确认其正常工作
首先在服务器上添加日志,以便您可以查看它:tail -F /var/log/squid-deb-proxy/access.log,然后在具有以下功能的任何计算机上运行更新:客户端安装;日志应该开始滚动,并显示以下条目:
1307310795.647     32 192.168.1.106 TCP_MISS/302 768 GET http://us.archive.ubuntu.com/ubuntu/dists/natty-proposed/universe/i18n/Translation-en.xz - DIRECT/141.210.26.10 text/html
1307310795.683     34 192.168.1.106 TCP_MISS/302 752 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.716     32 192.168.1.106 TCP_MISS/302 746 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.750     32 192.168.1.106 TCP_MISS/302 764 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.784     32 192.168.1.106 TCP_MISS/302 758 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.817     32 192.168.1.106 TCP_MISS/404 657 GET http://us.archive.ubuntu.com/dists/natty-proposed/multiverse/i18n/Translation-en_US.xz - DIRECT/141.210.26.10 text/html

这意味着客户端可以看到缓存,但是丢失了,这是预期的,因为它尚未缓存任何内容。随后的每个运行都应显示为TCP_HIT。您可以在/var/cache/squid-deb-proxy中找到鱿鱼缓存文件本身。
使用它
从那时起,网络上的所有计算机都将在访问外部网络以获取软件包之前检查缓存。如果有可用的新软件包,则第一台计算机将从网上下载该软件包,之后对该软件包的后续请求将从服务器发送到客户端。
TODO
我们仍然需要使apt能够直接使用网络上的广告缓存,并且默认情况下是这样,因此您不需要安装客户端。我们还需要修复403的deb不在镜像列表中的错误。

评论


2014/01/21 14:56:31 |错误:/ var / cache / squid-deb-proxy / 03:(2)没有这样的文件或目录致命:无法验证交换目录之一,请检查cache.log以获取详细信息。如果需要,或者如果是第一次运行Squid,请运行'squid -z'创建交换目录。鱿鱼缓存(版本3.3.8):异常终止。

– ump击
2014年1月21日,2:05

您还需要安装乌贼。

– ump击
2014年1月21日,2:11

看来“手动配置”不再有效。 / etc / apt下没有apt.conf文件。但是,在/etc/apt/apt.conf.d下有很多文件的设置。我想我们现在应该在那创建一个文件吗?

– Alexis Wilke
16年7月24日在18:06

此外,看起来TODO已解决。也就是说,我无需执行任何操作,并且首先使用了缓存。尽管该错误看起来并不像已被标记为已修复。

– Alexis Wilke
16年7月24日在18:14

当然,如果apt.conf.d现在已完成,请对此答案提交编辑,干杯!

–乔治·卡斯特罗(Jorge Castro)
16年7月24日在18:36

#2 楼

apt-cacher-ng是我的答案-在较小的环境(大约20个客户端)中我没有遇到任何问题,因此我想@MagicFab提到的问题已在当前版本中解决(安装在Ubuntu 10.04和10.10上)。服务器不需要任何配置,只需指示客户端将服务器用作其程序包管理器代理即可。

通过安装apt-cacher-ng程序包,可以完全安装和配置服务器。
/>
需要通过设置APT代理来配置客户端-通过添加文件/etc/apt/apt.conf.d/01proxy,其中包含此文件(其中“ your-apt-server”是您的服务器的名称或IP地址):

Acquire::http { Proxy "http://your-apt-server:3142"; };


完成-现在,无论您使用什么来源或系统版本,软件包都将由服务器缓存(例如9.10、10.04和11.04客户端可以使用10.04服务器)没有任何问题或冲突)。


如果您的客户端便携式计算机在网络之间漫游,它将变得更加复杂-我制作了一个脚本来设置正确的代理取决于网络地址;该脚本是可执行文件,位于/etc/network/if-up.d/apt-proxy中。从DHCP服务器接收到IPv4地址后,该脚本将为相应的网络设置正确的apt-cacher服务器:

#!/bin/sh

set -e
# Don't bother when lo is configured.
if [ "$IFACE" = lo ]; then
    exit 0
fi
# Only run from ifup.
if [ "$MODE" != start ]; then
    exit 0
fi
# currently only cares about IPv4
if [ "$ADDRFAM" != inet ] && [ "$ADDRFAM" != NetworkManager ]; then
    exit 0
fi
# only run for DHCP-assigned addresses
if [ "$DHCP4_IP_ADDRESS" = "" ]; then
    exit 0
fi

# we're matching on network *broadcast* address,
#  not the specific IP address we were assigned
case "$DHCP4_BROADCAST_ADDRESS" in
    10.3.141.255)
        PROXY='Acquire::http::Proxy "http://my-home-server:3142";';
        ;;
    192.168.154.255)
        PROXY='Acquire::http::Proxy "http://work-server.foo.bar.example.com:3142";';
        ;;
    # add as needed
    *)
        # unknown, no proxying
        PROXY=""
        ;;
esac

# set the proxy
FNAME="/etc/apt/apt.conf.d/01proxy"
echo -n "$PROXY">$FNAME

exit 0


评论


apt-cacher-ng也支持IPv6(我记得其他一些解决方案不支持)。

–阿岑代尔
2011年6月22日13:34

一年后,我转到了squid-deb-proxy和squid-deb-proxy-client:zeroconf确实意味着客户端上的零配置,这对游牧用户非常有用-如果服务器没有响应,客户端默认为直接下载。

– Piskvor离开了建筑物
2012年5月21日在9:22

apt-cacher-ng很烂,很麻烦,挂在下载包上。例如,我看到它下载了30 MB软件包所需的150 MB

– pylover
2015年9月2日在22:46

apt-cacher-ng完美运行。您的系统出了点问题。在Precise上,squid-deb-proxy要安装Squid。坚持下去。

–肯·夏普
2015年11月20日的19:00

现在,这是使缓存与pbuilder一起使用的最佳解决方案。开箱即用。看起来好像已经支持zeroconf(在2016年),但是我(至今)还没有实现它。

– Alexis Wilke
16年7月24日在21:46

#3 楼

最简单的解决方案之一是设置apt-proxy。

在此处阅读ubuntu文档:https://help.ubuntu.com/community/AptProxy

#4 楼

我更喜欢使用debmirror实用程序设置本地镜像。这里是一个示例示例。

debmirror --progress --verbose --nosource --method=ftp --passive \
 --host=ftp.osuosl.org --root=pub/ubuntu \
 --dist=lucid,lucid-updates,lucid-security,lucid-backports \
 --section=main,restricted,universe,multiverse --arch=amd64 \
 /d2/ftp/mirror/ubuntu-lucid


我大约运行一次周,并以此为基础建立一个或多个“补丁级别”。例如...

 cd /d2/ftp/mirror/
 cp -al ubuntu-lucid ubuntu-lucid-20100908


这将创建树的链接副本(使用几乎零磁盘空间),我可以将每个本地服务器指向apt源中.list

评论


您应该检查ubumirror,它是归档文件中的便捷软件包,具有为您设置的所有内容。这是官方镜子使用的。

–乔治·卡斯特罗(Jorge Castro)
2010-09-08 17:39

#5 楼

在小型网络(例如家庭/小型办公室)中,我使用apt-cacher-ng效果很好。我尚未检查最新版本,但我知道它需要服务器和客户端的仔细设置,它最适合仅从本地网络获取更新的客户端。

我尝试了鱿鱼上面的基于解决方案的解决方案,但它需要应用多个解决方法和比我想要的更多的客户端配置,因此,它还感觉不到它可以在小型设置中代替apt-cacher-ng。

#6 楼

apt-cacher并不是最容易设置的,并且无法在dist升级中幸免。

在服务器上安装squid-deb-proxy,在客户端上安装squid-deb-proxy-client。它使用zeroconf Avahi,因此不需要任何配置。

如果您要缓存的不仅仅是debs,我就不会打扰Squid。下一个大问题是Apache Traffic Server。
http://trafficserver.readthedocs.org

评论


squid-deb-proxy坚持安装乌贼。而apt-cacher已经死了,apt-cacher-ng就是它所在的位置。

–肯·夏普
15年11月20日在19:16