Was macht apt-get install unter der Haube?

60

Was macht der apt-get install ...Befehl?

Wenn ich einen apt-get install ...Befehl eingebe, werden auf dem Bildschirm einige Texte angezeigt, die jedoch nicht genügend Informationen für mich enthalten. Ich möchte wissen, ob eine Datei erstellt / bearbeitet, ein Dienst gestartet oder andere Aktivitäten ausgeführt werden.

Wird .shbeim apt-get install ...Ausführen eine Datei ausgeführt ? Wenn ja, wie kann ich den Inhalt dieser shDatei sehen?

Der Grund für diese Frage ist, dass ich kürzlich versucht habe, tomcat7 mit zu installieren apt-get install tomcat7. Alles funktioniert einwandfrei, bis ich tomcat7-admin(Manager-Webanwendung) installiere , der Server reagiert nicht mehr auf Anfragen. Ich habe es oft versucht, und das passiert immer.

TrungDQ
quelle
Besuchen Sie auch askubuntu.com/questions/481241/…
Pandya
Besuchen Sie wiki.debian.org/Apt für weitere Details
Pandya
2
Ab 14.04 apt-getwird ersetzt durch apt. Der Ersatz ist noch nicht abgeschlossen, aber es funktioniert für install, upgradeund dist-upgradeunter anderem.
Paddy Landau
@PaddyLandau Handelt es sich um einen geeigneten Ersatz oder um ein Extra- / Wrapper-Dienstprogramm?
muru

Antworten:

49

Tut meistens apt-getdie folgenden Dinge:

  • sucht nach Abhängigkeiten (und bittet um deren Installation),
  • Lädt das Paket herunter, überprüft es und fordert dann dpkgzur Installation auf.

dpkg werden:

  • Extrahieren Sie das Paket, kopieren Sie den Inhalt an den richtigen Speicherort und überprüfen Sie, ob bereits Dateien vorhanden sind und welche Änderungen daran vorgenommen wurden.
  • Laufpaketbetreuer Skripte : preinst, postinst, (und prerm, postrmbevor diese, wenn ein Paket aktualisiert wird)
  • Führen Sie einige Aktionen basierend auf Triggern aus

Möglicherweise interessieren Sie sich für die Betreuerskripte, die sich normalerweise unter befinden /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}. Dies sind normalerweise Shell-Skripte, aber es gibt keine strengen Regeln. Zum Beispiel:

$ 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
quelle
30

Kurz gesagt : apt-get installErledigt alles, was erforderlich ist, damit Ihr System die neu installierte Softwareanwendung erfolgreich ausführen kann.

Länger:

Vorbereitungen:

Aus der Manpage :

Alle Pakete, die von den für die Installation angegebenen Paketen benötigt werden, werden ebenfalls abgerufen und installiert.

Diese Pakete werden in einem Repository im Netzwerk gespeichert. So apt-getlädt alle benötigten diejenigen in ein temporäres Verzeichnis ( /var/cache/apt/archives/). Sie werden von einem Web- oder FTP-Server heruntergeladen. Sie sind in der sogenannten angegeben sources.list; eine Liste von Repositories. Von da an werden sie nacheinander prozedural installiert.

Die ersten sind diejenigen, die keine weiteren Abhängigkeiten haben; Daher muss kein anderes Paket für sie installiert werden. Dadurch haben andere Pakete (die vorher Abhängigkeiten hatten) jetzt keine Abhängigkeiten mehr. Das System führt diesen Vorgang so oft aus, bis die angegebenen Pakete installiert sind.

Jedes Paket wird einer Installationsprozedur unterzogen.

Paketinstallation:

In Debian-basierten Linux-Distributionen wie Ubuntu liegen diese Pakete in einem festgelegten standardisierten Format vor: deb - Das Debian-Binärpaketformat .

Ein solches Paket enthält die Dateien, die auf dem System installiert werden sollen. Sie enthalten auch eine Steuerdatei . Diese Datei enthält Skripte, die das Verpackungssystem in einer bestimmten Situation ausführen soll. die sogenannten Betreuer-Skripte . Diese Skripte sind unterteilt in:

  • preinst: vor der Installation der Dateien in die Systemdatei-Hierarchie
  • postinst: nach der installation
  • prerm: vor der Deinstallation
  • postrm: nach der Deinstallation

Es gibt ein interessantes Bild, das den Ablauf einer Installation eines neuen Pakets zeigt:

Installation

Es gibt auch mehr Kontrolldateien, die wichtigsten sind:

  • control: Eine Liste der Abhängigkeiten und andere nützliche Informationen zur Identifizierung des Pakets
  • conffiles: Eine Liste der Konfigurationsdateien (normalerweise die in /etc)
  • debian-binary: enthält die deb-package Version, aktuell 2.0
  • md5sums: Eine Liste der MD5-Summen jeder Datei im Paket zur Überprüfung
  • templates: Eine Datei mit Fehlerbeschreibungen und Dialogen während der Installation
Chaos
quelle
11

Für das eigentliche Unter-der-Haube- Zeug müssen Sie die Apt-Quelle holen. Ziemlich einfach, wenn Sie Quell-Repositorys aktiviert haben:

apt-get source apt

Der apt-getBefehl selbst lebt in cmdline/apt-get.cc. Es ist mühsam, dies durchzulesen, aber die meisten apt-getAktionen sind dort ziemlich ausführlich beschrieben. Die Installation wird jedoch durch eine DoInstallFunktion abgebildet, in der sie lebt apt-private/private-install.{cc,h}.

Man muss bedenken, dass apt-get nur eine Seite der Medaille ist. kümmert sich um
dpkgdie eigentliche Installation, DoInstallkennt sich aber nicht dpkgdirekt aus. apt-getist eigentlich überraschend paketmanagerunabhängig. Die gesamte Funktionalität wird durch abstrahiertapt-pkg/package-manager.cc

Ich schaue nur kurz, aber selbst dort kann ich nicht sehen, wo dies tatsächlich an den dpkgSystemen hängt . Einige davon scheinen automatisch konfiguriert zu sein, apt-pkg/aptconfiguration.ccaber dies ist ein tiefer Brunnen. Sie könnten Tage damit verbringen, dies zu enträtseln.

Die Quelldokumentation ist jedoch gut. Sie könnten schlimmere Dinge tun, als jede Datei durchzulesen und den Header zu lesen, um herauszufinden, was tatsächlich passiert.

Oli
quelle
6

Hier gibt es einige fantastische Antworten, die besser sind als diese kurze, aber etwas, das Sie in Betracht ziehen könnten, um ein besseres Verständnis für die von einem Paketmanager vorgenommenen Änderungen zu erlangen, ist Docker . Sie können die in einem Container vorgenommenen Änderungen mithilfe von unterscheiden docker diff <container>und es werden Ihnen alle Änderungen angezeigt. Dies ist besonders nützlich, wenn Sie einen Blick unter die Haube werfen, um zu sehen, was apt-get installmit einem System geschieht. Bei einer schnellen Suche erhalten Sie mehrere Ressourcen , die Sie bei der Implementierung unterstützen.

L0j1k
quelle
1
Vielen Dank, dass Sie Ihren Standpunkt dargelegt haben. Im Docker-Container habe ich Firefox installiert und in einem anderen Terminal-Tab habe ich den Unterschied des Containers genau überwacht und erfahren, was alle Dateien im Container ändern. Es hat mir geholfen, klarer zu verstehen.
am