Como o apt-get / aptitude update determina quais listas de pacotes devem ser atualizadas?

0

O contexto é um bug no qual o Ubuntu está atualizando timestamps da lista de pacotes a cada 30 minutos em seus espelhos de arquivamento, o que força o [apt-get|aptitude] update a baixar as listas de pacotes, embora elas não tenham mudado:

A solução proposta é executar touch nos arquivos de índice afetados antes de executar apt-get update . Isso torna seus timestamps atualizados e evita que eles sejam baixados novamente. Isso acelera o processamento em até vários minutos (2-3 segundos vs. 2-6 minutos em vários testes). Isso apesar de executar um proxy apt-cache-ng local.

Estamos realizando este teste (principalmente) e implantando (um pouco) imagens baseadas no Ubuntu para a nossa infraestrutura da AWS, na qual apt-get update é executado algumas vezes. 3-6 minutos vs. 3-20 segundos fazem uma grande diferença em nosso tempo de iteração.

Parece estranho para mim que o apt não dependa de tamanho de arquivo ou hashes para determinar se os arquivos foram ou não alterados. Timestamps são muito modificados, e parecem muito frágeis para basear este comportamento.

    
por Dr. Edward Morbius 28.06.2012 / 23:30

1 resposta

1

Quando testei pela primeira vez o hack touch, fiquei surpreso que o apt-get usou o tempo de modificação do arquivo local para informar ao servidor http o que fazer o download - mas esse é obviamente o caso (ou o hack não funcionaria). / p>

O arquivo de versão baixado contém uma data confiável e esses arquivos são assinados criptograficamente e, portanto, são bastante confiáveis, mas os hashes não são usados para determinar quais arquivos de pacote devem ser baixados.

Com a abordagem de registro de data e hora agora em uso para arquivos de pacote, não há nada de especial necessário no site de espelhamento. Nós devemos o projeto Debian para o design. É útil espelhar os proprietários para manter o Ubuntu idêntico ao Debian e manter as coisas baunilhadas e, portanto, fácil de gerenciar.

Esse design normalmente funciona bem, até onde eu sei. Este é apenas um bug que deve ser corrigido tanto quanto eu estou preocupado, mas o bug está no código privado canônico, assim pessoas de fora como eu não podem ajudar a consertá-lo. Espero que eles o façam em breve, pois estamos abusando da hospitalidade daqueles que executam espelhos do Ubuntu, além de causar gastos desnecessários para alguns usuários do Ubuntu que precisam pagar pela largura de banda pelo gigabyte.

Existe um mecanismo de protocolo http para usar um etag para representar um item servido, mas não é usado para o apt-get. Essa tag pode conter o hash do arquivo Release.

É o grande número de pacotes incluídos nas versões do Ubuntu que tornam este bug tão significativo.

A partir da versão assinada (e, portanto, de checksum), há hashes para esses arquivos e, nesses arquivos, hashes para versões de pacotes e, a partir daí, somas de verificação para arquivos. Como os arquivos do pacote contêm os números de versão, e como eles não mudam, o bug não causa atualizações de pacotes redundantes.

    
por John S Gruber 29.06.2012 / 01:01