apt-get tem inconsistências para autoremove

2

Atualmente estou limpando vários servidores.
Eu notei um comportamento estranho:

Quando eu faço apt-get autoremove , ele lista vários cabeçalhos para serem autorados quando eu vou em frente, às vezes ele deixa os arquivos / pastas em /usr/src , as vezes eles serão removidos.

Alguma razão por que, ou onde posso começar a pesquisar? O Google não apareceu muito.

Uma máquina onde os cabeçalhos ainda permanecem, mesmo que o autoremove forneça um "0 para remover"

ubuntu@acc-ws-website-1:~$ sudo apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 65 not upgraded.

ubuntu@acc-ws-website-1:~$ ls -lart /usr/src
total 108
drwxr-xr-x 10 root   root   4096 Apr 16  2014 ..
drwxr-xr-x 24 root   root   4096 Jul  8  2014 linux-headers-3.13.0-24
drwxr-xr-x  7 root   root   4096 Jul  8  2014 linux-headers-3.13.0-24-generic
drwxr-xr-x  3 ubuntu ubuntu 4096 Apr 17  2015 ixgbevf-2.14.2
drwxr-xr-x 24 root   root   4096 Oct  6  2015 linux-headers-3.13.0-65
drwxr-xr-x  7 root   root   4096 Oct  6  2015 linux-headers-3.13.0-65-generic
drwxr-xr-x 24 root   root   4096 Oct 20  2015 linux-headers-3.13.0-66
drwxr-xr-x  7 root   root   4096 Oct 20  2015 linux-headers-3.13.0-66-generic
drwxr-xr-x 24 root   root   4096 Nov  5  2015 linux-headers-3.13.0-67
drwxr-xr-x  7 root   root   4096 Nov  5  2015 linux-headers-3.13.0-67-generic
drwxr-xr-x 24 root   root   4096 Nov 10  2015 linux-headers-3.13.0-68
drwxr-xr-x  7 root   root   4096 Nov 10  2015 linux-headers-3.13.0-68-generic
drwxr-xr-x 24 root   root   4096 Dec  1  2015 linux-headers-3.13.0-70
drwxr-xr-x  7 root   root   4096 Dec  1  2015 linux-headers-3.13.0-70-generic
drwxr-xr-x 24 root   root   4096 Dec  2  2015 linux-headers-3.13.0-71
drwxr-xr-x  7 root   root   4096 Dec  2  2015 linux-headers-3.13.0-71-generic
drwxr-xr-x 24 root   root   4096 Dec 17  2015 linux-headers-3.13.0-73
drwxr-xr-x  7 root   root   4096 Dec 17  2015 linux-headers-3.13.0-73-generic
drwxr-xr-x 24 root   root   4096 Dec 19  2015 linux-headers-3.13.0-74
drwxr-xr-x  7 root   root   4096 Dec 19  2015 linux-headers-3.13.0-74-generic
drwxr-xr-x 24 root   root   4096 Feb  2  2016 linux-headers-3.13.0-77
drwxr-xr-x  7 root   root   4096 Feb  2  2016 linux-headers-3.13.0-77-generic
drwxr-xr-x 24 root   root   4096 Feb 23  2016 linux-headers-3.13.0-79
drwxr-xr-x  7 root   root   4096 Feb 23  2016 linux-headers-3.13.0-79-generic
drwxr-xr-x 24 root   root   4096 Mar 30 06:50 linux-headers-3.13.0-115
drwxr-xr-x  7 root   root   4096 Mar 30 06:50 linux-headers-3.13.0-115-generic
drwxr-xr-x 27 root   root   4096 Mar 30 06:52 .

ubuntu@acc-ws-website-1:~$ uname -r
3.13.0-112-generic

Considerando que eu esperaria algo assim:

ubuntu@tools-jenkins:~$ sudo apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 94 not upgraded.

ubuntu@tools-jenkins:~$ ls -lart /usr/src
total 32
drwxr-xr-x 10 root root 4096 Mar 25  2015 ..
drwxr-xr-x 24 root root 4096 Dec  6 06:39 linux-headers-3.13.0-105
drwxr-xr-x  7 root root 4096 Dec  6 06:39 linux-headers-3.13.0-105-generic
drwxr-xr-x 24 root root 4096 Mar  8 06:44 linux-headers-3.13.0-112
drwxr-xr-x  7 root root 4096 Mar  8 06:44 linux-headers-3.13.0-112-generic
drwxr-xr-x 24 root root 4096 Mar 30 06:26 linux-headers-3.13.0-115
drwxr-xr-x  7 root root 4096 Mar 30 06:26 linux-headers-3.13.0-115-generic
drwxr-xr-x  8 root root 4096 Apr  3 10:50 .

ubuntu@tools-jenkins:~$ uname -r
3.13.0-105-generic
    
por ShadowFlame 03.04.2017 / 10:35

2 respostas

4

Se você ainda tiver muitos pacotes de linux-headers* instalados em seu sistema, tente essa abordagem simples para remover cabeçalhos antigos:

dpkg-query -f '${binary:Package}\n' -W linux-headers\*|xargs apt-mark auto
apt-mark manual linux-headers-generic
apt-get -f autoremove

Se minha suposição estiver correta, de alguma forma você terá seus cabeçalhos marcados como instalados manualmente e isso impede que o sistema remova esses pacotes. Por exemplo, você instalou diretamente os pacotes, ou seja, pediu para instalar a versão exata do pacote de cabeçalhos do kernel. Os comandos acima tentam marcar todos esses pacotes como instalados automaticamente e fazer as coisas funcionarem conforme o esperado.

Se por acaso os pacotes já tiverem sido removidos, mas as pastas ainda persistirem e tiverem apenas algumas sobras dentro, isso significa que esses arquivos não pertencem ao pacote. Isso evita que o apt remova o diretório principal ao desinstalar o linux-headers* package. Você deve remover os arquivos manualmente neste caso.

Trivia : o recurso autoremove do apt funciona apenas para pacotes que foram instalados automaticamente. Isso significa que o pacote deve ser literalmente marcado como 'instalado automaticamente' e não deve haver pacotes que dependam dele. No caso do kernel do linux e seus cabeçalhos, temos este cenário comum:

  • há um ou vários meta-pacotes como linux-generic , linux-image-generic e linux-headers-generic que normalmente são marcados como instalados manualmente
  • existem muitos pacotes 'reais' com arquivos dentro como linux-image-4.8.0-45-generic e meta-pacotes dependem de alguns desses pacotes; estes são geralmente marcados como 'instalados automaticamente'
  • quando o meta-pacote é atualizado, normalmente requer versões mais recentes do pacote 'real' e, portanto, novas versões estão sendo instaladas
  • os pacotes marcados como 'instalados automaticamente' só podem ser executados automaticamente quando não houver um pacote instalado manualmente que dependa dele, portanto, quando novos pacotes forem instalados, os antigos poderão ser removidos automaticamente mais tarde, porque ninguém mais depende desses pacotes.
por 11.04.2017 / 23:38
0

Bem, você vê que 94 não foi atualizado? Esse é o problema, eu tive problema semelhante e que eu atualizei manualmente todos os itens (que não foram atualizados pelo apt-get upgrade, esses arquivos contém essas dependências). E depois disso eu usei o apt-get autoremove e funcionou. Quando você atualiza com o apt-get upgrade, no final do texto detalhado você pode ver a lista de arquivos não atualizados. leve-os um por um (não se preocupe, alguns upgrades irão atualizar metade da lista). Espero que isso ajude, aplausos companheiro.

P.S. Antes de atualizar, certifique-se de que a imagem de backup do sistema de trabalho, se algo der errado.

    
por 10.04.2017 / 15:11