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


15

Pergunta geral:

Alguns poderiam explicar o que o comando apt-get updatefaz e quando eu realmente devo usá-lo?


Observações

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

apt-get update : Usado para sincronizar novamente os arquivos de índice de pacotes de suas fontes. Os índices dos pacotes disponíveis são buscados nos locais especificados em /etc/apt/sources.list(5). Uma atualização sempre deve ser realizada antes de uma atualização ou 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 installsem 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 repositórios 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 liberação de distribuição específica?

Contexto

Faço minha pergunta porque estou estudando a estrutura do Docker . Um de seus recursos é o Dockerfile , que permite criar 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, seja qual for o contexto (hora da criação, etc.).

Receio que, se eu iniciar o apt-get updatecomando em um horário diferente, o resultado seja diferente e, portanto, minhas imagens sejam diferentes.


Acho que este post poderia servir como um artigo wiki sobre como fazer uma pergunta de alto nível. Muito útil.
Zerodf

Respostas:


12

apt-get update baixa a 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ê tem um cache muito antigo e tenta fazer um apt-get install, ele pode tentar baixar um pacote que não existe mais.
Quanto tempo um pacote antigo é mantido em um repositório depende do mantenedor do repositório (sua distribuição). Como tal, se você estiver usando algo como janela de encaixe, onde o cache pode estar muito desatualizado, você sempre deve executar apt-get updateantes de instalar qualquer pacote.

O motivo para remover e adicionar pacotes são principalmente correções de bugs e atualizações de segurança. Embora se você estiver usando acordos de recompra de terceiros como o PPA, vale tudo.

Ao usar algo como janela de encaixe para contêiner em um ambiente corporativo, você deve compilar o contêiner uma vez e, em seguida, movê-lo pelos seus vários ambientes de liberação (desenvolvimento, preparo, produção) e não reconstruir o contêiner toda vez. Isso garantirá que você não obtenha um recipiente diferente que não tenha sido testado.

Para responder sua pergunta sobre onde estão os arquivos de cache, /var/lib/apt/lists ,.


Ótima resposta! Obrigado! Quero reagir ao parágrafo "(...) não reconstruir o contêiner toda vez. Isso garantirá que você não obtenha um contêiner diferente que não tenha sido testado". Li que a melhor prática é nunca usar o apt-get upgrade. Um dos motivos seria: "Ele também produz imagens inconsistentes porque você não tem mais uma fonte de verdade sobre como o aplicativo deve ser executado e quais versões de dependências estão incluídas na imagem". Não é o mesmo problema com apt-get updateentão? E o Dockerfile não deve garantir a imagem?
Pierre-Jean

2
Meio. apt-get updateafetará apenas pacotes recém-instalados. Pacotes existentes serão atualizados somente se necessário pelos novos pacotes (isso deve ser mínimo). Com apt-get upgradevocê, atualize todos os pacotes, incluindo os existentes, resultando em uma imagem muito diferente. Embora isso possa resultar em um resultado diferente cada vez que você cria a partir do arquivo docker, pessoalmente não acho que esse seja um problema sério se você passar por uma versão de vários ambientes. Eu acho que isso é mais um problema se você distribuir o arquivo docker para outras pessoas e pedir que elas o construam.
194 Patrick Patrick

0

Alguns poderiam explicar o que o comando apt-get update faz e quando devo usá-lo?

apt-get update baixa í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 compatíveis com versões anteriores em suas ofertas de pacotes, portanto as versões não mudam muito com o 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.18para, 5.7.19mas não para 6.x.

Onde está armazenado o índice do pacote? Em um banco de dados? Em um arquivo?

Geralmente é armazenado em um ou mais arquivos dentro /var/lib/apt. No contexto do Docker, esses arquivos estão dentro da imagem. Ao criar 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.

O que acontece se eu instalar o apt-get sem atualizar o cache?

Você pode tentar baixar versões de pacotes que não existem mais. Isso é bastante comum em máquinas virtuais, mas também é possível dentro de contêineres se os repositórios de distribuição tiverem liberado novos pacotes após a criaçã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 jessieimagens de contêineres e Dockerfile.

Além disso, algumas imagens upstream como a do ubuntu removem o índice baixado para diminuir a imagem e evitar arquivos desatualizados. Portanto, espera-se que um índice atualizado seja baixado ao criar uma imagem de base, não para que cada versão de uma imagem de base seja enviada com o índice mais recente.

Existe uma chance de que o pacote remoto não exista mais e que o link seja quebrado?

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

Existe alguma política acordada sobre repositórios 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 liberação de distribuição específica?

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

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

Alguns administradores de sistema usam serviços como o Aptly para espelhar os repositórios originais e podem fixar uma versão específica, mas você corre o risco de perder atualizações de segurança, a menos que tenha um processo separado, frequentemente executado, para testar as atualizações e alterar o que você deseja. estão fixando.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.