¿Cómo funciona realmente apt-get?

34

Bien, entiendo cómo puedo usar apt-get {install|upgrade|remove} mypackagespara instalar, actualizar o eliminar archivos binarios, así como sus archivos de datos de configuración y dependencias (en realidad, removesolo eliminará los archivos binarios a menos que se proporcionen marcas adicionales).

No estoy buscando cómo se usa como mandescribe esto, sino un alto nivel de lo que está haciendo. Mi objetivo final es crear un medio para instalar y administrar un software personalizado (creado por un archivo make) en múltiples máquinas remotas, y necesito aprender más sobre el proceso. Si las respuestas a esta pregunta se basan en qué distribución se utiliza, por favor, personalícela a Debian.

Además de cómo funciona en general, tengo las siguientes preguntas específicas:

  1. ¿Cómo el cliente que está accediendo al repositorio de apt hace un seguimiento de los archivos?
  2. ¿Debe estar alojado el repositorio en el mismo sistema operativo (es decir, ¿puede ser alojado el repositorio apt en redhat)?
  3. ¿Cómo se especifican las ubicaciones para instalar archivos? ¿Está esto especificado por el .debarchivo?
  4. ¿Cómo accede una máquina remota al repositorio? ¿Es solo ftp (s) o http (s)?
  5. ¿La máquina que aloja el repositorio está ejecutando un software especial (como gitlab para un repositorio git), o es solo un sistema de archivos estructurado?
usuario1032531
fuente

Respuestas:

47

Debes echar un vistazo a https://wiki.debian.org/Packaging : el tutorial de empaquetado allí te ayudará mucho, así como partes de la nueva guía del mantenedor.

En cuanto a sus preguntas, en orden:

  1. El repositorio contiene archivos de "lista". Por ejemplo, http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz .apt-get updatedescarga estos archivos de lista y los almacena en /var/lib/apt/lists. Los archivos de la lista enumeran todos los paquetes, incluidos un grupo de metadatos y una URL relativa para encontrar el .deb en. (Son archivos de texto sin formato legibles por humanos, así que puedes verlos).

  2. El sistema operativo no importa. Puede alojarlo en Windows, si lo desea. (Bueno, tal vez tengas problemas con los nombres de archivo que a Windows no le gustan) (ver también # 4 y # 5).

  3. Sí, está dentro del archivo deb. Un archivo deb es en realidad un archivo (usando ar). Dentro hay algunos archivos tar; uno de ellos es (esencialmente) extraído a /.

  4. Es solo HTTP (o HTTPS, o FTP, o ... apt-get admite muchos protocolos). Sin embargo, nada especial. Tenga en cuenta que hay archivos Release, firmados con gpg, que garantizan la integridad incluso sin HTTPS. Las réplicas de Debian utilizan principalmente HTTP, no HTTP. (Algunos admiten HTTPS también para la confidencialidad).

  5. Es solo un sistema de archivos estructurado.

Una descripción rápida y de alto nivel de cómo interactúa apt-get con una fuente de paquete:

  1. Usted configura qué fuentes mirar en su archivo sources.list. Considere una línea como:

    deb http://http.us.debian.org/debian/ stretch main
    

    debdice que esta es una fuente para obtener archivos .deb (binarios); luego está el prefijo URL, suite / release ("stretch") y componente ("main").

  2. apt-get tiene una lista de arquitecturas, la obtiene de dpkg. Digamos que dpkg --print-architecturees amd64. apt-get ahora puede construir las URL de las que realmente va a descargar, combinando el prefijo de URL, la palabra "dists", la suite, el componente y la arquitectura. Luego agrega algunos nombres de archivo fijos, como "Packages.xz". Eso da la URL anterior (en el n. ° 1). Hay algunos archivos más con nombres / rutas definidos, como el archivo Release http://http.us.debian.org/debian/dists/stretch/Release y su firma (lo mismo, con .gpg adjunto). Todos estos son archivos de texto sin formato (posiblemente comprimidos). El archivo de lanzamiento contiene sumas de comprobación para otros archivos que apt-get va a descargar, como Packages.xz.

  3. El archivo Packages.xz enumera todos los paquetes en esa suite / nombre de código / arquitectura. También proporciona la ruta donde se encuentra ese archivo; por ejemplo pool/main/0/0ad/0ad_0.0.21-2_amd64.deb.

  4. Cuando le pide a apt-get que descargue un paquete, utiliza esa ubicación + la URL base para descargar el paquete, por lo que ese paquete está en http://http.us.debian.org/debian/pool/main/0/0ad /0ad_0.0.21-2_amd64.deb

  5. El otro directorio interesante es en sourcelugar de binary-amd64. Eso se usa para sus deb-srcentradas; contiene información sobre paquetes fuente (y de lo contrario es bastante similar).

  6. Hay algunas otras cosas (todas opcionales, creo) que pueden ser parte del repositorio (es decir, disponibles a través de HTTP): difieren entre las diferentes versiones del archivo Packages.xz; traducciones de descripciones de paquetes, una lista completa de cada archivo instalable y a qué paquete pertenece (Contents-amd64.gz, usado por ejemplo, apt-file, no por apt-get), etc. Es probable que esto no sea relevante para usted, pero puede verlos todos navegando por http://http.us.debian.org/debian/dists/stretch/ ; la mayoría de ellos son archivos de texto sin formato.

Todos estos archivos son texto sin formato. Pueden, en teoría, ser creados a mano. En la práctica, todos usan una de estas herramientas de generación de repositorios . Aquí, y advierto que esta fue una elección tomada hace mucho tiempo, por lo que puede estar desactualizada, usamos mini-dinstall. La salida de esas herramientas son archivos ordinarios o, en el peor de los casos, enlaces simbólicos. Puede sincronizarlos con el servidor web que desee.

derobert
fuente
Gáname a eso ;-). unix.stackexchange.com/q/285635/86440 cubre el aspecto de integridad de las cosas (punto 4). El soporte de FTP en el lado del espejo fue desactivado recientemente en el IIRC.
Stephen Kitt
Con respecto al n. ° 2, debian.org/doc/manuals/distribute-deb/… declara de manera diferente. Gracias
user1032531
Con respecto al n. ° 5, ¿cuál es el punto de wiki.debian.org/DebianRepository/…
User1032531
1
@ user1032531 # 2. La creación de paquetes se realiza mejor en Debian. Pero su servidor web puede ser cualquier cosa. (Normalmente, crea el paquete en su host de compilación, posiblemente incluso toda la estructura del repositorio, luego lo carga en el servidor web). # 5. Esas herramientas lo ayudan a construir el sistema de archivos estructurado, incluidos todos los archivos de listas, archivos de versiones firmadas, etc. (También son probablemente los más fáciles de ejecutar en Debian).
derobert
2
@FaheemMitha Packages (de alguna compresión, el apt moderno prefiere .xz) definitivamente se descarga, termina en /var/lib/apt/lists/. El contenido se descarga mediante apt-file y auto-apt.
derobert