Co robi apt-get install pod maską?

60

Co robi apt-get install ...polecenie?

Kiedy wprowadzam apt-get install ...polecenie, na ekranie pojawiają się pewne teksty, ale to dla mnie za mało informacji. Chcę wiedzieć, czy jakikolwiek plik jest tworzony / edytowany, uruchamiana jest jakakolwiek usługa i inne działania ...

Czy podczas .shuruchamiania jest wykonywany jakiś plik apt-get install ...? Jeśli tak, w jaki sposób mogę zobaczyć zawartość tego shpliku?

Powodem tego pytania jest to, że ostatnio próbowałem zainstalować tomcat7 apt-get install tomcat7. Wszystko działa dobrze, dopóki nie zainstaluję tomcat7-admin(menedżer aplikacji sieci Web), serwer przestał odpowiadać na wszelkie żądania. Próbowałem tego wiele razy i zawsze tak się dzieje.

TrungDQ
źródło
patrz również: askubuntu.com/questions/110988/…
lesmana
Odwiedź także askubuntu.com/questions/481241/…
Pandya,
odwiedź wiki.debian.org/Apt po dalsze szczegóły
Pandya,
2
Od 14.04 apt-getzastępuje się apt. Wymiana nie jest jeszcze kompletna, ale to działa na install, upgradei dist-upgradewielu innych.
Paddy Landau
@PaddyLandau Czy to odpowiednia zamiennik czy dodatkowe narzędzie / opakowanie?
muru

Odpowiedzi:

49

Przeważnie apt-getrobi następujące rzeczy:

  • sprawdza zależności (i prosi o ich zainstalowanie),
  • pobiera pakiet, weryfikuje go, a następnie każe dpkggo zainstalować.

dpkg będzie:

  • rozpakuj pakiet i skopiuj zawartość do właściwej lokalizacji oraz sprawdź, czy istnieją wcześniej istniejące pliki i modyfikacje,
  • prowadzony przez skrypty opiekuna pakietu : preinst, postinst, (i prerm, postrmzanim te, jeśli opakowanie jest uaktualniony)
  • wykonać niektóre działania na podstawie wyzwalaczy

Możesz być zainteresowany skryptami opiekuna, które zwykle znajdują się w /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}. Zwykle są to skrypty powłoki, ale nie ma twardej reguły. Na przykład:

$ ls /var/lib/dpkg/info/xml-core.{pre,post}{rm,inst}
/var/lib/dpkg/info/xml-core.postinst
/var/lib/dpkg/info/xml-core.postrm
/var/lib/dpkg/info/xml-core.preinst
/var/lib/dpkg/info/xml-core.prerm
muru
źródło
30

W skrócie : apt-get installrobi wszystko, co potrzebne, aby system mógł pomyślnie uruchomić nową zainstalowaną aplikację.

Dłużej:

Czynności wstępne:

Z strony podręcznika :

Wszystkie pakiety wymagane przez pakiety określone do instalacji również zostaną pobrane i zainstalowane.

Te pakiety są przechowywane w repozytorium w sieci. Tak więc apt-getpobiera wszystkie potrzebne do katalogu tymczasowego ( /var/cache/apt/archives/). Zostaną pobrane z serwera WWW lub ftp. Są one określone w tzw sources.list; lista repozytoriów. Od tego momentu są instalowane jeden po drugim proceduralnie.

Pierwszymi są te, które nie mają dalszych zależności; więc nie trzeba dla nich instalować żadnego innego pakietu. Dzięki temu inne pakiety (które wcześniej miały zależności) nie mają już żadnych zależności. System cały czas wykonuje ten proces, dopóki nie zostaną zainstalowane określone pakiety.

Każda paczka przechodzi procedurę instalacyjną.

Instalacja pakietu:

W dystrybucjach Linuksa opartych na Debianie, jako Ubuntu, pakiety te mają określony standardowy format o nazwie: deb - Format pakietu binarnego Debiana .

Taki pakiet zawiera pliki do zainstalowania w systemie. Zawierają także plik kontrolny . Ten plik zawiera skrypty, które system pakujący powinien wykonać w określonej sytuacji; tak zwane skrypty opiekuna . Te skrypty są podzielone na:

  • preinst: przed instalacją plików w systemowej hierarchii plików
  • postinst: po instalacji
  • prerm: przed odinstalowaniem
  • postrm: po odinstalowaniu

Jest interesujące zdjęcie, pokazujące procedurę instalacji nowego pakietu:

instalacja

Jest też więcej plików kontrolnych, najważniejsze to:

  • control: Lista zależności i inne przydatne informacje umożliwiające identyfikację pakietu
  • conffiles: Lista plików konfiguracyjnych (zwykle tych w /etc)
  • debian-binary: zawiera wersję pakietu deb, obecnie 2.0
  • md5sums: Lista sum md5 każdego pliku w pakiecie do weryfikacji
  • templates: Plik z opisami błędów i oknami dialogowymi podczas instalacji
chaos
źródło
11

Aby uzyskać rzeczywiste rzeczy pod maską , musisz pobrać źródło Apt. Dość proste, jeśli masz włączone repozytoria źródłowe:

apt-get source apt

Samo apt-getpolecenie mieszka w cmdline/apt-get.cc. Czytanie jest trudne, ale większość apt-getdziałań została tam opisana dość obszernie. Instalacja jest jednak mapowana za pomocą DoInstallfunkcji, w której żyje apt-private/private-install.{cc,h}.

Musisz pamiętać, że apt-get to tylko jedna strona medalu.
dpkgobsługuje faktyczną instalację, ale DoInstallnie wie o niej dpkgbezpośrednio. apt-getjest zadziwiająco agnostyczny dla menedżera pakietów. Cała funkcjonalność jest abstrakcyjnaapt-pkg/package-manager.cc

Patrzę tylko krótko, ale nawet tam nie widzę, gdzie to właściwie łączy się z dpkgsystemami. Niektóre z nich wydają się być konfigurowane automatycznie, apt-pkg/aptconfiguration.ccale jest to głęboka studnia. Mógłbyś spędzić kilka dni na rozwikłaniu tego.

Dokumentacja źródłowa jest jednak dobra. Możesz zrobić gorsze rzeczy niż przejrzeć każdy plik i przeczytać nagłówek, aby dowiedzieć się, co się właściwie dzieje.

Oli
źródło
6

Jest tu kilka fantastycznych odpowiedzi, które są lepsze niż ta krótka, ale czymś, co możesz rozważyć, aby pomóc ci lepiej zrozumieć zmiany wprowadzone przez menedżera pakietów, to Docker . Możesz różnicować zmiany wprowadzone w kontenerze za pomocą, docker diff <container>a zobaczysz wszystkie zmiany. Jest to szczególnie przydatne, gdy zajrzysz pod maskę i zobaczysz, co apt-get installrobi system. Szybkie wyszukiwanie da ci kilka zasobów, które pomogą Ci to wdrożyć.

L0j1k
źródło
1
Dziękuję za udzielenie swojego punktu. W kontenerze Docker zainstalowałem Firefoksa, a na innej karcie terminalu dokładnie monitorowałem różnicę kontenera i dowiedziałem się, co zmieniają wszystkie pliki w kontenerze. Pomogło mi to lepiej zrozumieć.
abhy