Que fait apt-get install sous le capot?

55

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

Lorsque je saisis la commande apt-get install ... , certains textes apparaissent à l’écran, mais cela n’a pas assez d’informations pour moi. Je veux savoir si un fichier est créé / édité, si un service est démarré et d'autres activités ...

Existe-t-il un fichier .sh exécuté lorsque apt-get install ... s'exécute? Si oui, comment puis-je voir le contenu de ce fichier sh ?

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 demande. J'ai essayé plusieurs fois, et cela se produit toujours.

    
posée TrungDQ 24.10.2014 - 12:20
la source

4 réponses

47

Surtout, apt-get fait les choses suivantes:

  • vérifie les dépendances (et demande à les installer),
  • télécharge le paquet, le vérifie et indique à dpkg de l'installer.

dpkg va:

  • extrayez le paquet et copiez le contenu au bon endroit, et recherchez les fichiers préexistants et les modifications sur ceux-ci,
  • Exécuter les scripts du responsable des packages : preinst , postinst , (et prerm , postrm avant ceux-ci, si un paquet est en cours de mise à niveau)
  • exécuter des actions basées sur les déclencheurs

Vous pourriez être intéressé par les scripts du responsable, généralement situés à /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
    
réponse donnée muru 24.10.2014 - 12:30
la source
29

En résumé : apt-get install fait tout ce qui est nécessaire pour que votre système puisse exécuter correctement la nouvelle application logicielle installée.

Plus long:

Préliminaires:

Depuis la page de manuel :

  

Tous les paquetages requis par le ou les paquetages spécifiés pour l’installation   sera également récupéré et installé.

Ces packages sont stockés sur un référentiel du réseau. Ainsi, apt-get télécharge tous les éléments 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, ils s’installent un par un.

Les premiers sont ceux qui n’ont pas d’autres 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 désormais plus de dépendances. Le système continue ce processus encore et encore 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 standardisé spécifié appelé: deb - Le Format de paquet binaire Debian .

Un tel paquet contient les fichiers à installer sur le système. Ils contiennent également 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 du responsable . Ces scripts sont divisés en:

  • preinst : avant l'installation des fichiers dans la hiérarchie des fichiers systèmes
  • 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:

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

  • control : une liste des dépendances et autres informations utiles identifier le paquet
  • conffiles : Une liste de fichiers de configuration (généralement ceux de /etc )
  • debian-binary : contient la version de deb-package, actuellement 2.0
  • md5sums : liste des md5sums de chaque fichier du package à vérifier
  • templates : fichier contenant des descriptions et boîtes de dialogue des erreurs lors de l'installation
réponse donnée chaos 24.10.2014 - 13:44
la source
10

Pour les éléments under-the-hood , vous devez saisir la source Apt. Assez simple si vous avez activé les référentiels sources:

apt-get source apt

La commande apt-get elle-même vit dans cmdline/apt-get.cc . C'est difficile à lire, mais la plupart des actions de apt-get y sont détaillées. L'installation est cependant mappée via une fonction DoInstall qui réside dans apt-private/private-install.{cc,h} .

Vous devez vous rappeler qu'apt-get n'est qu'un côté de la pièce.
dpkg gère l'installation proprement dite mais DoInstall ne connaît pas directement dpkg . apt-get est en fait étonnamment agnostique pour les gestionnaires de paquets. Toutes les fonctionnalités sont extraites via apt-pkg/package-manager.cc

Je ne regarde que brièvement mais même là, je ne vois pas où cela se rattache aux systèmes dpkg . Une partie de ceci semble être autoconfigurée par apt-pkg/aptconfiguration.cc mais c'est un puits profond. Vous pourriez passer des jours à résoudre ce problème.

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

    
réponse donnée Oli 24.10.2014 - 13:04
la source
6

Il y a ici des réponses fantastiques qui sont meilleures que celles-ci, mais vous pourriez envisager d’aider à mieux comprendre les modifications apportées par un gestionnaire de paquets: Docker . Vous pouvez modifier les modifications apportées dans un conteneur à l'aide de docker diff <container> et vous afficher toutes les modifications. Ceci est particulièrement utile pour regarder sous le capot pour voir ce que apt-get install fait à un système. Une recherche rapide vous permettra de plusieurs ressources pour aider à mettre en œuvre cela.

    
réponse donnée L0j1k 25.10.2014 - 22:52
la source

Lire d'autres questions sur les étiquettes