Eu fiz algumas pesquisas em um monte de soluções e alguns desenvolvedores do Ubuntu vieram com uma configuração de proxy (baseada no Squid) para 10.04 e posterior. É chamado squid-deb-proxy
. Apenas requer uma máquina para atuar como o servidor. Grandes organizações geralmente executam seus próprios espelhos completos, mas para a maioria das pessoas o espelhamento on demand é suficiente.
Por que o squid-deb-proxy?
- Nenhuma edição de arquivos no lado do cliente.
- Use o zeroconf para que os clientes sejam "zero config"
- Use uma solução de proxy sólida existente em vez de criar uma nova ferramenta.
- Fácil de configurar para um administrador típico do Linux.
Configuração do servidor
Na máquina que você deseja atuar como servidor, instale a ferramenta com:
sudo apt-get install squid-deb-proxy avahi-utils
Agora inicie os bits de serviço:
sudo start squid-deb-proxy
E os bits avahi (Você não precisa disso se estiver em 12.04 +):
sudo start squid-deb-proxy-avahi
Isso instalará o servidor proxy (que escuta a porta 8000 por padrão) e as ferramentas avahi necessárias para o servidor se anunciar em sua rede via zeroconf.
Configuração do cliente
Em cada um dos computadores que você deseja usar o cache (os clientes e o próprio servidor para que ele também possa usar o cache), é necessário instalar a ferramenta do lado do cliente procure o servidor automaticamente, mande clicar aqui:
ouvialinhadecomando:
sudoapt-getinstallsquid-deb-proxy-client
Opcional:Paraeficiênciamáxima,vocêdeveconfigurarumamáquinaparabaixaratualizaçõesautomaticamente,paraque,quandooutrasmáquinasprecisarem,jáestejamnocache.VocêpodefazerissoindoemSystem->Administration->UpdateManagere,emseguida,nobotão"Configurações ...", na guia Atualizar, defina-a para baixar automaticamente todas as atualizações.
Armazenandofontesdeterceirosemcache
Porpadrão,ocacheéconfiguradoparaarmazenarapenasrepositóriosoficiaisdoUbuntu.Paraadicionarmais,vocêprecisaadicioná-losàlistadefontesem/etc/squid-deb-proxy/mirror-dstdomain.acl
.Éaquiquevocêpodeadicionaroppa.launchpad.netououtrosserviçosquevocêpodeusar.Depoisdefazeralteraçõesnestearquivo,vocêdeveexecutarsudorestartsquid-deb-proxy
paraqueasalteraçõessejamefetivas.
Configuraçãomanual
Seporalgummotivovocênãoquiserusarozeroconf(pormotivosderedeouqualqueroutro),vocêpodedefinirmanualmenteumclienteparausaroproxyeditando/etc/apt/apt.conf
eadicionandoaseguintesub-rotina(substituao0.0.0.0poroendereçoIPdoservidor):
Acquire{Retries"0";
HTTP { Proxy "http://0.0.0.0:8000"; };
};
Firewall
Caso você esteja usando um firewall, o avahi usa o 5353 nos endereços 224.0.0.0/4 e exige uma regra como esta:
# 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
Em seguida, você precisa abrir a porta TCP 8000 para a comunicação real por meio do proxy. Algo mais ou menos assim:
-A INPUT -i eth2 -p tcp -m tcp --dport 8000 -d 192.168.0.1 -s 192.168.0.0/24 --syn -j ACCEPT
Estas regras são apenas para ajudá-lo. Eles provavelmente não corresponderão à sua configuração de um para um. (isto é, interface errada, endereços IP errados da rede privada, etc.)
Confirmando o funcionamento
Primeiro, siga o log no servidor para que você possa analisá-lo: tail -F /var/log/squid-deb-proxy/access.log
e execute uma atualização em qualquer máquina que tenha o cliente instalado; o log deve começar a rolar com entradas como esta:
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
O que significa que os clientes vêem o cache, mas estão faltando, o que é esperado, uma vez que não armazenou nada em cache ainda. Cada execução subseqüente deve aparecer como TCP_HIT. Você pode encontrar os próprios arquivos de cache do squid em /var/cache/squid-deb-proxy
.
Usando
A partir daí, todas as máquinas da sua rede verificarão o cache antes de acessar a rede externa para buscar pacotes. Se houver novos pacotes disponíveis, a primeira máquina fará o download da rede, depois que as solicitações subsequentes desse pacote vierem do servidor para os clientes.
TODO
Ainda precisamos ativar o apt apenas para usar um cache anunciado na rede, e por padrão, para que você não precise instalar a parte do cliente. Nós também precisamos corrigir o bug que o deb do 403 não está a lista de espelhos.