Pacotes obsoletos vs. pacotes órfãos

14

Qual é a diferença entre pacotes obsoletos e órfãos? Mais especificamente, por que deborphan produz isso:

dave@ubuntu:~$ deborphan
libbind9-80
libllvm3.1
libgrail5
libpython3.2
libsvga1
libarchive12
libdirectfb-1.2-9
gcalctool
liblwres80
libqpdf8
libkms1
libnux-3.0-0

... enquanto aptitude search '~o' produz isso:

dave@ubuntu:~$ aptitude search '~o'
idA libarchive12                                 - Multi-format archive and compression library (shared li
i   libbind9-80                                  - BIND9 Shared Library used by BIND                      
i   libdns81                                     - DNS Shared Library used by BIND                        
i   libdrm-nouveau1a                             - Userspace interface to nouveau-specific kernel DRM serv
idA libgrail5                                    - Gesture Recognition And Instantiation Library          
i   libisc83                                     - ISC Shared Library used by BIND                        
i   libisccc80                                   - Command Channel Library used by BIND                   
i   libisccfg82                                  - Config File Handling Library used by BIND              
i   liblwres80                                   - Lightweight Resolver Library used by BIND              
idA libnux-3.0-0                                 - Visual rendering toolkit for real-time applications - s
idA libnux-3.0-common                            - Visual rendering toolkit for real-time applications - c
idA libpython3.2                                 - Shared Python runtime library (version 3.2)            
idA libqpdf8                                     - runtime library for PDF transformation/inspection softw
i   libudev0                                     - udev library                                           
i A linux-headers-3.5.0-27                       - Header files related to Linux kernel version 3.5.0     
i A linux-headers-3.5.0-27-generic               - Linux kernel headers for version 3.5.0 on 32 bit x86 SM
i   linux-image-3.5.0-27-generic                 - Linux kernel image for version 3.5.0 on 32 bit x86 SMP 
i   linux-image-extra-3.5.0-27-generic           - Linux kernel image for version 3.5.0 on 32 bit x86 SMP 
i   python3.2                                    - Interactive high-level object-oriented language (versio
i   python3.2-minimal                            - Minimal subset of the Python language (version 3.2)

Pergunta de bônus: apt-get autoremove é ainda mais diferente. Por quê?

dave@ubuntu:~$ sudo apt-get --purge autoremove
[sudo] password for dave: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  gksu* libarchive12* libdirectfb-1.2-9* libgksu2-0* libgnome-menu2* libgrail5* libllvm3.1*
  libnux-3.0-0* libnux-3.0-common* libpython3.2* libqpdf8* libsvga1* libts-0.0-0* libx86-1*
  mobile-broadband-provider-info* python-imaging* python-imaging-compat* python-    oauth* tsconf*
0 upgraded, 0 newly installed, 19 to remove and 0 not upgraded.
After this operation, 33.8 MB disk space will be freed.
Do you want to continue [Y/n]? n
Abort.

Caso alguém queira saber, a atualização para o 13.04 é o que motivou isso.

    
por David Kennedy 28.04.2013 / 00:37

1 resposta

23

Para pacotes curtos e obsoletos, eles não estão mais em nenhum repositório da sua lista. Pacotes órfãos são dependências automáticas cujos "dependentes" foram todos desinstalados. E apt-get autoremove considera apenas pacotes órfãos que foram instalados por apt para resolver dependências.

Pacotes obsoletos

Como você provavelmente sabe, apt mantém uma lista de repositórios dos quais ele pode buscar pacotes. Mas às vezes, os pacotes são removidos de um repositório. Talvez ninguém mais cuide de (mantém) o pacote, e a última versão (muito) antiga disponível se tornou um risco de segurança. Ou talvez o programa tenha mudado seu nome, os nomes dos pacotes foram alterados de acordo e os pacotes antigos com o nome antigo foram removidos. Existem outras razões possíveis pelas quais um pacote é removido de um repositório também.

Se um pacote estiver instalado em seu sistema, mas não puder mais ser encontrado em nenhum dos repositórios que seu apt tiver em suas listas, esse pacote será considerado "obsoleto".

Pacotes órfãos

Como você provavelmente já sabe, apt pode gerenciar dependências entre pacotes. Digamos, por exemplo, que um programa chamado "greatprogram" precisa de uma biblioteca chamada "greatlibrary" para funcionar. Assim, o pacote contendo greatlibrary pode ser marcado como uma dependência automática do pacote contendo greatprogram. Você não poderá instalar o pacote greatprogram, a menos que o greatlibrary já esteja instalado (ou será instalado com o mesmo comando).

Mas e se você desinstalar o programa great em um dia posterior e deixar a greatlibrary para trás? Nesse caso, uma vez que pelo menos um outro pacote necessitasse de uma grande biblioteca como dependência, agora nenhum outro pacote faz mais tempo. Esses pacotes "para trás" são chamados de "pacotes órfãos".

apt-get autoremove

Ainda outro fato que você provavelmente sabe, é que apt pode resolver dependências automaticamente para você. Digamos que você queira instalar o greatprogram mencionado anteriormente, mas ainda não tenha a greatlibrary instalada. apt-get "percebe" que existe uma dependência insatisfeita e oferece a você também a instalação de greatlibrary.

apt-get autoremove oferece-lhe para remover quaisquer pacotes órfãos que foram instalados desta forma para resolver uma dependência . Pacotes órfãos que foram instalados de outras maneiras não estão na lista de autoremove. Se, digamos, você instalasse a greatlibrary antes de instalar o greatprogram e, em um dia posterior, desinstalasse o greatpribrary, a greatlibrary continuaria órfã. Mas autoremove não cuidaria disso, porque não foi instalado automaticamente como resultado de uma dependência resolvida.

    
por Henning Kockerbeck 29.04.2013 / 12:01

Tags