¿Qué hace apt-get install debajo del capó?

60

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

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

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

La razón de esta pregunta es que recientemente intenté instalar tomcat7 con apt-get install tomcat7. Todo funciona bien hasta que instalo tomcat7-admin(aplicación web del administrador), el servidor no responde a ninguna solicitud. Lo intenté muchas veces, y esto siempre sucede.

TrungDQ
fuente
ver también: askubuntu.com/questions/110988/…
lesmana
También visite askubuntu.com/questions/481241/…
Pandya
visite wiki.debian.org/Apt para más detalles
Pandya
2
A partir del 14.04, apt-getse sustituye por apt. El reemplazo aún no está completo, pero funciona para install, upgradey dist-upgradeentre otros.
Paddy Landau
@PaddyLandau ¿Es un reemplazo apropiado o una utilidad extra / wrapper?
muru

Respuestas:

49

Principalmente, apt-gethace las siguientes cosas:

  • busca dependencias (y pide instalarlas),
  • descarga el paquete, lo verifica y luego le dice dpkgque lo instale.

dpkg será:

  • extraiga el paquete y copie el contenido en la ubicación correcta, y verifique si hay archivos y modificaciones preexistentes,
  • ejecución de scripts mantenedor del paquete : preinst, postinst, (y prerm, postrmantes de que éstos, si se está actualizando un paquete)
  • ejecutar algunas acciones basadas en disparadores

Puede interesarle los scripts de mantenedor, que generalmente se encuentran en /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}. Estos son generalmente scripts de 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
muru
fuente
30

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

Más, alargar:

Preliminares:

Desde la página del manual :

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

Esos paquetes se almacenan en un repositorio en la red. Entonces, apt-getdescarga 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 entonces se instalan uno por uno de forma procesal.

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

Dicho 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 empaquetado debe ejecutar en una situación específica; los llamados scripts de mantenedor . Esas secuencias de comandos 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 instalación de un nuevo paquete:

instalación

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

  • control: Una 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 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 de errores y cuadros de diálogo durante la instalación
caos
fuente
11

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

apt-get source apt

El apt-getcomando en sí mismo vive cmdline/apt-get.cc. Es difícil leerlo, pero la mayoría de apt-getlas acciones se detallan de forma bastante extensa allí. Sin embargo, la instalación se asigna a través de una DoInstallfunción en la que vive apt-private/private-install.{cc,h}.

Debe recordar que apt-get es simplemente una cara de la moneda.
dpkgestá manejando la instalación real pero DoInstallno lo sabe dpkgdirectamente. apt-geten realidad es sorprendentemente agnóstico de administrador de paquetes. Toda la funcionalidad se abstrae a través deapt-pkg/package-manager.cc

Solo miro brevemente, pero incluso allí no puedo ver dónde se une esto realmente a los dpkgsistemas. Algo de esto parece configurarse automáticamente, apt-pkg/aptconfiguration.ccpero este es un pozo profundo. Podrías pasar días desentrañando esto.

Sin embargo, la documentación fuente es buena. Podría hacer cosas peores que revisar cada archivo y leer el encabezado para averiguar lo que realmente está sucediendo.

Oli
fuente
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 diferenciar 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é le apt-get installhace a un sistema. Una búsqueda rápida le proporcionará varios recursos para ayudar a implementar esto.

L0j1k
fuente
1
Gracias por dar tu punto. En el contenedor Docker, instalé firefox y en otra pestaña de terminal, monitoreé de cerca la diferencia del contenedor y aprendí qué están cambiando todos los archivos en el contenedor. Me ayudó a entender más claramente.
abhy