Przestarzałe pakiety vs. osierocone pakiety

18

Jaka jest różnica między przestarzałymi i osieroconymi pakietami? Mówiąc dokładniej, dlaczego to deborphanpowoduje:

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

... podczas gdy aptitude search '~o'produkuje to:

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)

Pytanie bonusowe: apt-get autoremovejest jeszcze bardziej odmienne. Dlaczego?

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.

Jeśli ktoś chce wiedzieć, to właśnie to spowodowało uaktualnienie do wersji 13.04.

David Kennedy
źródło
osobiście usunąłem je wszystkie oprócz starych jąder, ponieważ na moim komputerze nowe jądro jest trochę
wadliwe

Odpowiedzi:

26

Krótko mówiąc, przestarzałe pakiety nie są już w żadnym repozytorium na liście. Osierocone pakiety to automatyczne zależności, których „zależności” zostały odinstalowane. I apt-get autoremovebierze pod uwagę tylko osierocone pakiety, które zostały zainstalowane, aptaby rozwiązać zależności.

Przestarzałe pakiety

Jak zapewne wiesz, aptprzechowuje listę repozytoriów, z których może pobierać pakiety. Ale czasami pakiety są usuwane z repozytorium. Może nikt już nie zajmuje się (nie utrzymuje) pakietem, a (bardzo) stara ostatnia dostępna wersja stała się zagrożeniem dla bezpieczeństwa. A może program zmienił nazwę, nazwy pakietów zostały odpowiednio zmienione, a stare pakiety pod starą nazwą zostały usunięte. Istnieją również inne możliwe powody, dla których pakiet jest usuwany z repozytorium.

Jeśli pakiet jest zainstalowany w systemie, ale nie można go już znaleźć w żadnym repozytorium, które aptznajduje się na jego listach, pakiet ten jest uważany za „przestarzały”.

Osierocone paczki

Jak zapewne wiesz, aptmożesz zarządzać zależnościami między pakietami. Powiedzmy na przykład, że program zwany „greatprogram” potrzebuje do działania biblioteki o nazwie „greatlibrary”. Tak więc pakiet zawierający wielki bibliotekę można oznaczyć jako automatyczną zależność pakietu zawierającego wielki program. Nie będziesz mógł zainstalować pakietu greatprogram, chyba że greatlibrary jest już zainstalowany (lub zostanie zainstalowany z tą samą komendą).

Ale co, jeśli odinstalujesz wielki program w późniejszym dniu i pozostawisz bibliotekę wielką za sobą? W takim przypadku raz co najmniej jeden inny pakiet wymagał wielkiej biblioteki jako zależności, ale teraz żaden inny pakiet już nie potrzebuje. Te „pozostawione” pakiety nazywane są „pakietami osieroconymi”.

apt-get autorove

Kolejnym faktem, który prawdopodobnie znasz, jest to, że aptmoże on automatycznie rozwiązać zależności. Powiedzmy, że chcesz zainstalować wspomniany wcześniej wielki program, ale nie masz jeszcze zainstalowanej biblioteki wielkich bibliotek. apt-get„zauważa”, że istnieje niezadowolona zależność i oferuje również zainstalowanie biblioteki świetnej.

apt-get autoremoveoferuje usunięcie wszelkich osieroconych pakietów , które zostały zainstalowane w ten sposób w celu rozwiązania zależności . Osierocone pakiety, które zostały zainstalowane w inny sposób, nie znajdują się na liście autorów. Jeśli, powiedzmy, sam zainstalowałeś wielki bibliotekę przed zainstalowaniem świetnego programu, a później odinstalujesz wielki program, biblioteka wielka nadal byłaby osierocona. Ale autorove nie zadbałby o to, ponieważ nie został zainstalowany automatycznie w wyniku rozwiązanej zależności.

Henning Kockerbeck
źródło
1
Dzięki za świetne wyjaśnienie. Ciekawe: dlaczego nie deborphanwszystko odbiera autoremove? Rozumiem, dlaczego to nie działa na odwrót.
David Kennedy