In che modo i pacchetti snap gestiscono le dipendenze condivise?


30

Il formato di snap packaging finalmente ci libera dall'inferno delle dipendenze consentendo a ciascun pacchetto di avere la propria copia delle dipendenze. Sono interessato ai dettagli tecnici su come funziona. Come gestisce:

  • scatta a seconda della versione di una libreria già installata tramite pacchetti deb per la versione corrente? Ignora la libreria installata?
  • diversi snap che specificano la stessa versione della stessa libreria? Fa la deduplicazione in qualche modo?
  • aggiornamenti alle librerie di base che potrebbero essere utilizzate da molti snap? OpenSSL viene in mente come un grande punto di dolore.

xdg-app ha qualcosa chiamato "runtime" :

Un concetto fondamentale in xdg-app è la divisione runtime / applicazione. Ogni app dipende da un runtime, che fornisce le librerie principali su cui si basa l'app. I runtime sono generalmente condivisi da molte applicazioni, ma un utente può avere più runtime installati contemporaneamente.

Sembra che nel caso di OpenSSL, farebbe parte del runtime nelle app xdg, quindi un aggiornamento di OpenSSL dovrebbe influire in modo trasparente su tutte le app xdg usando lo stesso runtime.

Risposte:


9

Le prime due situazioni sono gestite in modo intelligente.

Una delle caratteristiche interessanti di cui si parla è il supporto della deduplicazione per il contenuto all'interno dei pacchetti Snap. Gli snap vengono automaticamente deduplicati dei file comuni condivisi tra gli snap in base agli hash dei loro file. Ci sarebbe la deduplicazione sul livello del file system, la deduplicazione sui download di snap (con supporto del server) e forse la deduplicazione delle librerie mappate dal linker. La deduplicazione è un grande elemento di lavoro e probabilmente impiegherà un po 'di tempo per essere pienamente implementata, ma è comunque un obiettivo interessante.

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

Per quanto riguarda la terza situazione, hanno qualcosa di simile ai tempi di esecuzione che hai menzionato:

Esistono tre livelli che compongono una macchina scattante: il livello di sistema, fornito da Canonical, uno strato di framework che estendono il sistema di base prodotto dai fornitori in collaborazione con Canonical, e una serie di applicazioni scattanti, fornite direttamente dai fornitori. Aggiornare qualsiasi pezzo significa semplicemente usare la nuova versione di un'immagine di sola lettura. Il ripristino di una versione precedente è altrettanto semplice.

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

Non esiste ancora una buona documentazione che descriva i framework, principalmente perché sembrano ancora elaborare i confini di ciò che è un framework. Ecco un estratto dalla loro mailing list che potrebbe aiutare a chiarire le cose.

Sto sperimentando Frameworks per estendere essenzialmente il sistema di base Snappy con software e servizi che richiedono molti snap ma che non dovrebbero essere inclusi in ogni snap a causa di problemi di aggiornamento e dimensioni. Il miglior esempio che ho per questo, è il binario openssl. Molti snap hanno bisogno di questo per generare e validare chiavi e certificati.

L'altro problema che ho legato per risolvere con un framework è l'accesso a risorse di sistema, in particolare porte. Ad esempio, un framework di server Web fornirebbe altri modi per iniettare le API e gli endpoint del servizio Web tramite proxy inverso nel framework che esegue il server Web.

Mi è stato detto su IRC che sto abusando del concetto di framework, ma questi due problemi emergono spesso sulla mia scrivania.

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


1
Per chiarire, nessuno di questi esiste attualmente, giusto? Questi sono piani e probabilmente intendevi dire "verranno gestiti" anziché "gestiti" nella prima riga?
Muru,

Tecnicamente, entrambi esistono. So che esiste già almeno un framework docker e che ci sono già collegamenti per alcune librerie incluse in Ubuntu Core che le app installate traggono vantaggio. Non ho idea di quanto lontano sia comunque; Sto semplicemente spiegando i dettagli tecnici delle soluzioni.
cinico,

1
Questi non sono modi gestiti in modo intelligente, ma solo idee presumibilmente intelligenti. Ad esempio, ancora nessuna documentazione ufficiale su come il primo è effettivamente implementato, solo un articolo Phoronix che punta a un discorso, che è un collegamento morto tra l'altro.
bviktor il

3

Non penso che gli snap controllino quali dipendenze sono già installate. Include solo tutte le sue dipendenze e il runtime (motivo per cui lo snap di LibreOffice è 287 MB e il flatpak è di circa 200 MB).

Gli snap includono praticamente tutto ciò di cui il software ha bisogno per funzionare. Non penso che nulla venga condiviso tra gli snap.

Quando uno snap si aggiorna, tuttavia, scaricherà solo le dipendenze che sono nuove e non l'intero snap.


2

Ulteriori chiarimenti sono in ordine sul modo in cui la confezione snap gestisce le dipendenze condivise.

Gli snap includono praticamente tutto ciò di cui il software ha bisogno per funzionare. Non penso che nulla venga condiviso tra gli snap.

Questa affermazione in una delle risposte è parzialmente vera, tuttavia tutti i pacchetti di snap installati, ad eccezione dello snap di core, dipendono da due pacchetti, uno dei quali è lo snap di core.

  1. snapd - che è installato di default in 16.04 e versioni successive e può anche essere installato in 14.04.

  2. core    - (lo snap core) che viene scaricato e installato automaticamente quando viene installato il primo pacchetto snap installato

Tutti i pacchetti di snap ad eccezione del core stesso dipendono dallo snap di core. Se c'è qualcosa di sbagliato nello snap core, alcuni o tutti gli altri snap non funzioneranno. Un problema con lo snap core può essere risolto nei due modi seguenti.

  1. Aggiorna lo snap principale. Anche se non funziona, i risultati dell'esecuzione del comando seguente forniranno ulteriori informazioni che aiuteranno a risolvere il problema.

    sudo snap refresh core  
    
  2. Disinstallare lo snap core e tutti i pacchetti snap, quindi reinstallarli.

    sudo snap remove core snap-package1 snap-package2  
    sudo snap install core snap-package1 snap-package2
    
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.