Que fait la commande apt-get install ...
?
Lorsque j'entre dans la commande apt-get install ...
, 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 ...
Existe-t-il un fichier .sh
exécuté lors de l'exécution de apt-get install ...
? 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 correctement jusqu'à ce que j'installe Tomcat7-admin
(application Web du gestionnaire), le serveur ne répondant plus à aucune requête. J'ai essayé cela plusieurs fois, et cela se produit toujours.
apt-get
effectue principalement les tâches suivantes:
dpkg
de l'installer.dpkg
va:
preinst
name__, postinst
name__, (et prerm
name__, postrm
avant ceux-ci, si un package est mis à niveau)Vous pourriez être intéressé par les scripts du responsable, qui sont 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
En bref : apt-get install
fait 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. Ainsi, apt-get
té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 - 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. le soi-disant scripts du responsable . Ces scripts sont divisés en:
preinst
: avant l'installation des fichiers dans la hiérarchie de fichiers du systèmepostinst
: après l'installationprerm
: avant la désinstallationpostrm
: après la désinstallationIl 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 étant les suivants:
control
: A list des dépendances et autres informations utiles pour identifier le paquetconffiles
: A liste de fichiers de configuration (généralement ceux de /etc
)debian-binary
: contient la version du paquet deb, actuellement 2.md5sums
: Une liste des sommes md5 de chaque fichier du paquet à vérifiertemplates
: un fichier avec descriptions des erreurs et boîtes de dialogue pendant l'installationPour le réel sous le capot, vous aurez besoin de récupérer la source Apt. Assez simple si vous avez activé les référentiels sources:
apt-get source apt
La commande apt-get
vit elle-même dans cmdline/apt-get.cc
. C'est pénible à lire, mais la plupart des actions de apt-get
sont décrites de manière assez détaillée. L'installation est toutefois mappée via une fonction DoInstall
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.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 résumées via apt-pkg/package-manager.cc
Je ne fais que regarder brièvement mais je ne vois même pas où cela se rattache réellement aux systèmes dpkg
. Une partie de ceci semble être autoconfigurée via apt-pkg/aptconfiguration.cc
mais 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.
Il existe quelques réponses fantastiques ici qui sont meilleures que celle-ci, mais un élément que vous pourriez envisager pour vous aider à mieux comprendre les modifications apportées par un gestionnaire de paquets est Docker . Vous pouvez comparer les modifications apportées dans un conteneur à l'aide de docker diff <container>
. Toutes les modifications seront affichées. Ceci est particulièrement utile pour jeter un coup d'œil sous le capot pour voir ce que apt-get install
fait pour un système. Une recherche rapide vous donnera plusieursressources pour vous aider à mettre cela en œuvre.