Fiz algumas pesquisas sobre várias soluções e alguns desenvolvedores do Ubuntu criaram uma configuração de proxy (baseada no Squid) para 10.04 e posterior. É chamado squid-deb-proxy
. Requer apenas uma máquina para atuar como servidor. As grandes organizações geralmente executam seus próprios espelhos completos, mas para a maioria das pessoas o espelhamento sob demanda é suficiente.
Por que squid-deb-proxy?
- Não há edição de arquivos no lado do cliente.
- Use zeroconf para que os clientes tenham "zero config"
- Use uma solução de proxy sólida e existente em vez de escrever uma nova ferramenta.
- Fácil de configurar para um administrador Linux típico.
Configuração do servidor
Na máquina em 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 no 12.04+):
sudo start squid-deb-proxy-avahi
Isso instalará o servidor proxy (que atende a porta 8000 por padrão) e as ferramentas avahi necessárias para que o servidor se anuncie na sua rede via zeroconf.
Configuração do cliente
Em cada um dos computadores em 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 que vamos procurar automaticamente o servidor, clicando aqui :
ou via linha de comando:
sudo apt-get install squid-deb-proxy-client
Opcional : Para obter a máxima eficiência, você deve configurar uma máquina para baixar automaticamente as atualizações, para que, quando as outras máquinas precisem, ela já esteja no cache. Você pode fazer isso acessando Sistema-> Administração-> Gerenciador de Atualizações e, em seguida, clique no botão "Configurações ...", na guia Atualização, defina-o para baixar automaticamente todas as atualizações.
Armazenamento em cache de fontes de terceiros
Por padrão, o cache é configurado para armazenar em cache apenas repositórios oficiais do Ubuntu. Para adicionar mais, você precisa adicioná-los à lista de fontes em /etc/squid-deb-proxy/mirror-dstdomain.acl
. É aqui que você pode adicionar o ppa.launchpad.net ou outros serviços que você pode utilizar. Depois de fazer alterações neste arquivo, você deve executar sudo restart squid-deb-proxy
para que as alterações sejam efetivas.
Configuração manual
Se, por algum motivo, você não quiser usar o zeroconf (por motivos de rede ou qualquer outra coisa), poderá configurar manualmente um cliente para usar o proxy editando /etc/apt/apt.conf
e adicionando a seguinte estrofe (substitua 0.0.0.0 pelo endereço IP do servidor ):
Acquire {
Retries "0";
HTTP { Proxy "http://0.0.0.0:8000"; };
};
Firewall
Caso você esteja usando um firewall, o avahi usa 5353 nos endereços 224.0.0.0/4 e requer uma regra semelhante a 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
Essas regras são apenas para ajudá-lo. Eles provavelmente não corresponderão à sua configuração de um para um. (ou seja, interface incorreta, endereços IP de rede privada incorretos etc.)
Confirmando que funciona
Primeiro, finalize o log no servidor para que você possa vê-lo: tail -F /var/log/squid-deb-proxy/access.log
e execute uma atualização em qualquer máquina em que o cliente esteja 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 veem o cache, mas o perdem, o que é esperado, pois ele ainda não armazenou nada em cache. Cada execução subsequente deve aparecer como TCP_HIT. Você pode encontrar os arquivos de cache do squid em si /var/cache/squid-deb-proxy
.
Usando isso
A partir de então, 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 para esse pacote virão do servidor para os clientes.
FAÇAM
Ainda precisamos habilitar o apt para usar apenas um cache anunciado na rede e, por padrão, para que você não precise instalar a parte do cliente. Também precisamos corrigir o bug que o deb do 403 não está na lista de espelhos.