Por que eu constantemente tenho que atualizar meu cache do apt?

4

Quando quero instalar um novo pacote, geralmente sou recebido com uma resposta como:

oliver@cloud:~$ sudo apt-get install unison
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package unison

Já sabendo esse padrão, continuo:

oliver@cloud:~$ sudo apt-get update
Hit http://downloads-distro.mongodb.org dist Release.gpg
Ign http://downloads-distro.mongodb.org/repo/debian-sysvinit/ dist/10gen Translation-en
Ign http://downloads-distro.mongodb.org/repo/debian-sysvinit/ dist/10gen Translation-en_US
Hit http://downloads-distro.mongodb.org dist Release
Ign http://downloads-distro.mongodb.org dist/10gen amd64 Packages
Ign http://downloads-distro.mongodb.org dist/10gen amd64 Packages
Ign http://http.debian.net/debian/ squeeze/contrib Translation-en_US
Ign http://http.debian.net/debian/ squeeze/main Translation-en_US
Ign http://http.debian.net/debian/ squeeze/non-free Translation-en_US
...

oliver@cloud:~$ sudo apt-get install unison
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  unison
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 693 kB of archives.

Se eu quiser instalar um novo pacote amanhã, o servidor não saberá até que eu volte a update . Eu só notei isso nos servidores Debian e não tenho conhecimento de nenhum ajuste que possa causar isso.

Eu entendo a necessidade do cache local, meu problema é que ele parece ser redefinido sempre que eu quero instalar algo novo. Eu esperaria que o cache permanecesse ocupado por longos períodos de tempo. Normalmente, quando eu quiser instalar algo novo no dia seguinte, apt-get dirá que não é possível localizar o pacote.

Neste servidor, cron-apt está instalado. Eu devo supor que é instalado por padrão. cron-apt está definido para ser executado todas as noites às 4:00. Parece ser responsável pelo meu cache perdido:

oliver@cloud:/var/lib/apt/lists$ sudo apt-get update
...
Fetched 12.1 MB in 11s (1,023 kB/s)
Reading package lists... Done
oliver@cloud:/var/lib/apt/lists$ ls /var/lib/apt/lists/ | wc -l
24
oliver@cloud:/var/lib/apt/lists$ sudo /usr/sbin/cron-apt
oliver@cloud:/var/lib/apt/lists$ ls /var/lib/apt/lists/ | wc -l
8

Não sei ao certo por que isso está acontecendo, porque, pelo que sei, um dos trabalhos de cron-apt é realmente invocar apt-get update :

oliver@cloud:/var/lib/apt/lists$ cat /etc/cron-apt/action.d/0-update
update -o quiet=2
    
por Der Hochstapler 14.02.2013 / 22:03

6 respostas

2

Eu finalmente consegui resolver esse problema. Como anteriormente assumido, cron-apt foi o culpado. Ou, mais especificamente, sua configuração.

A primeira coisa que me confundiu foi que cron-apt foi instalado. Porque não foi instalado por padrão nas minhas outras máquinas. Apenas nas máquinas do provedor VPS onde tive esse problema. Eu achei confuso que existe, porque eu assumi que um mecanismo semelhante já é fornecido através do script /etc/cron.daily/apt . De qualquer forma, conforme mostrado na pergunta, a execução de cron-apt reduziu a quantidade de informações em cache.

Primeiro, não consegui ver por que esse foi o motivo, porque cron-apt estava realmente realizando uma atualização todos os dias.

oliver@cloud:/$ cat /etc/cron-apt/action.d/0-update
update -o quiet=2

Então, qual é o problema aqui?

Eu só descobri qual é o problema, percorrendo o script /usr/sbin/cron-apt linha por linha. Percebi que $APTCOMMAND sempre recebe $OPTIONS adicional anexado a ele. E a chamada resultante ficou assim:

/usr/bin/apt-get -o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list update -o quiet=2

Então, eu dei uma olhada no /etc/cron-apt/config e encontrei o bloco $OPTIONS :

# General apt options that will be passed to all APTCOMMAND calls.
# Use "-o quiet" instead of "-q" for aptitude compatibility.
#  OPTIONS="-o quiet=1"
# You can for example add an additional sources.list file here.
#  OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list"
# You can also set an alternative sources.list file here.
#  OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list -o Dir::Etc::SourceParts=\"/dev/null\""
OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list"
# If you want to allow unauthenticated and untrusted packages add the
# following to your options directive.
#  OPTIONS="-o quiet=1 -o APT::Get::AllowUnauthenticated=true -o aptitude::Cmdline::ignore-trust-violations=yes"
# To limit the bandwidth used use the following line. This example limit the
# bandwidth usage to 25 kB/s.
#  OPTIONS="-o Acquire::http::Dl-Limit=25"

Uma linha se destaca. Aquele que não é comentado. E é bastante óbvio que esta linha não está lá por padrão (o que eu também rapidamente confirmei em outro sistema).

Caso não seja aparente, a causa dessas opções é que as fontes armazenadas em cache são sobrescritas todas as noites com o conteúdo das listas de segurança (e somente ).

O provedor VPS desde então confirmou que esta é uma customização da imagem de instalação do Debian. Eu removi a configuração problemática e agora tudo voltou ao normal.

    
por 27.06.2013 / 12:43
3

Sua pergunta é um pouco vaga. Se a pergunta for "por que preciso executar o apt-get update", a resposta é que a atualização do apt pode ser um processo demorado. Fazer isso toda vez que eu tivesse que instalar um pacote aumentaria consideravelmente o tempo. Normalmente, atualizar o cache uma vez por dia (idealmente, de maneira automatizada) é mais do que suficiente.

"Se eu quiser instalar um novo pacote amanhã, o servidor não saberá até que eu o atualize novamente. Eu só notei isso nos servidores da Debian e não tenho conhecimento de nenhum ajuste que possa causar isso."

Eu sou confuso nessa parte. Você está dizendo que, se uma nova versão do uníssono estiver disponível amanhã, como você sabe? Novamente, se você tiver o apt-get update rodando pelo menos uma vez por dia (digamos, através de um script cron), o apt irá aprender que tem novos pacotes. Dito isto, não vai dizer automaticamente que novos pacotes estão disponíveis; isso é por boas razões, já que a atualização de pacotes pode ocasionalmente causar problemas de estabilidade do sistema, e o usuário é necessário para resolvê-los.

De um modo geral, em um sistema baseado no Debian, versões incrementais de software não são necessariamente melhores. Eu geralmente não me preocupo com atualizações de versões secundárias, exceto quando há um problema de segurança, ou se há um recurso em uma nova versão que eu sei que preciso.

    
por 14.02.2013 / 22:22
2

Normalmente, significa apenas que a versão exata, informação sobre a qual você buscou com a última atualização, não está mais disponível nos servidores Debian, pois foi substituída por uma nova. Mas isso não deve acontecer tanto no Squeeze (mesmo considerando as atualizações de segurança). Outra opção é que algum script esquisito (eu não conheço nenhum) limpa periodicamente o diretório /var/lib/apt/lists que armazena em cache as listas de pacotes disponíveis nos servidores (e quais apt-get buscam atualizações). A menos que você esteja seguindo instável ou até mesmo experimental em seus servidores (o que parece pouco estranho), nesse caso os pacotes são atualizados com bastante frequência, então as listas em cache estão ficando desatualizadas rapidamente. Então, meu conselho seria treinar sua memória muscular para chamar apt-get update primeiro, toda vez que você estiver iniciando alguma sessão de instalação.

    
por 14.02.2013 / 22:37
0

Para evitar a atualização manual da lista de pacotes, você pode automatizar essa tarefa todas as noites com um cron job. Use 'crontab -e' e digite a seguinte linha.

0 23 * * * apt-get update

    
por 14.02.2013 / 22:23
0

Claro, você sabe que não precisa atualizar até que você precise dela ..... O que está acontecendo é que a parte do catálogo de informações é transmitida localmente para o seu computador para que o apt-get espere um pouco. Mais rápido. Em vez de várias solicitações ao servidor remoto para todo o catálogo, ele apenas faz uma e atualiza-a conforme necessário. Novamente, esse processo torna-o mais rápido para você, permite que você veja todos os pacotes disponíveis no momento e retira a carga de todas as pessoas que simplesmente tentam ver o catálogo carregando-o apenas uma vez localmente.

Se você está fazendo apenas um pacote durante um grande período de tempo, provavelmente parece ser uma perda de tempo importante ... mas sua implementação realmente ajuda a todos.

    
por 14.02.2013 / 22:53
0

Parece que seu problema vem de cron-apt . O cache é redefinido às 4 da manhã.

Você pode editar o arquivo cron /etc/cron.d/cron-apt adicionando o comando apt-get update após a operação do cron-apt:

#
# Regular cron jobs for the cron-apt package
#
# Every night at 4 o'clock.
0 4     * * *   root    test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt && apt-get update
# Every hour.
# 0 *   * * *   root    test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt /etc/cron-apt/config2
# Every five minutes.
# */5 * * * *   root    test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt /etc/cron-apt/config2
    
por 02.11.2015 / 15:50

Tags