Melhor maneira de armazenar em cache os downloads apt em uma LAN?

148

Eu tenho várias máquinas Ubuntu em casa e uma conexão de internet muito lenta, e às vezes várias máquinas precisam ser atualizadas de uma só vez (especialmente durante os novos lançamentos do Ubuntu).

Existe uma maneira onde apenas uma das minhas máquinas precisa baixar os pacotes, e as outras máquinas podem usar a primeira máquina para obter os debs? Envolve a criação do meu próprio espelho local? Ou um servidor proxy? Ou pode ser simplificado?

    
por Ken Simon 03.09.2010 / 01:34

6 respostas

127

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-proxyparaqueasalteraçõessejamefetivas.

Configuraçãomanual

Seporalgummotivovocênãoquiserusarozeroconf(pormotivosderedeouqualqueroutro),vocêpodedefinirmanualmenteumclienteparausaroproxyeditando/etc/apt/apt.confeadicionandoaseguintesub-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.

    
por Jorge Castro 03.09.2010 / 01:52
37

apt-cacher-ng é a resposta para mim - não encontrei nenhuma problemas em ambientes pequenos (aproximadamente 20 clientes), então eu suponho que os problemas @ MagicFab mencionadas foram resolvidas na versão atual (instalada no Ubuntu 10.04 e 10.10). Não há configuração necessária para o servidor e você só precisa instruir seus clientes a usar o servidor como seu proxy do gerenciador de pacotes.

O servidor está completamente instalado e configurado instalando o pacote apt-cacher-ng .

Os clientes precisam ser configurados configurando o proxy APT - adicionando o arquivo /etc/apt/apt.conf.d/01proxy , contendo este (onde "seu-apt-server" é o nome do seu servidor ou endereço IP):

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

Feito - agora os pacotes serão armazenados em cache pelo servidor, independentemente das fontes que você usar ou da versão do sistema que você possui (por exemplo, um servidor 10.04 pode ser usado por clientes 9.10,10.04 e 11.04 sem quaisquer problemas ou conflitos).

Se você tem laptops cliente que circulam entre redes, fica um pouco mais complexo - criei um script que define o proxy certo, dependendo do endereço da rede; o script é executável e em /etc/network/if-up.d/apt-proxy . Ao receber um endereço IPv4 de um servidor DHCP, o script configurará o servidor apt-cacher correto para a rede respectiva:

#!/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
    
por Piskvor 12.02.2011 / 11:45
6

Uma das soluções mais fáceis é configurar o apt-proxy.

Leia a documentação do Ubuntu aqui: link

    
por sandaru1 03.09.2010 / 01:51
6

Eu prefiro muito mais configurar um espelho local usando o utilitário debmirror .

Aqui está um exemplo de encantamento.

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

Eu corro isso uma vez por semana, e uso isso como base para estabelecer um ou mais "patchlevels". Por exemplo ...

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

Isso cria uma cópia vinculada da árvore (usa quase zero de espaço em disco) para que eu possa apontar cada um dos meus servidores locais para o apt sources.list

    
por delimiter 08.09.2010 / 17:07
2

Em redes pequenas (como home / small office), usei o apt-cacher-ng com bons resultados. Eu não verifiquei as versões mais recentes, mas sei que ele precisa de uma configuração cuidadosa do servidor e dos clientes, e é mais adequado para clientes que só receberão atualizações de sua rede local.

Eu tentei a solução baseada em squid acima, mas foi necessário aplicar várias soluções e mais configurações de cliente do que eu gostaria, então não parece ainda que ela possa substituir o apt-cacher- ng em pequenas configurações.

    
por MagicFab 29.11.2010 / 03:35
1

apt-cacher não foi o mais fácil de configurar e não sobreviverá a um dist-upgrade.

Instale squid-deb-proxy no servidor, squid-deb-proxy-client nos clientes. Ele usa zeroconf Avahi, então nenhuma configuração é necessária.

Se você está procurando cache mais do que apenas debs, eu não me incomodaria com o Squid. O Apache Traffic Server é a próxima grande novidade. link

    
por caduceus 19.12.2013 / 13:19