64 votos

¿Qué hace apt-get install bajo el capó?

¿Qué hace el apt-get install ... ¿hace el comando?

Cuando entre apt-get install ... comando, aparecen algunos textos en la pantalla, pero eso no tiene suficiente información para mí. Quiero saber si se crea/edita algún archivo, se inicia algún servicio y otras actividades...

¿Hay alguna .sh que se ejecuta cuando el apt-get install ... ¿se ejecuta? Si es así, ¿cómo puedo ver el contenido de esa sh ¿archivo?

El motivo de esta pregunta es que recientemente he intentado instalar tomcat7 con apt-get install tomcat7 . Todo funciona bien hasta que instalo tomcat7-admin (aplicación web de gestión), el servidor dejó de responder a cualquier petición. He intentado esto muchas veces, y esto siempre sucede.

1 votos

1 votos

0 votos

Visite wiki.debian.org/Apt para más detalles

53voto

muru Puntos 43315

En su mayoría, apt-get hace las siguientes cosas:

  • comprueba las dependencias (y pide que se instalen),
  • descarga el paquete, lo verifica y luego le dice a dpkg para instalarlo.

dpkg lo hará:

  • extraer el paquete y copiar el contenido en la ubicación correcta, y comprobar si hay archivos preexistentes y modificaciones en ellos,
  • Ejecutar mantenedor del paquete scripts : preinst , postinst (y prerm , postrm antes de estos, si se está actualizando un paquete)
  • ejecutar algunas acciones basadas en desencadena

Puede que le interese el mantenedor scripts, que normalmente se encuentran en /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst} . Suelen ser Shell Shell, pero no hay una regla estricta. Por ejemplo:

$ 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

33voto

chaos Puntos 11188

En resumen : apt-get install hace todo lo necesario para que su sistema pueda ejecutar con éxito la nueva aplicación de software instalada.

Más largo:

Preliminares:

Desde el página de manual :

Todos los paquetes requeridos por el o los paquetes especificados para la instalación también serán recuperados e instalados.

Estos paquetes se almacenan en un repositorio en la red. Así que, apt-get descarga todos los necesarios en un directorio temporal ( /var/cache/apt/archives/ ). Se descargarán de un servidor web o ftp. Se especifican en el llamado sources.list una lista de repositorios. A partir de ahí se instalan uno a uno de forma procedimental.

Los primeros son los que no tienen más dependencias, por lo que no hay que instalar ningún otro paquete para ellos. A través de esto, otros paquetes (que tenían dependencias previamente) ya no tienen dependencias. El sistema sigue haciendo este proceso una y otra vez hasta que se instalan los paquetes especificados.

Cada paquete se somete a un procedimiento de instalación.

Instalación del paquete:

En las distribuciones de Linux basadas en Debian, como Ubuntu, esos paquetes están en un formato estandarizado específico llamado: deb - El formato de los paquetes binarios de Debian .

Dicho paquete contiene los archivos que deben instalarse en el sistema. También contienen un archivo de control . Ese archivo contiene scripts que el sistema de empaquetado debe ejecutar en una situación específica; los llamados mantenedor scripts . Esos scripts se dividen en:

  • preinst antes de la instalación de los archivos en la jerarquía de archivos del sistema
  • postinst Después de la instalación
  • prerm Antes de la desinstalación
  • postrm Después de la desinstalación

Hay una imagen interesante, que muestra el procedimiento de una instalación de un nuevo paquete:

installation

También hay más archivos de control, los más importantes son los siguientes:

  • control : A lista de las dependencias, y otra información útil para identificar el paquete
  • conffiles : A lista de los archivos de configuración (normalmente los de /etc )
  • debian-binary : contiene la versión del paquete deb, actualmente 2.0
  • md5sums : Una lista de sumas md5 de cada archivo en el paquete para verificar
  • templates : Un archivo con descripciones y diálogos de error durante la instalación

13voto

Berek Bryan Puntos 349

Para el actual bajo el capó cosas, tendrás que coger la fuente Apt. Es bastante sencillo si tienes habilitados los repositorios de fuentes:

apt-get source apt

El apt-get El propio mando vive en cmdline/apt-get.cc . Es un dolor para leer a través de pero la mayoría de apt-get Las acciones de la empresa se explican con bastante detalle allí. La instalación, sin embargo, se realiza a través de un DoInstall que vive en apt-private/private-install.{cc,h} .

Hay que recordar que apt-get es sólo una cara de la moneda.
dpkg se encarga de la instalación propiamente dicha, pero DoInstall no sabe de dpkg directamente. apt-get es en realidad sorprendentemente agnóstica con respecto al gestor de paquetes. Toda la funcionalidad se abstrae a través de apt-pkg/package-manager.cc

Sólo estoy mirando brevemente, pero incluso allí no puedo ver donde esto realmente se une a la dpkg sistemas. Parte de esto parece estar autoconfigurado a través de apt-pkg/aptconfiguration.cc pero este es un pozo profundo. Podrías pasar días desentrañando esto.

Sin embargo, la documentación de origen es buena. Podrías hacer cosas peores que ir a través de cada archivo y leer la cabecera para averiguar lo que realmente está sucediendo.

8voto

L0j1k Puntos 141

Hay algunas respuestas fantásticas aquí que son mejores que esta breve, pero algo que podrías considerar para ayudarte a entender mejor los cambios realizados por un gestor de paquetes es Docker . Puedes difundir los cambios realizados en un contenedor utilizando docker diff <container> y te mostrará todos los cambios. Esto es especialmente útil para echar un vistazo bajo el capó para ver lo que apt-get install hace a un sistema. Una búsqueda rápida le llevará a varios recursos para ayudar a ponerlo en práctica.

2 votos

Gracias por dar su punto de vista. En el contenedor Docker, instalé firefox y en otra pestaña de la terminal supervisé de cerca el diff del contenedor y aprendí lo que todos los archivos están cambiando en el contenedor. Me ayudó a entender más claramente.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X