apt-cacher-ng является ответом для меня - я не сталкивался с проблемами в небольших средах (около 20 клиентов), поэтому я предполагаю, что проблемы @MagicFab были решены в текущей версии (установленной на Ubuntu 10.04 и 10.10) , Для сервера нет необходимости в настройке, и вам нужно только указать своим клиентам использовать сервер в качестве прокси-сервера диспетчера пакетов.
Сервер полностью установлен и настроен установкой пакета apt-cacher-ng. [ ! d3]
Клиенты должны быть настроены путем настройки прокси-сервера APT - добавив файл /etc/apt/apt.conf.d/01proxy, содержащий это (где «ваш-apt-сервер» - это имя или IP-адрес вашего сервера):
Acquire::http { Proxy "http://your-apt-server:3142"; };
полностью установлен - теперь пакеты будут кэшироваться сервером, независимо от того, какие источники вы используете или какую версию системы у вас есть (например, сервер 10.04 может быть использован 9.10, 10.04 и 11.04 клиентов без каких-либо проблем или конфликтов).
Если у вас есть клиентский ноутбук (ы), который перемещается между сетями, он становится немного сложнее - я создал скрипт который устанавливает правильный прокси-сервер в зависимости от сетевого адреса; сценарий является исполняемым и в /etc/network/if-up.d/apt-proxy. После получения IPv4-адреса с DHCP-сервера скрипт установит правильный сервер 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