Metodi di pagamento Abuse

Come creare un pacchetto Snap Ubuntu 16

11.06.2021, 19:26

Snap è una tecnologia sviluppata da Canonical per facilitare l'installazione di software nella distribuzione Ubuntu. È uno sviluppo relativamente recente. Lo sviluppo di Snap è durato diversi anni, ma solo con il rilascio di Ubuntu 16.04 è apparso in uno stato in cui è pronto per l'uso da parte delle masse.

Il vantaggio principale di Snap è la possibilità di installare programmi senza dipendenze. Tutte le librerie necessarie sono già presenti nel pacchetto con il programma e non è richiesto nulla al sistema per eseguirlo. Al momento dell'aggiornamento l'utente deve aggiornare un pacchetto Snap senza apportare modifiche al sistema e, in caso di guasti ed errori, può eseguire il rollback del pacchetto alla versione precedente. Sul web ci si imbatte spesso in discussioni tra gli utenti per stabilire se la tecnologia snap sia davvero valida o se debba essere abbandonata a favore dei pacchetti deb. Ma saranno il tempo e i test a dirlo. In questo articolo vedremo il processo di creazione dei pacchetti snap. La loro creazione è un po' più semplice rispetto a quella dei pacchetti deb.

Creare pacchetti snap in Ubuntu 16.04

Per creare i pacchetti snap utilizzeremo uno strumento speciale chiamato Snapcraft. Si tratta dello strumento ufficiale per la creazione di pacchetti snap, che consente allo sviluppatore di pacchettizzare i programmi per creare i file necessari in tutto il sistema. Snapcraft consente non solo di copiare i file, ma anche di scaricare il codice sorgente e di costruire il programma.

Vediamo quindi come creare pacchetti snap utilizzando come esempio l'applicazione Samplenote.

Innanzitutto, installate Snapcraft. Per ottenere l'ultima versione, aggiungete un PPA al nostro sistema:

$ sudo add-apt-repository ppa:snappy-dev/tools

Ora aggiornate l'elenco dei pacchetti e installate il programma:

$ sudo apt-get update
$ sudo apt-get install snapcraft

Una volta completata l'installazione di Snapcraft, possiamo passare a ottenere il codice sorgente del programma. Per prima cosa, scaricare i sorgenti da GitHub e decomprimerli:

$ wget https://github.com/Automattic/simplenote-electron/releases/download/v1.0.1/Simplenote-linux-x64.1.0.1.tar.gz
$ tar xvzf Simplenote-linux-x64.1.0.1.tar.gz

Poiché il programma non ha bisogno di essere compilato, il nostro compito è un po' più semplice. Andare nella cartella con il programma e inizializzare l'ambiente di compilazione Snapcraft:

$ cd Simplenote-linux-x64
$ snapcraft init

Dopo aver eseguito l'ultimo comando, nella cartella apparirà il file snapcraft.yml. Modificando il file, configuriamo il processo di creazione del nostro pacchetto snap. Avremo bisogno di un file con il seguente contenuto:

name: simplenote
version: 1.0.1
summary: The simplest way to keep notes.
description: The simplest way to keep notes. Light, clean, and free.
apps:
simplenote:
command: usr/bin/wrapper
plugs:
- unity7
- opengl
- network
parts:
simplenote:
plugin: copy
stage-packages:
- libnss3
- fontconfig-config
- gnome-themes-standard
files:
Simplenote: Simplenote
wrapper: usr/bin/wrapper
icudtl.dat: icudtl.dat
snapshot_blob.bin: snapshot_blob.bin
natives_blob.bin: natives_blob.bin
resources*: resources
libnode.so: usr/lib/x86_64-linux-gnu/libnode.so
libffmpeg.so: usr/lib/x86_64-linux-gnu/libffmpeg.so

Le prime quattro righe sono informazioni sul pacchetto stesso, il nome del programma, la versione e una descrizione breve e completa.

Command - questo è il comando per avviare il programma; in seguito utilizzeremo lo script warpper, perché dobbiamo specificare variabili d'ambiente aggiuntive.

Plugs - sono le interfacce che possono essere utilizzate dal programma. Il punto è che i programmi snap lavorano in un ambiente isolato, dal quale non possono accedere all'hardware e ai dati personali. Affinché il nostro programma funzioni correttamente, deve avere accesso alle interfacce opengl, unity7 e di rete.

È possibile vedere le interfacce disponibili e i programmi che le utilizzano eseguendo il comando:

$ snap interfaces

Nella sezione parti è necessario specificare i file del programma. In particolare, ciò che snapcraft deve fare quando crea un pacchetto. Poiché non è necessario compilare nulla, si utilizza il plugin copy per copiare i file. I file che devono essere copiati sono elencati nella sezione file. Non ci sono solo i file eseguibili, ma anche tutte le librerie necessarie, in modo che il programma ottenga tutti i componenti di cui ha bisogno.

Il formato della voce è il seguente:

system_file: snap_package_file_path

C'è una voce non standard:

resources*: resources

Il carattere jolly * consente di copiare l'intera directory. Per evitare di copiare tutti i file dal sistema, nella sezione site-packages c'è un'opzione che indica al programma quali pacchetti devono essere installati nel pacchetto snap; nel nostro caso si tratta di libnss3, fontconfig-config-config e gnome-themes-standard.

Per vedere quali librerie utilizza il programma, si può usare il comando:

ldd Simplenote | grep Simplenote
libnode.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libnode.so (0x00007f05fb477000)
libffmpeg.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libffmpeg.so (0x00007f05f61ec000)

La cosa importante è che queste librerie vengono fornite con il programma, quindi è necessario specificarle nel file di configurazione snapcraft.yaml. Tutte le altre librerie sono disponibili sul sistema e saranno rilevate automaticamente da snapcraft.

Quindi, creiamo il file wrapper:

!/bin/sh
export FONTCONFIG_PATH=$SNAP/etc/fonts
export FONTCONFIG_FILE=$SNAP/etc/fonts/fonts.conf
export XDG_DATA_HOME=$SNAP/usr/share
export LD_LIBRARY_PATH=$SNAP_LIBRARY_PATH:$SNAP/usr/lib/x86_64-linux-gnu/
exec "$SNAP/Simplenote" "$@"

È semplice: uno script Bash. Impostiamo i percorsi per i font e diciamo al programma dove cercare le librerie in modo che libnote. so e libffmpeg.so vengano trovate con successo. L'ultima riga avvia simplenote.

La prossima cosa da fare è rendere questo file eseguibile:

$ chmod +x wrapper

Per avviare la creazione del pacchetto, eseguire:

$ snapcraft

La compilazione potrebbe richiedere un po' di tempo e, una volta completata, è possibile installare il pacchetto:

$ sudo snap install simplenote_1.0.1_amd64.snap

È possibile utilizzare il solito comando per eseguire il programma:

$ simplenote

Ora il programma è installato. È possibile utilizzare lo stesso metodo di creazione dei pacchetti snap per pacchettizzare le applicazioni.