comportamento inesperado do squid (cache para atualizações do openSUSE)

2

Sem experiência anterior, acabei de configurar um proxy squid . Seu único objetivo é impedir que todos os sistemas Linux (openSUSE) baixem suas atualizações da Internet.

Um proxy pode ser facilmente configurado para a ferramenta de atualização do openSUSE. tcpdump mostra que os outros sistemas acessam o proxy e o proxy acessa os repositórios.

O que eu não entendo: Após uma atualização da distribuição, a primeira atualização on-line deve ser de 400 MiB a 700 MiB (isso é o que o YaST diz antes de iniciar a atualização). Mas o diretório squid storage contém apenas cerca de 80 dados MiB.

O access.log mostra os acertos e erros. Mesmo que por alguns motivos estranhos os sistemas Linux acessem servidores diferentes (existe algum tipo de redirecionamento intransparente de DNS?), Então eu esperaria que o armazenamento de proxy fosse pelo menos tão grande quanto o maior download.

Os repositórios são http , não https , portanto, não deve haver um problema para um proxy.

problema encontrado

Este link em esta resposta fornece as informações porque o squid não funciona bem aqui:

packages are downloaded using segmented downloading spread over multiple mirrors, which together makes it impossible for squid to do much caching.

    
por Hauke Laging 20.04.2014 / 02:02

1 resposta

2

Eu encontrei este tutorial: Como armazenar em cache os repositórios do openSUSE com o Squid .

trecho

How to make your local Squid web cache work with openSUSE repositories and the openSUSE network installation process. In effect, how to run a fully autonomous, local on-demand repository mirror. Even with a high-speed ADSL internet connection, savings of up to 60% are easily achieved.

Abaixo estão os detalhes passo a passo desse artigo.

Passo a passo

  1. Lula

    O web-proxy do Squid é o elemento chave nessa configuração, portanto, uma instalação ativa do Squid é um pré-requisito. Configurar o Squid não é tão complicado quanto parece, mas você terá que consultar a documentação do squid, está fora do escopo deste artigo. Se você preferir direcionar o acesso usando variáveis de ambiente http_proxy et al, ou se você executar um proxy transparente (como eu), isso não é realmente importante.

    Nota: a configuração aqui funciona para o Squid 2.7, eu não acho que o recurso storeurl_rewrite tenha sido implementado no Squid 3.x ainda.

  2. jesred

    jesred é o reescritor de URL. É bastante maduro, mas totalmente funcional. ( página original ). Eu tive que fazer algumas alterações para torná-lo totalmente compatível com o squid 2.7 :

    No momento, ele não vem empacotado, você terá que criá-lo do zero:

    tar xzvf <tarball>
    cd jesred-1.3
    make
    

    Instalação: quando terminar, copie o binário jesred para /usr/local/bin ou qualquer que seja a sua localização preferida para seus próprios binários.

    O arquivo de configuração para jesred: /etc/squid/jesred.conf

    allow = /etc/squid/redirector.acl
    rules = /etc/squid/opensuse-redirect.rules
    redirect_log = /var/log/squid/redirect.log
    rewrite_log = /var/log/squid/rewrite.log
    

    Usando /etc/squid/redirector.acl , você pode controlar as solicitações dos clientes que o regravador deve processar, mas acho que isso é realmente mais fácil de controlar com a diretiva ACL e storeurl_access do Squid, portanto, habilito para todos os clientes:

    # rewrite all URLs from
    0.0.0.0/0
    
  3. /etc/squid/squid.conf

    Configuração: adicione as seguintes linhas a /etc/squid/squid.conf     storeurl_rewrite_program / usr / bin / jesred     storeurl_rewrite_children 5

    acl metalink req_mime_type application/metalink4+xml
    storeurl_access deny metalink 
    
    storeurl_access allow localnet
    storeurl_access allow localhost
    
    acl localhost src 127.0.0.0/8
    acl localnet src 192.168.0.0/16
    
  4. fetcher206 logfile

    Altere /etc/squid/squid./conf da seguinte forma:

    logformat f206 %{%Y-%m-%dT%H:%M:%S}tl %Ss/%03Hs %rm %ru %mt
    access_log /var/log/squid/fetch206.log f206
    

    Este log será lido por fetcher206.

    Para evitar que ele fique muito grande, adicione o seguinte a /etc/logrotate.d/ :

    /var/log/squid/fetch206.log {
       compress
       dateext
       maxage 365
       rotate 5
       size=+4M
       notifempty
       missingok
       create 640 squid root
       sharedscripts
       postrotate
        /etc/init.d/squid reload
       endscript
    }
    
  5. pool de atrasos do squid

    Esta é uma etapa opcional - dependendo da largura de banda de recebimento de dados disponível, você pode restringir o que é usado pelo fetcher206 para recuperar os arquivos do repositório. Isso evita

    • abrandar a instalação atual e
    • abuso da conexão com a internet

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow localhost
    delay_parameters 1 1000000/1000000
    

    Adicione o arquivo acima ao /etc/squid/squid.conf - ele define um delay_pool, acessível somente a partir do localhost (que é onde o fetcher206 estará rodando wget) com uma largura de banda máxima de 1MByte / seg.

    Se você tiver outro tráfego http / proxy proveniente de localhost, você poderia simplesmente adicionar outro endereço 127.0.0.x e usá-lo especificamente para fetcher206.

  6. banco de dados espelho

    Precisamos de uma lista atual dos espelhos do openSUSE disponíveis. Isso pode ser recuperado em mirrors.opensuse.org. Por enquanto, eu uso o XSL para analisar a página HTML, mas espero mudar para uma lista formatada diretamente do MirrorBrain.

    mkdir -p /var/lib/fetcher206
    cp tarball/Makefile.mirrors /var/lib/fetcher206/Makefile
    cp tarball/extract* /var/lib/fetcher206/
    make -C /var/lib/fetcher206
    cp tarball/opensuse_mirrors.cron /etc/cron.d/opensuse_mirrors
    
  7. recarregue o squid

    Quando você chegou até aqui, é hora de recarregar o squid com

    squid -k reconfigure
    
  8. fetcher206

    fetcher206 é, por enquanto, um script PHP. Instale-o simplesmente copiando-o para / usr / bin. Ele tem algumas opções codificadas, como número de wgets para rodar simultaneamente, nome do arquivo de log, etc.

    fetcher206 ainda não possui uma unidade de serviço systemd nem um script de inicialização LSB. Por enquanto, você simplesmente começa com:

    startproc -s -q /usr/bin/fetcher206
    

Referências

por 20.04.2014 / 03:28