Que fait apt-get install sous le capot?

60

Que fait la apt-get install ...commande?

Lorsque je saisis une apt-get install ...commande, des textes apparaissent à l'écran, mais ils ne contiennent pas assez d'informations. Je veux savoir si un fichier est créé / édité, si un service est démarré et d'autres activités ...

Y at-il un .shfichier exécuté lors de l' apt-get install ...exécution? Si oui, comment puis-je voir le contenu de ce shfichier?

La raison de cette question est que j’ai récemment essayé d’installer tomcat7 avec apt-get install tomcat7. Tout fonctionne bien jusqu'à ce que j'installe tomcat7-admin(application Web du gestionnaire), le serveur ne répondait plus à aucune requête. J'ai essayé cela plusieurs fois, et cela se produit toujours.

TrungDQ
la source
Visitez également askubuntu.com/questions/481241/…
Pandya
visitez wiki.debian.org/Apt pour plus de détails
Pandya
2
À partir de 14.04, apt-getest remplacé par apt. Le remplacement est pas encore terminée, mais il travaille pour install, upgradeet dist-upgradeentre autres.
Paddy Landau
@PaddyLandau S'agit-il d'un utilitaire de remplacement ou d'un utilitaire supplémentaire / wrapper?
muru

Réponses:

49

Fait principalement apt-getles choses suivantes:

  • vérifie les dépendances (et demande de les installer),
  • télécharge le paquet, le vérifie puis lui dit dpkgde l'installer.

dpkg volonté:

  • extraire le package et copier le contenu au bon emplacement, puis rechercher les fichiers préexistants et leurs modifications,
  • run scripts de maintenance du package : preinst, postinst(et prerm, postrmavant ceux - ci, si un paquet est mis à jour)
  • exécuter des actions basées sur des déclencheurs

Vous pourriez être intéressé par les scripts du responsable, qui sont généralement situés à l'adresse /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}. Ce sont généralement des scripts shell, mais il n'y a pas de règle stricte. Par exemple:

$ 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
la source
30

En bref : apt-get installfait tout ce qui est nécessaire pour que votre système puisse exécuter avec succès la nouvelle application logicielle installée.

Plus long:

Préliminaires:

De la page de manuel :

Tous les packages requis par le (s) package (s) spécifié (s) pour l'installation seront également récupérés et installés.

Ces packages sont stockés sur un référentiel du réseau. Alors, apt-gettélécharge tous les fichiers nécessaires dans un répertoire temporaire ( /var/cache/apt/archives/). Ils seront téléchargés depuis un serveur web ou ftp. Ils sont spécifiés dans le soi-disant sources.list; une liste de référentiels. À partir de ce moment-là, ils sont installés un à un dans les procédures.

Les premiers sont ceux qui n'ont plus de dépendances; donc, aucun autre paquet ne doit être installé pour eux. Grâce à cela, d'autres paquets (qui avaient des dépendances auparavant) n'ont plus de dépendances. Le système continue à répéter ce processus jusqu'à ce que les packages spécifiés soient installés.

Chaque paquet subit une procédure d'installation.

Installation du package:

Dans les distributions Linux basées sur Debian, comme Ubuntu, ces paquets sont dans un format normalisé spécifié appelé: deb - Le format du paquet binaire Debian .

Un tel paquet contient les fichiers à installer sur le système. En outre, ils contiennent un fichier de contrôle . Ce fichier contient des scripts que le système de packaging doit exécuter dans une situation spécifique. les scripts dits de mainteneur . Ces scripts sont divisés en:

  • preinst: avant l'installation des fichiers dans la hiérarchie de fichiers du système
  • postinst: après l'installation
  • prerm: avant la désinstallation
  • postrm: après la désinstallation

Il y a une image intéressante, montrant la procédure d'installation d'un nouveau paquet:

installation

Il y a aussi plus de fichiers de contrôle, les plus importants étant les suivants:

  • control: Liste des dépendances et autres informations utiles pour identifier le paquet
  • conffiles: Une liste de fichiers de configuration (généralement ceux de /etc)
  • debian-binary: contient la version du paquet deb, actuellement 2.0
  • md5sums: Une liste des sommes md5 de chaque fichier du paquet à vérifier
  • templates: Un fichier avec des descriptions d'erreur et des boîtes de dialogue lors de l'installation
le chaos
la source
11

Pour ce qui est du sous-capot , vous devez récupérer la source Apt. Assez simple si vous avez activé les référentiels sources:

apt-get source apt

La apt-getcommande elle-même vit à cmdline/apt-get.cc. C'est pénible à lire, mais la plupart des apt-getactions sont décrites de manière assez détaillée. L'installation est toutefois mappée par une DoInstallfonction qui réside dans apt-private/private-install.{cc,h}.

Vous devez vous rappeler que apt-get n'est qu'un côté de la médaille.
dpkggère l'installation actuelle mais DoInstallne le sait pas dpkgdirectement. apt-getest en fait étonnamment agnostique pour les gestionnaires de paquets. Toutes les fonctionnalités sont résumées à traversapt-pkg/package-manager.cc

Je ne fais que regarder brièvement mais même là, je ne vois pas où cela se rattache réellement aux dpkgsystèmes. Une partie de cela semble être autoconfigurée, apt-pkg/aptconfiguration.ccmais c'est un puits profond. Vous pourriez passer des jours à démêler cela.

La documentation source est bonne cependant. Vous pourriez faire des choses pires que de parcourir chaque fichier et de lire l'en-tête pour comprendre ce qui se passe réellement.

Oli
la source
6

Docker est une solution que vous pouvez envisager pour vous aider à mieux comprendre les modifications apportées par un gestionnaire de paquets . Vous pouvez comparer les modifications apportées dans un conteneur à l'aide de docker diff <container>et il vous montrera toutes les modifications. Ceci est particulièrement utile pour jeter un coup d'œil sous le capot pour voir ce que apt-get installfait un système. Une recherche rapide vous donnera plusieurs ressources pour vous aider à mettre en œuvre cela.

L0j1k
la source
1
Merci de donner votre point. Dans le conteneur Docker, j’ai installé firefox et, dans un autre onglet de terminal, j’ai surveillé de près le diff du conteneur et ai appris ce que tous les fichiers sont en train de changer dans le conteneur. Cela m'a aidé à comprendre plus clairement.
Abhy