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

55

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

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

¿Hay algún archivo .sh ejecutado cuando se ejecuta apt-get install ... ? Si es así, ¿cómo puedo ver el contenido de ese archivo sh ?

Recientemente, intenté instalar tomcat7 con apt-get install tomcat7 . Todo funciona bien hasta que instale tomcat7-admin (aplicación web manager), el servidor no responde a ninguna solicitud. Lo intenté muchas veces, y esto siempre sucede.

    
pregunta TrungDQ 24.10.2014 - 10:20

4 respuestas

47

En su mayoría, apt-get hace lo siguiente:

  • busca dependencias (y solicita su instalación),
  • descarga el paquete, lo verifica y luego le dice a dpkg que lo instale.

dpkg :

  • extrae el paquete y copia el contenido en la ubicación correcta, y verifica si hay archivos y modificaciones preexistentes en ellos,
  • ejecute scripts del desarrollador de paquetes : preinst , postinst , (y prerm , postrm antes de estos, si un paquete se está actualizando)
  • ejecuta algunas acciones basadas en disparadores

Puede que le interesen los scripts del desarrollador, que generalmente se encuentran en /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst} . Suelen ser scripts de shell, pero no hay una regla sólida. 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
    
respondido por el muru 24.10.2014 - 10:30
29

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

Más:

Preliminares:

De la página de manual :

  

Todos los paquetes requeridos por los paquetes especificados para la instalación   también se recuperará e instalará.

Esos paquetes se almacenan en un repositorio en la red. Entonces, apt-get descarga todas las necesarias en un directorio temporal ( /var/cache/apt/archives/ ). Se descargarán desde un servidor web o ftp. Se especifican en el llamado sources.list ; una lista de repositorios. A partir de ese momento, se instalarán uno a uno procesalmente.

Los primeros son los que no tienen más dependencias; por lo que no se debe instalar ningún otro paquete para ellos. A través de eso, otros paquetes (que tenían dependencias previamente) ya no tienen más dependencias. El sistema sigue haciendo ese 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 Linux basadas en Debian, como Ubuntu, esos paquetes están en un formato estandarizado específico llamado: deb - The Formato de paquete binario de Debian .

Tal paquete contiene los archivos que se instalarán en el sistema. También contienen un archivo de control . Ese archivo contiene scripts que el sistema de empaquetamiento debería ejecutar en una situación específica; los llamados scripts del desarrollador . Esos scripts están divididos 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 instalación de un nuevo paquete:

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 : una lista de archivos de configuración (generalmente aquellos en /etc )
  • debian-binary : contiene la versión deb-package, actualmente 2.0
  • md5sums : una lista de md5sums de cada archivo en el paquete para verificar
  • templates : un archivo con descripciones de error y cuadros de diálogo durante la instalación
respondido por el chaos 24.10.2014 - 11:44
10

Para las cosas reales de debajo del capó , necesitarás obtener la fuente Apt. Bastante simple si tiene repositorios de origen habilitados:

apt-get source apt

El comando apt-get en sí mismo vive en cmdline/apt-get.cc . Es un dolor leerlo, pero la mayoría de las acciones de apt-get están explicadas bastante extensamente allí. Sin embargo, la instalación se mapea a través de una función DoInstall que vive en apt-private/private-install.{cc,h} .

Debes recordar que apt-get es simplemente una cara de la moneda.
dpkg está manejando la instalación real, pero DoInstall no sabe acerca de dpkg directamente. apt-get es realmente sorprendentemente agnóstico del administrador de paquetes. Toda la funcionalidad se abstrae a través de apt-pkg/package-manager.cc

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

La documentación fuente es buena, sin embargo. Podría hacer cosas peores que examinar cada archivo y leer el encabezado para determinar qué está sucediendo realmente.

    
respondido por el Oli 24.10.2014 - 11:04
6

Aquí hay algunas respuestas fantásticas que son mejores que esta breve, pero algo que podría considerar para ayudarlo a comprender mejor los cambios realizados por un administrador de paquetes es Docker . Puede modificar los cambios realizados en un contenedor utilizando docker diff <container> y le mostrará todos los cambios. Esto es especialmente útil para echar un vistazo debajo del capó para ver qué apt-get install le hace a un sistema. Una búsqueda rápida le permitirá obtener varios resources para ayudar a implementar esto.

    
respondido por el L0j1k 25.10.2014 - 20:52

Lea otras preguntas en las etiquetas