A melhor maneira de armazenar em cache os downloads apt em uma LAN?

152

Eu tenho várias máquinas Ubuntu em casa e uma conexão à Internet muito lenta, e às vezes várias máquinas precisam ser atualizadas de uma só vez (especialmente durante as novas versões do Ubuntu).

Existe uma maneira em que apenas uma das minhas máquinas precise baixar os pacotes e as outras máquinas possam usar a primeira máquina para obter os débitos? Isso envolve configurar meu próprio espelho local? Ou um servidor proxy? Ou pode ser simplificado?

Ken Simon
fonte

Respostas:

129

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 :

Instale através do centro de software

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.

texto alternativo

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-proxypara 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.confe 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.loge 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.

Jorge Castro
fonte
21/01/2014 14: 56: 31 | ERRO: / var / cache / squid-deb-proxy / 03: (2) Não existe esse arquivo ou diretório FATAL: Falha ao verificar um dos diretórios de troca. Verifique cache.log para obter detalhes. Execute 'squid -z' para criar diretórios de troca, se necessário, ou se estiver executando o Squid pela primeira vez. Squid Cache (versão 3.3.8): finalizado de forma anormal.
batedor
1
Você também precisa instalar o squid.
Thumper
Parece que a configuração manual não é mais válida. Não há nenhum apt.confarquivo abaixo /etc/apt. No entanto, há uma infinidade de arquivos com configurações em /etc/apt/apt.conf.d. Eu imaginaria que agora deveríamos criar um arquivo lá?
Alexis Wilke
Além disso, parece que o TODO foi resolvido. Ou seja, não precisei fazer nada e o cache foi usado primeiro. Embora o erro não pareça ter sido marcado como corrigido ainda.
Alexis Wilke
Claro, se o apt.conf.d é como é feito agora, envie uma edição para esta resposta, felicidades!
Jorge Castro
37

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

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

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

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

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


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

#!/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
Piskvor
fonte
O apt-cacher-ng também suporta IPv6 (lembro que algumas das outras soluções não).
Azendale
11
Um ano depois, fui até squid-deb-proxye squid-deb-proxy-client: zeroconf realmente significa configuração zero nos clientes, o que é extremamente útil para usuários nômades - e, caso um servidor não responda, o cliente padroniza o download direto.
Piskvor
O apt-cacher-ng é péssimo, é muito buggy, depende de baixar pacotes. Por exemplo, eu vi que baixado 150 MB apenas para um pacote de 30MB
pylover
O apt-cacher-ng funciona perfeitamente. Você tem algo muito errado com o seu sistema. Em Preciso, o squid-deb-proxy deseja instalar o Squid. Insiste nisso.
Ken Sharp
Agora essa é a melhor solução para trabalhar com um cache pbuilder. Isso funcionou fora da caixa. Também parece que há suporte para zeroconf(em 2016), mas eu ainda não consegui fazer isso funcionar do meu lado.
Alexis Wilke
6

Eu prefiro configurar um espelho local usando o debmirrorutilitário.

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 cerca de uma vez por semana e o uso como base para estabelecer um ou mais "níveis de correção". 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 a qual eu posso apontar cada um dos meus servidores locais no apt sources.list

delimitador
fonte
5
Você deve verificar o ubumirror, é um pacote de conveniência no arquivo que já possui tudo o que foi configurado para você. É o que os espelhos oficiais usam.
Jorge Castro
2

Em redes pequenas (como em casa / pequeno escritório), usei o apt-cacher-ng com bons resultados. 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 receberão apenas atualizações da sua rede local.

Eu tentei a solução lulas à base acima, mas foi necessário aplicar várias solução alternativa e mais configuração do cliente do que eu gostaria, por isso não se sente ainda como ele poderia substituir apt-cacher-ng em pequenas configurações.

MagicFab
fonte
1

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

Instale squid-deb-proxyno servidor, squid-deb-proxy-clientnos clientes. Ele usa o zeroconf Avahi, portanto, nenhuma configuração é necessária.

Se você está procurando armazenar em cache mais do que apenas debs, eu não me incomodaria com o Squid. O Apache Traffic Server é a próxima grande novidade. http://trafficserver.readthedocs.org

caduceu
fonte
squid-deb-proxy insiste em instalar o squid. E apt-cacher está morto há muito tempo, apt-cacher-ng é onde está.
Ken afiada