L’auteur a choisi Electronic Frontier Foundation pour recevoir un don dans le cadre du programme Write for DOnations.
L’un des plus grands défis du développement d’applications est l’étape finale de la distribution du produit fini à vos utilisateurs ou clients. De nombreuses méthodes de déploiement d’applications existantes manquent d’intuitivité et de sécurité, ou ne prévoient pas de méthodes pour mettre à jour automatiquement une application une fois qu’elle a été installée.
Snap est un format moderne de packaging d’application avec de puissantes fonctions de sandboxing et de sécurité, y compris l’isolation du système de fichiers, les mises à jour automatiques et la gestion intégrée des dépendances. Les applications Snap, connues sous le nom de Snaps, peuvent être téléchargées et installées en utilisant un programme en ligne de commande, tel que apt
ou yum
. Snap est pré-installé sur Ubuntu, ce qui signifie que les applications Snap ont un large public.
Dans ce tutoriel, vous allez créer une application Snap et la publier sur le Snap Store.
Pour suivre ce tutoriel, vous aurez besoin de :
Un serveur Ubuntu 18.04 configuré en suivant la Configuration initiale du serveur avec Ubuntu 18.04, y compris un utilisateur sudo non root.
Une application que vous souhaitez packager et diffuser en tant que Snap. Il peut s’agir d’une application complexe que vous avez créée, d’un projet open source commun ou d’un simple programme « Hello World ». Si vous n’avez pas encore d’application, l’étape 1 de ce tutoriel vous expliquera comment créer un programme Hello World dans Go.
Un compte sur Snapcraft Developer Dashboard.
Une fois que tout cela est prêt, connectez-vous à votre serveur en tant qu’utilisateur non root pour commencer.
Tout d’abord, vous devez préparer votre application pour le packaging en tant qu’application Snap en vous assurant que tous les éléments requis sont disponibles dans un seul répertoire.
Commencez par créer un répertoire pour votre Snap et entrez dans celui-ci :
- mkdir ~/your-snap
- cd ~/your-snap
Ensuite, si vous avez déjà une application, placez une copie complète de son code source dans le répertoire que vous venez de créer. Le processus varie considérablement en fonction de l’application exacte que vous packagez, mais si le code source est stocké dans un dépôt Git, vous pouvez exécuter la commande git init
pour initialiser un référentiel dans le répertoire et en extraire tout le code pertinent.
Si vous n’avez pas encore d’application que vous aimeriez packager, vous pouvez créer un programme Hello World à utiliser à la place. Si vous souhaitez en savoir plus sur la rédaction de ce programme avec Go, consultez le tutoriel Comment rédiger votre premier programme dans Go.
Pour écrire le programme, créez d’abord un fichier Go et ouvrez-le à l’aide de votre éditeur de texte préféré :
- nano helloworld.go
Ensuite, ajoutez le code suivant au fichier :
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
Puis, enregistrez et quittez le fichier.
Si vous n’avez pas installé Go, vous pouvez le faire en utilisant la commande suivante :
- sudo apt install golang-go
Une fois Go installé, vous pouvez exécuter votre nouveau programme pour vérifier qu’il fonctionne :
- go run helloworld.go
Vous verrez la sortie suivante :
OutputHello, world!
Vous avez préparé votre application à être packagée en tant que Snap. Ensuite, vous allez installer le logiciel nécessaire pour commencer le processus de packaging.
Au cours de cette étape, vous allez télécharger et installer Snapcraft, l’outil officiel de packaging des applications Snap. Snapcraft est disponible sur le Snap Store, qui est intégré par défaut dans Ubuntu. Cela signifie que vous pouvez installer Snapcraft à partir de la ligne de commande en utilisant la commande snap
.
La commande snap
est équivalente à la commande apt
, mais vous pouvez l’utiliser pour installer des logiciels depuis le Snap Store, plutôt que des packages depuis les dépôts Apt.
Pour installer Snapcraft, exécutez la commande suivante :
- sudo snap install snapcraft --classic
Vous utilisez l’argument de commande --classic
pour que Snapcraft s’installe sans les fonctionnalités strictes de sandboxing que les Snaps utilisent normalement. Snapcraft nécessite cet argument car il a besoin d’un accès plus privilégié à votre système pour packager les applications de manière fiable.
Une fois Snapcraft installé, vous verrez ce qui suit :
Outputsnapcraft 3.9.8 from Canonical✓ installed
Enfin, vous pouvez revérifier l’installation de Snapcraft en exécutant :
- snapcraft --version
Cela affichera une sortie semblable à :
Outputsnapcraft, version 3.9.8
Maintenant que vous avez installé Snapcraft, vous pouvez commencer à définir la configuration et les métadonnées de votre application Snap.
Au cours de cette étape, vous commencerez à définir la configuration, la structure et les métadonnées de votre application Snap.
Commencez par vous assurer que vous travaillez toujours dans le répertoire de votre application Snap :
- cd ~/your-snap
Ensuite, créez et modifiez le fichier snapcraft.yaml
en utilisant votre éditeur de texte préféré :
- nano snapcraft.yaml
Vous utiliserez le fichier snapcraft.yaml
pour stocker toute la configuration de votre application Snap, y compris le nom, la description et la version, ainsi que les paramètres liés à la gestion des dépendances et au sandboxing.
Commencez par définir le nom, le résumé, la description et le numéro de version de votre application :
name: your-snap
summary: A summary of your application in 78 characters or less.
description: |
A detailed description of your application.
The description can have multiple lines.
version: '1.0'
Le nom de votre Snap doit être unique si vous souhaitez le publier sur le Snap Store. Vérifiez si d’autres applications ne portent pas déjà le même nom en faisant une recherche sur le Snap Store.
Ensuite, vous pouvez définir la ou les commandes que vous souhaitez associer à votre application. Cela permettra à votre Snap d’être utilisé directement depuis la ligne de commande Bash comme une commande normale.
Ajoutez les éléments suivants à votre fichier snapcraft.yaml
:
. . .
apps:
your-snap-command:
command: your-snap
your-snap-command
est le nom de la commande que vous voulez définir. Par exemple, vous pouvez utiliser la commande helloworld
pour exécuter votre programme Hello World.
Vous utilisez command: your-snap
pour indiquer à Snapcraft ce qu’il doit faire lorsque la commande de l’application est exécutée. Dans le cas du programme Hello World, vous utiliserez la valeur helloworld
pour référencer le fichier helloworld.go
, ce qui permettra à Snapcraft d’exécuter votre programme.
Il en résulte l’exemple de configuration suivant :
apps:
helloworld:
command: helloworld
Si le nom de la commande correspond exactement au nom du Snap, vous pourrez l’exécuter directement depuis la ligne de commande. Si la commande ne correspond pas au nom du Snap, la commande sera automatiquement préfixée par le nom du Snap. Par exemple, helloworld.command1
.
Enfin, vous pouvez définir les parties ou parts qui composent votre application Snap. Les applications Snap sont composées de plusieurs parties, qui sont tous les composants de votre application. Dans de nombreux cas, il n’y a qu’une seule partie, qui est l’application elle-même.
Chaque partie a un plugin associé. Par exemple, pour les composants de votre application écrits en Ruby, le plugin ruby
est utilisé, et pour les composants écrits en Go, le plugin go
est utilisé.
Vous pouvez utiliser la commande Snapcraft list-plugins
pour identifier le ou les bons plugins pour votre application :
- snapcraft list-plugins
Il en résultera une liste semblable à ce qui suit :
Outputant catkin-tools conda dump gradle make nil python rust
autotools cmake crystal go kbuild maven nodejs qmake scons
catkin colcon dotnet godeps kernel meson plainbox-provider ruby waf
Les plugins les plus courants sont ceux des langages de programmation courants, tels que Go, Rust, Ruby ou Python.
Une fois que vous avez identifié les bons plugins pour votre application, vous pouvez commencer à ajouter la configuration parts
à votre fichier snapcraft.yaml
:
. . .
parts:
your-snap:
plugin: plugin-name
source: .
Vous utilisez le paramètre de configuration source
pour spécifier le chemin relatif vers le code source de votre application. Habituellement, il s’agit du même répertoire que le fichier snapcraft.yaml
lui-même, de sorte que la valeur source
est un point (.
).
Remarque : si votre composant d’application comporte des dépendances qui sont nécessaires à sa construction ou à son exécution, vous pouvez les spécifier à l’aide des attributs build-packages
et stage-packages
. Les noms de dépendances spécifiés seront alors automatiquement récupérés dans le gestionnaire de packages par défaut de votre système.
Par exemple :
parts:
your-snap:
plugin: plugin-name
source: .
build-packages:
- gcc
- make
stage-packages:
- libcurl4
Certains plugins Snapcraft ont leurs propres options spécifiques qui peuvent être nécessaires pour votre application, il est donc utile de consulter les pages du manuel correspondant à votre plugin :
- snapcraft help plugin-name
Dans le cas des applications Go, vous devez également préciser le chemin go-importpath
. Pour la configuration Hello World, cela donne l’exemple de configuration suivant :
parts:
helloworld:
plugin: go
source: .
go-importpath: helloworld
Vous pouvez laisser votre fichier snapcraft.yaml
ouvert pour ajouter une configuration supplémentaire à l’étape suivante.
Vous avez défini la configuration de base pour votre application Snap. Ensuite, vous allez configurer les aspects sécurité et sandboxing de votre application.
Les applications Snap sont conçues pour fonctionner dans un environnement sécurisé par un sandbox (bac à sable). Dans cette étape, vous allez donc configurer le sandboxing pour votre Snap. Tout d’abord, vous devrez activer le sandboxing pour votre application, connu dans Snapcraft sous le nom de confinement
.
Ajoutez les éléments suivants à votre fichier snapcraft.yaml
:
. . .
confinement: strict
Cela permettra de mettre votre application en sandboxing, l’empêchant d’accéder à Internet, à d’autres Snaps en cours d’exécution ou au système hôte lui-même. Toutefois, dans la plupart des cas, les applications doivent pouvoir communiquer en dehors de leur sandbox, par exemple lorsqu’elles doivent accéder à Internet ou lire/écrire dans le système de fichiers.
Ces autorisations, connues sous le nom d’interfaces dans Snapcraft, peuvent être accordées à votre application Snap en utilisant des plugs. Grâce aux plugs, vous pouvez avoir un contrôle très précis sur le sandbox de votre application, pour lui donner l’accès qu’elle requiert et rien de plus (principe de moindre privilège).
Les interfaces exactes requises varient en fonction de votre application. Voici quelques-unes des interfaces les plus courantes :
audio-playback
- Permet la sortie audio/la lecture de sons.audio-record
- Permet l’entrée/enregistrement audio.camera
- Permet l’accès aux webcams connectées.home
- Permet l’accès aux fichiers non cachés dans votre répertoire de basenetwork
- Permet l’accès au réseau/à Internet.network-bind
- Permet de lier les ports pour qu’ils fonctionnent comme un service en réseau.system-files
- Permet d’accéder à l’ensemble du système de fichiers de la machine hôte.La liste complète des interfaces disponibles se trouve dans la documentation de Snapcraft sous Supported Interfaces (Interfaces prises en charge).
Une fois que vous avez identifié toutes les interfaces requises pour votre application, vous pouvez commencer à les attribuer à des plugs
dans votre fichier snapcraft.yaml
.
L’exemple de configuration suivant permettra à l’application d’accéder au réseau et au répertoire de base des utilisateurs :
. . .
plugs:
your-snap-home:
interface: home
your-snap-network:
interface: network
Enregistrez et fermez votre fichier
Le nom du plug doit être un nom descriptif pour aider les utilisateurs à identifier l’objectif du plug.
Vous avez activé le sandboxing pour votre Snap et configuré certains plugs pour accorder un accès limité aux ressources du système. Ensuite, vous finirez de construire votre application Snap.
Maintenant que vous avez écrit toute la configuration requise pour votre Snap, vous pouvez procéder à sa construction et tester le package Snap localement.
Si vous avez suivi ce tutoriel en utilisant un programme Hello World comme application, votre fichier snapcraft.yaml
complet ressemblera maintenant à ce qui suit :
name: helloworld
summary: A simple Hello World program.
description: |
A simple Hello World program written in Go.
Packaged as a Snap application using Snapcraft.
version: '1.0'
confinement: strict
apps:
helloworld:
command: helloworld
parts:
helloworld:
plugin: go
source: .
go-importpath: helloworld
plugs:
helloworld-home:
interface: home
helloworld-network:
interface: network
Pour construire votre application Snap, exécutez la commande snapcraft
depuis le répertoire de votre Snap :
- snapcraft
Snapcraft lancera alors automatiquement une machine virtuelle (VM) et commencera à construire votre Snap. Une fois terminé, Snapcraft se fermera et vous verrez quelque chose de semblable à ce qui suit :
OutputSnapped your-snap_1.0_amd64.snap
Vous pouvez maintenant installer votre Snap localement afin de vérifier qu’il fonctionne :
- sudo snap install your-snap.snap --dangerous
L’argument de commande --dangerous
est nécessaire car vous installez un Snap local qui n’a pas été signé.
Outputyour-snap 1.0 installed
Une fois le processus d’installation terminé, vous pouvez lancer votre Snap en utilisant la commande qui lui est associée. Par exemple :
- helloworld
Dans le cas de l’exemple du programme Hello World, le résultat serait le suivant :
OutputHello, world!
Vous pouvez également consulter la politique de sandboxing de votre Snap pour vous assurer que les autorisations attribuées ont été correctement accordées :
- snap connections your-snap
Il en résultera une liste de plugs et d’interfaces, semblable à celle qui suit :
Outputsnap connections your-snap
Interface Plug Slot Notes
home your-snap:your-snap-home :home -
network your-snap:your-snap-network :network -
Au cours de cette étape, vous avez construit votre Snap et l’avez installé localement pour vérifier qu’il fonctionne. Ensuite, vous allez publier votre Snap sur le Snap Store.
Maintenant que vous avez construit et testé votre application Snap, il est temps de la mettre en ligne sur le Snap Store.
Commencez par vous connecter à votre compte de développeur Snap en utilisant l’application de ligne de commande Snapcraft :
- snapcraft login
Suivez les instructions pour entrer votre adresse e-mail et votre mot de passe.
Ensuite, vous devez enregistrer le nom de l’application sur le Snap Store :
- snapcraft register your-snap
Une fois que vous avez enregistré le nom Snap, vous pouvez pousser le package Snap construit sur le store :
- snapcraft push your-snap.snap
Vous verrez une sortie semblable à ce qui suit :
OutputPreparing to push 'your-snap_1.0_amd64.snap'.
Install the review-tools from the Snap Store for enhanced checks before uploading this snap.
Pushing 'your-snap_1.0_amd64.snap' [===================================================================================================] 100%
Processing...|
Ready to release!
Revision 1 of 'your-snap' created.
À chaque fois que vous poussez un package sur le Snap Store, le numéro de révision est incrémenté, en commençant à « 1 ». Cela vous aide à identifier les différents builds de votre Snap.
Enfin, vous pouvez diffuser votre Snap au public :
- snapcraft release your-snap revision-number channel
Si c’est la première fois que vous publiez sur le Snap Store, le numéro de révision sera 1
. Vous pouvez également choisir entre les canaux stable
, candidate
, beta
et edge
, si vous avez plusieurs versions de votre application à différents stades de développement.
Par exemple, la commande suivante lancera la révision 1
du Snap Hello World sur le canal stable
:
- snapcraft release helloworld 1 stable
Vous verrez une sortie semblable à ce qui suit :
OutputTrack Arch Channel Version Revision
latest amd64 stable 1.0 1
candidate ^ ^
beta ^ ^
edge ^ ^
The 'stable' channel is now open.
Vous pouvez désormais rechercher votre application sur le Snap Store et l’installer sur n’importe lequel de vos appareils.
Lors de cette dernière étape, vous avez téléchargé votre package Snap sur le Snap Store et l’avez mis à disposition du public.
Dans cet article, vous avez configuré et construit une application Snap, puis l’avez mise à disposition du public via le Snap Store. Vous avez maintenant les connaissances de base nécessaires pour maintenir votre application et en créer de nouvelles.
Si vous souhaitez découvrir d’autres Snaps, vous pouvez parcourir l’ensemble du Snap Store. Vous pouvez également consulter la documentation de référence YAML de Snapcraft pour en savoir plus et identifier des attributs supplémentaires pour votre configuration Snap.
Enfin, si vous souhaitez approfondir le développement de Snaps, nous vous conseillons de découvrir et d’implémenter des Snap Hooks, qui permettent aux Snaps de réagir de manière dynamique aux changements du système tels que les mises à jour ou les ajustements de la politique de sécurité.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!