¿Cómo manejan los paquetes snap las dependencias compartidas?

30

El formato de empaquetado instantáneo finalmente nos libera del infierno de dependencias al permitir que cada paquete tenga su propia copia de dependencias. Estoy interesado en los detalles técnicos sobre cómo hace esto. ¿Cómo maneja:

  • ¿Se ajusta según la versión de una biblioteca ya instalada a través de paquetes deb para la versión actual? ¿Ignora la biblioteca instalada?
  • diferentes instantáneas que especifican la misma versión de la misma biblioteca? ¿Hace deduplicación de alguna manera?
  • actualizaciones de bibliotecas principales que probablemente sean utilizadas por muchas instantáneas? OpenSSL viene a la mente como un gran punto de dolor.

xdg-app tiene algo llamado "tiempo de ejecución" :

Un concepto fundamental en xdg-app es el tiempo de ejecución / división de la aplicación. Cada aplicación depende de un tiempo de ejecución, que proporciona las bibliotecas principales en las que se basa la aplicación. Normalmente, muchas aplicaciones comparten los tiempos de ejecución, pero un usuario puede tener múltiples tiempos de ejecución instalados al mismo tiempo.

Parece que en el caso de OpenSSL, sería parte del tiempo de ejecución en xdg-apps, por lo que una actualización de OpenSSL debería afectar de manera transparente a todas las aplicaciones xdg que usan el mismo tiempo de ejecución.

muru
fuente

Respuestas:

9

Las dos primeras situaciones se manejan de manera inteligente.

Una de las características interesantes de las que se habló es el soporte de deduplicación para contenido dentro de paquetes Snap. Las instantáneas se deduplicarían automáticamente de los archivos comunes compartidos entre las instantáneas en función de sus hashes de archivos. Habría una desduplicación en la capa del sistema de archivos, una desduplicación en las descargas instantáneas (con soporte del servidor) y quizás una desduplicación de las bibliotecas mapeadas desde el enlazador. La deduplicación es un gran elemento de trabajo y es probable que tarde un tiempo en implementarse por completo, pero no obstante es un objetivo interesante.

Fuente: http://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-Snappy-Deduplication

En cuanto a la tercera situación, tienen algo similar a los tiempos de ejecución que mencionaste:

Hay tres capas que forman una máquina rápida: la capa del sistema, proporcionada por Canonical, una capa de marcos que amplían el sistema base producido por los proveedores en colaboración con Canonical, y un conjunto de aplicaciones rápidas, proporcionadas directamente por los proveedores. Actualizar cualquier pieza solo significa usar la nueva versión de una imagen de solo lectura. Volver a una versión anterior es igual de fácil.

Fuente: http://www.ubuntu.com/cloud/snappy

Todavía no existe una buena documentación que describa los marcos, principalmente porque parecen estar resolviendo los límites de lo que es un marco. Aquí hay un extracto de su lista de correo que podría ayudar a aclarar las cosas.

Estoy experimentando con Frameworks para extender esencialmente el sistema base Snappy mediante software y servicios que requieren muchos snaps pero que no deberían incluirse en ninguno de ellos debido a problemas de actualización y tamaño. El mejor ejemplo que tengo para esto es el binario openssl. Muchas instantáneas necesitan esto para generar y validar claves y certificados.

El otro problema que tuve que resolver con un marco es el acceso a los recursos de todo el sistema, especialmente los puertos. Por ejemplo, un marco de servidor web proporcionaría formas para que otros snap inyecten su API de servicio web y puntos finales a través de proxy inverso en el marco que ejecuta el servidor web.

Me dijeron en IRC que estoy abusando del concepto de marco, pero estos dos problemas surgen a menudo en mi escritorio.

Fuente: https://lists.ubuntu.com/archives/snappy-app-devel/2015-November/000442.html

cinista
fuente
1
Para aclarar, ninguno de estos realmente existe ahora, ¿verdad? ¿Estos son planes y probablemente quisiste decir "se manejarán" en lugar de "se manejarán" en la primera línea?
muru
Técnicamente, ambos existen. Sé que ya hay al menos un marco de Docker, y que ya hay enlaces para algunas bibliotecas incluidas con ubuntu-core que aprovechan las aplicaciones instaladas. Sin embargo, no tengo idea de cuán avanzado está cualquiera; Simplemente estoy explicando los detalles técnicos de las soluciones.
cinista
1
Estas no son formas ingeniosamente manejadas, solo ideas supuestamente inteligentes. Por ejemplo, todavía no hay documentación oficial sobre cómo se implementa el primero, solo un artículo de Phoronix que apunta a una charla, que es un enlace inactivo por cierto.
bviktor
3

No creo que las instantáneas comprueben qué dependencias ya están instaladas. Solo incluye todas sus dependencias y tiempo de ejecución (que es en parte la razón por la cual el complemento de LibreOffice es de 287 MB y el flatpak es de aproximadamente 200 MB).

Los snaps incluyen casi todo lo que el software necesita para ejecutarse. No creo que se comparta nada entre las instantáneas.

Sin embargo, cuando se actualiza un complemento, solo descargará las dependencias que son nuevas, y no todo el complemento.

Frederik Baetens
fuente
2

Se requiere una aclaración adicional sobre la forma en que el empaquetado instantáneo maneja las dependencias compartidas.

Los snaps incluyen casi todo lo que el software necesita para ejecutarse. No creo que se comparta nada entre las instantáneas.

Esta declaración en una de las respuestas es parcialmente cierta, sin embargo, todos los paquetes de complemento instalados, excepto el núcleo, dependen de dos paquetes, uno de los cuales es el núcleo.

  1. snapd : que se instala por defecto en 16.04 en adelante y también se puede instalar en 14.04.

  2. core    : (el complemento de núcleo) que se descarga e instala automáticamente cuando se instala el primer paquete de complemento instalado

Todos los paquetes de complemento, excepto el núcleo, dependen del núcleo. Si hay algún problema con el complemento central, algunas o todas las otras instantáneas no funcionarán. Un problema con el complemento central se puede solucionar de las siguientes dos maneras.

  1. Actualice el complemento central. Incluso si esto no funciona, los resultados de ejecutar el siguiente comando proporcionarán información adicional que ayudará a resolver el problema.

    sudo snap refresh core  
    
  2. Desinstale el complemento central y todos los paquetes de complemento y luego vuelva a instalarlos.

    sudo snap remove core snap-package1 snap-package2  
    sudo snap install core snap-package1 snap-package2
    
karel
fuente