Modes de paiement Abuse

Comment créer un paquet Snap Ubuntu 16

11.06.2021, 19:26

Snap est une technologie développée par Canonical pour faciliter l'installation de logiciels dans la distribution Ubuntu. Il s'agit d'un développement relativement récent. Le développement de Snap s'est étalé sur plusieurs années, mais ce n'est qu'avec la sortie d'Ubuntu 16.04 qu'il est apparu dans un état tel qu'il est prêt à être utilisé par le plus grand nombre.

Le principal avantage de Snap est la possibilité d'installer des programmes sans dépendances. Toutes les bibliothèques nécessaires se trouvent déjà dans le paquetage du programme et rien n'est demandé au système pour le faire fonctionner. Lors de la mise à jour, l'utilisateur doit mettre à jour un paquet Snap sans apporter de modifications au système et, en cas de défaillance ou d'erreur, il peut revenir à la version précédente. Sur le web, les utilisateurs se disputent souvent pour savoir si la technologie snap est vraiment bonne ou si elle devrait être abandonnée au profit des paquets deb. Le temps et les tests nous le diront. Dans la suite de cet article, nous examinerons le processus de création des paquets snap. La création de ces paquets est un peu plus facile que celle des paquets deb.

Création de paquets snap dans Ubuntu 16.04

Pour créer des paquets Snap, nous allons utiliser un outil spécial appelé Snapcraft. Il s'agit de l'outil officiel de création de paquets snap, qui permet au développeur d'empaqueter des programmes afin de construire les fichiers nécessaires dans tout le système. Snapcraft vous permet non seulement de copier des fichiers, mais aussi de télécharger le code source et de construire le programme.

Voyons maintenant comment créer des paquets instantanés en prenant l'exemple de l'application Samplenote.

Tout d'abord, installez Snapcraft. Pour obtenir la dernière version, ajoutez un PPA à notre système :

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

Maintenant, mettez à jour la liste des paquets et installez le programme :

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

Lorsque l'installation de Snapcraft est terminée, nous pouvons passer à l'obtention du code source du programme. Tout d'abord, téléchargez les sources depuis GitHub et décompressez-les :

$ 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

Comme le programme n'a pas besoin d'être compilé, notre tâche est un peu plus facile. Allez dans le dossier contenant le programme et initialisez l'environnement de construction Snapcraft à cet endroit :

$ cd Simplenote-linux-x64
$ snapcraft init

Après avoir exécuté la dernière commande, le fichier snapcraft.yml apparaîtra dans le dossier. En éditant ce fichier, nous allons configurer le processus de création de notre paquet snap. Nous aurons besoin d'un fichier avec le contenu suivant :

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

Les quatre premières lignes contiennent des informations sur le paquet lui-même, le nom du programme, la version et une description courte et complète.

Commande - il s'agit de la commande pour démarrer le programme, nous utiliserons ensuite le script warpper, car nous devons spécifier des variables d'environnement supplémentaires.

Plugs - il s'agit des interfaces qui peuvent être utilisées par le programme. Les programmes snap travaillent dans un environnement isolé, d'où ils ne peuvent pas accéder au matériel et aux données personnelles. Pour que notre programme fonctionne correctement, il doit donner accès aux interfaces opengl, unity7 et réseau.

Vous pouvez voir les interfaces disponibles et les programmes qui les utilisent en exécutant la commande :

$ snap interfaces

Dans la section parties, vous devez spécifier les fichiers du programme. Plus précisément, ce que Snapcraft doit faire lors de la création d'un paquet. Comme nous n'avons pas besoin de compiler quoi que ce soit, nous utilisons le plugin copy pour copier les fichiers. Les fichiers qui doivent être copiés sont listés dans la section files. Il ne s'agit pas seulement de fichiers exécutables, mais aussi de toutes les bibliothèques nécessaires, afin que le programme obtienne tous les composants dont il a besoin.

Le format de l'entrée est le suivant :

system_file: snap_package_file_path

Il existe une entrée non standard :

resources*: resources

Le caractère générique * permet de copier l'ensemble du répertoire. Pour éviter de copier tous les fichiers du système, il existe une option dans la section site-packages pour indiquer au programme quels paquets doivent être installés dans le paquet snap, dans notre cas il s'agit de libnss3, fontconfig-config-config et gnome-themes-standard.

Pour voir quelles sont les bibliothèques utilisées par le programme, vous pouvez utiliser la commande :

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)

L'important est que ces bibliothèques sont livrées avec le programme, nous devons donc les spécifier dans le fichier de configuration snapcraft.yaml. Toutes les autres bibliothèques sont disponibles sur le système et seront détectées automatiquement par snapcraft.

Ensuite, créons le fichier 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" "$@"

C'est très simple, il s'agit d'un script Bash. Définissez les chemins pour les polices, et dites au programme où chercher les bibliothèques afin que libnote.so et libffmpeg.so soient trouvés avec succès. La dernière ligne démarre simplenote.

La prochaine chose à faire est de rendre ce fichier exécutable :

$ chmod +x wrapper

Pour lancer la construction du paquetage, exécutez :

$ snapcraft

La construction peut prendre un certain temps, et une fois qu'elle est terminée, vous pouvez installer le paquetage :

$ sudo snap install simplenote_1.0.1_amd64.snap

Vous pouvez utiliser la commande habituelle pour exécuter le programme :

$ simplenote

Le programme est maintenant installé. Vous pouvez utiliser exactement la même méthode de création de paquets snap pour emballer vos applications.