Quando e por que devo usar o apt-get update?

13

Pergunta geral:

Algum poderia explicar o que o comando apt-get update faz e quando eu realmente deveria usá-lo?

Observações

Por favor, dê uma resposta detalhada . Não apenas uma cópia da página man, a menos que sua versão seja realmente detalhada (coloquei uma definição da página man abaixo).

apt-get update: Used to re-synchronize the package index files from their sources. The indexes of available packages are fetched from the location(s) specified in /etc/apt/sources.list(5). An update should always be performed before an upgrade or dist-upgrade.

Sub-perguntas:

  • Onde está armazenado o índice do pacote? Em um banco de dados? Em um arquivo?
  • O que acontece se eu fizer apt-get install sem atualizar o cache? Existe uma chance de que o pacote remoto não exista mais e que o link seja quebrado?
  • Existe alguma política acordada sobre os repositórios do deb? Por exemplo, um repositório deve conter apenas a última versão de um pacote ou, pelo contrário, deve conter todas as versões disponíveis para uma distribuição de distribuição específica?

Contexto

Faço minha pergunta porque estou estudando a estrutura do Docker . Uma de suas funcionalidades é o Dockerfile , que permite que você construa uma espécie de imagem do sistema operacional executando algumas instruções desse arquivo. Uma propriedade dessa imagem é que ela deve sempre ser a mesma, independentemente do contexto (tempo de compilação, etc.).

Tenho receio de que, se eu iniciar o comando apt-get update em um horário diferente, o resultado seria diferente e, assim, minhas imagens seriam diferentes.

    
por Pierre-Jean 19.05.2014 / 21:14

2 respostas

10

apt-get update faz o download da lista de pacotes disponíveis.

A lista de pacotes pode mudar com o tempo. Novos pacotes são adicionados e pacotes antigos são removidos. Portanto, se você tiver um cache muito antigo e tentar fazer um apt-get install , ele poderá tentar baixar um pacote que não existe mais.
O tempo que um pacote antigo é mantido em um repositório é de responsabilidade do mantenedor do repositório (sua distribuição). Assim, se você estiver usando algo como o docker, onde o cache pode estar muito desatualizado, você deve sempre executar apt-get update antes de instalar qualquer pacote.

O motivo para remover e adicionar pacotes é principalmente correções de erros & atualizações de segurança. Embora se você estiver usando repos de terceiros como o PPA, vale tudo.

Ao usar algo como a janela de encaixe para contêiner em um ambiente corporativo, você deve criar o contêiner uma vez e movê-lo pelos vários ambientes de lançamento (desenvolvimento, armazenamento temporário, produção) e não reconstruir o contêiner a cada vez. Isso garantirá que você não receba um contêiner diferente que não tenha sido testado.

Para responder à sua pergunta sobre onde os arquivos de cache vivem, /var/lib/apt/lists .

    
por 19.05.2014 / 21:35
0

Could some explain what the command apt-get update does and when I really should use it?

apt-get update faz o download de índices atualizados dos repositórios de pacotes da distribuição, listando todos os pacotes disponíveis e suas versões precisas.

Distribuições comuns como Ubuntu e Debian são geralmente conservadoras e retrocompatíveis em suas ofertas de pacotes, então as versões não mudam muito ao longo do tempo; eles serão alterados devido a atualizações de segurança ou correções de bugs. Por exemplo, o mysql pode ser atualizado de 5.7.18 para 5.7.19 mas não para 6.x .

Where is stored the package index? On a database? On a file?

Geralmente é armazenado em um ou mais arquivos dentro de /var/lib/apt . No contexto do Docker, esses arquivos estão dentro da imagem. Ao construir o Dockerfile, eles são armazenados nas novas camadas do sistema de arquivos que são criadas e persistidas como a imagem recém-criada.

What happens if I do apt-get install without updating the cache?

Você pode tentar baixar versões de pacotes que não existem mais. Isso é bastante comum em máquinas virtuais, mas é possível dentro de contêineres também se os repositórios de distribuição lançarem novos pacotes após a construção da imagem base. Pode não haver coordenação entre os mantenedores da distribuição e os mantenedores do Dockerfile, que estão a jusante da distribuição e podem ser maiores em número. Existe apenas um repositório Debian, mas milhares de imagens de contêiner jessie -based e Dockerfile.

Além disso, algumas imagens do upstream, como a do ubuntu remova o índice baixado para tornar a imagem menor e evite arquivos desatualizados. Por isso, espera-se que um índice atualizado seja baixado ao construir em cima de uma imagem de base, não para cada versão de uma imagem de base fornecida com o índice mais recente.

Is there a chance that the remote package would not exist anymore and that the link would be broken?

Definitivamente, porque as versões armazenadas no índice são muito precisas como 5.7.19 (simplificação; elas são mais parecidas com 5.7.19-0ubuntu1 ).

Is there some agreed politic about deb repositories? For example, should a repository only contains the last version of a package, or on the contrary should it contains all versions available for a specific distribution release?

É comum que pequenas versões antigas sejam removidas rapidamente assim que uma atualização estiver disponível; Suponho que isso é para economizar espaço nos servidores, pois os binários podem pesar várias dezenas de megabytes, multiplicados por todas as versões e arquiteturas suportadas. Por isso, geralmente é impossível definir, por exemplo, mysql-5.7.18 no apt-get install subsequente; assim que mysql-5.7.19 for liberado na distribuição, o anterior será removido.

Para ser justo com o Docker, esse não-determinismo de apt-get update é um problema que é trazido como parte do gerenciamento de pacotes de cada distribuição. Você teria o mesmo problema ao tentar construir repetitivamente uma máquina virtual EC2 ou Vagrant.

Alguns administradores de sistema usam serviços como Aptly para espelhar os repositórios originais e conseguir fixar uma versão específica, mas você executa o risco de perder atualizações de segurança, a menos que você tenha um processo separado executado com freqüência para testar as atualizações e alterar o que você está definindo.

    
por 05.12.2017 / 16:15

Tags