Le paquet snap est un nouveau format de paquet d'applications pour système Linux, adapté autant à l'IoT au Serveur ou au Poste de travail, fonctionnant aussi bien sur Debian, Fedora ou Ubuntu (entre autres). Decouvrez ce nouveau format d'applications, sont fonctionnement et ses opportunités.
Les paquets snaps « les paquets d’applications linux universels, nouvelle génération »
1. LES PAQUETS SNAPS
« Les paquets d’applications Linux universels, nouvelle génération »
«D’abord qui, ensuite quoi ! »
2. PRESENTATION
Prénom NOM : Vincent JOBARD
Surnom : Winael
Blog : https://winael.github.io
Email : vinzjobard@ubuntu.com
Wiki : https://wiki.ubuntu.com/Winael
@vinzjobard
vincent-jobard-26b046117
Vincent JOBARD
+Vincent JOBARD
3. Plan de la séance
I - Les snaps, qu’est-ce que c’est ?
II - Oui, mais qu’est-ce que cela nous apporte ?
III - Et comment ça marche ?
IV - Mais quels sont les avantages ?
V - Peut-on imaginer un système complet avec des snaps ?
VI - Quelle est la différence entre conteneurisation et
confinement ?
VII - Essayez snapd par vous-même
VIII - Questions fréquentes
IX - Vos questions
5. A L’ORIGINE
A l’origine
> Version 2.0 du paquet click développé pour l’univers mobile sous
Ubuntu
> Format de paquet conçu pour Snappy Ubuntu Core
> D’abord sur le Cloud (Décembre 2014)
> Puis sur l’Internet des objets (Courant 2015)
6. A L’ORIGINE
Pendant la Keynote d’UbuCon Summit en Janvier
2016, Mark Shuttleworth a annoncé l'arrivée des
snaps sur la version traditionnelle du poste de
travail pour Ubuntu 16.04 LTS.
Les snaps sur le poste de travail
Mark Shuttleworth, fondateur de Canonical et Ubuntu
7. ET MAINTENANT ?
> Le 14 juin, les snaps s’ouvrent au
monde Linux au travers du projet
snapcraft.io.
> Grâce aux efforts conjoints des développeurs
d’Ubuntu, d’Arch Linux, de Fedora, de Gentoo, et
de Debian, snapd est porté sur ces plateformes
> Le paquet d’installation snap devient un paquet d’application
Linux Universel, s’installant aussi bien sur de l’IdO, du poste de
travail, des serveurs ou du Cloud
9. LES PAQUETS LINUX TRADITIONNELS
> Durs à réaliser
> Des formats adaptés à chaque
“transporteurs” (distributions)
> Besoin de mainteneurs pour chaque
transporteurs, qui n’a pas forcément le
même contexte utilisateur
> Les projets en amont ne maîtrisent pas la
livraison des mises à jour
Ils sont...
10. PROBLEMES RENCONTRES
Avec les paquets Linux traditionnels
> Collusions (plusieurs paquets incluent le même
fichier dans des versions différentes)
> Incompatibilité des APIs, ou des comportements
entre les applications
11. > Lors de l’installation les paquets ont accès root à
l’ensemble des fichiers du système en lecture écriture
PROBLEMES RENCONTRES
Avec les paquets Linux traditionnels
TOUT LE SYSTÈME PEUT ÊTRE
ENDOMMAGÉ LORS D’UNE MISE A
JOUR
13. ET TECHNIQUEMENT ?
Un snap est une archive
squashfs :
> contenant du code et
des actifs
code du snap & actifs
(squashfs, monté-lié en lecture seule dans /snap/<nom-du-snap>/<version>)
$SNAP
> montée en lecture seule
(mises à jour
transactionnelles,
intégrité du contenu, …)
> offrant une compression
de 1 pour 3
14. ET TECHNIQUEMENT ?
Un snap peut offrir un ou
plusieurs services (démon,
interface en ligne de
commande, interface
graphique, …).
code du snap & actifs
(squashfs, monté-lié en lecture seule dans /snap/<nom-du-snap>/<version>)
$SNAP
code du snap & actifs
(squashfs, monté-lié en lecture seule dans /snap/<nom-du-snap>/<version>)
$SNAP
Service Service CLI GUI
Un snap est multi-
processus.
15. ET TECHNIQUEMENT ?
Un snap a accès à des
zones en lecture et
écriture :
> Des zones partagées par
l’ensemble des utilisateurs du
système, et seulement accessible
en écriture par root (pour les
services, par ex.)
code du snap & actifs
(squashfs, monté-lié en lecture seule dans /snap/<nom-du-snap>/<version>)
$SNAP
> Des zones utilisateur, et
seulement accessible en écriture
par l’utilisateur dans son propre
répertoire
> Certains chemins sont
versionnés, à chaque mise à jour,
les données sont copiées dans un
nouveau répertoire. Les autres
sont communs à toutes les
versions du snap
code du snap & actifs
(squashfs, monté-lié en lecture seule dans /snap/<nom-du-snap>/<version>)
$SNAP
Service Service CLI GUI
Zone d’écriture versionnée root
(pour les services)
$SNAP_DATA
Zone d’écriture versionnée user
$SNAP_USER_DATA
Zone d’écriture commune root
(pour les services)
$SNAP_COMMON
Zone d’écriture commune user
$SNAP_USER_COMMON
16. ET TECHNIQUEMENT ?
Chaque processus est isolé
des autres, donc par ex.,
chacun va avoir son propre
répertoire /tmp.
code du snap & actifs
(squashfs, monté-lié en lecture seule dans /snap/<nom-du-snap>/<version>)
$SNAP
code du snap & actifs
(squashfs, monté-lié en lecture seule dans /snap/<nom-du-snap>/<version>)
$SNAP
Service Service CLI GUI
code du snap & actifs
(squashfs, monté-lié en lecture seule dans /snap/<nom-du-snap>/<version>)
$SNAP
Service Service CLI GUI
Zone d’écriture versionnée root
(pour les services)
$SNAP_DATA
Zone d’écriture versionnée user
$SNAP_USER_DATA
Zone d’écriture commune root
(pour les services)
$SNAP_COMMON
Zone d’écriture commune user
$SNAP_USER_COMMON
Zone d’écriture versionnée root
(pour les services)
$SNAP_DATA
Zone d’écriture versionnée user
$SNAP_USER_DATA
Zone d’écriture commune root
(pour les services)
$SNAP_COMMON
Zone d’écriture commune user
$SNAP_USER_COMMON
/tmp
(par service et processus applicatif)
17. ET TECHNIQUEMENT ?
Certains accès sont
facultatifs (/home,
/dev/<devices>, ....) et
sont contrôlé par les
interfaces et les prises.
code du snap & actifs
(squashfs, monté-lié en lecture seule dans /snap/<nom-du-snap>/<version>)
$SNAP
Service Service CLI GUI
Zone d’écriture versionnée root
(pour les services)
$SNAP_DATA
Zone d’écriture versionnée user
$SNAP_USER_DATA
Zone d’écriture commune root
(pour les services)
$SNAP_COMMON
Zone d’écriture commune user
$SNAP_USER_COMMON
/tmp
(par service et processus
applicatif)
~
/dev/<device>
/sys
/
(from ubuntu-core snap)
/var/lib/snapd/hostfs
(/ from host)
Ils sont globalement isolés
du reste du système, et
ont un accès refusé.
18. ET TECHNIQUEMENT ?
Chaque snap peut être
mis à jour et annulé (y
compris les données!)
Indépendamment (et
même automatiquement
via le bilan de santé) !
code du snap & actifs
(squashfs, monté-lié en lecture seule dans /snap/<nom-du-snap>/<version>)
$SNAP
Service Service CLI GUI
Zone d’écriture versionnée root
(pour les services)
$SNAP_DATA
Zone d’écriture versionnée user
$SNAP_USER_DATA
Zone d’écriture commune root
(pour les services)
$SNAP_COMMON
Zone d’écriture commune user
$SNAP_USER_COMMON
/tmp
(par service et processus
applicatif)
~
/dev/<device>
/sys
/
(from ubuntu-core snap)
/var/lib/snapd/hostfs
(/ from host)
19. Comment les snaps
interagissent entre eux ?
snap applicatifsnap applicatif
zone d’écriture du
snap
zone d’écriture du
snap
Les applications sont confinées et isolées
snap applicatif
zone d’écriture du
snap
snap applicatif
zone d’écriture du
snap
A
(consomme)
B
(fournit)
plug slot
Les applications sont isolées via
AppArmor et SecComp. Elles ne
peuvent lire les fichiers des autres.
20. Comment les snaps
interagissent entre eux ?
snap applicatifsnap applicatif
zone d’écriture du
snap
zone d’écriture du
snap
Les applications sont confinées et isolées
snap applicatif
zone d’écriture du
snap
snap applicatif
zone d’écriture du
snap
A
(consomme)
B
(fournit)
plug slot
Le contrôle est fin :
> Les snaps peuvent avoir
plusieurs services et
commandes, partageant
le même système de
fichiers
> Les applications du même
composant peuvent
envoyer des signaux entre
les processus.
> Les snaps peuvent
demander et exposer des
interfaces claires et
définies, réutilisables par
d’autres snaps
21. Comment les snaps
interagissent entre eux ?
snap applicatifsnap applicatif
zone d’écriture du
snap
zone d’écriture du
snap
Les applications sont confinées et isolées
snap applicatif
zone d’écriture du
snap
snap applicatif
zone d’écriture du
snap
A
(consomme)
B
(fournit)
plug slot
Aucun script n’est exécuté
en tant que root lors de
l’installation ou de la
suppression !
23. LES AVANTAGES DES SNAPS
Pour VLC
VLC
Pour les développeurs :
> système d’empaquettement facile
> n’avoir à empaqueter qu’une seule fois
> avoir le contrôle de la livraison des versions
Pour les utilisateurs :
> bénéficient de la dernière version, quelles que soient la
distribution Linux utilisée parmis les suivantes.
24. LES AVANTAGES DES SNAPS
Pour NextCloud
Pour les développeurs :
> Réduction de la fragmentation des versions des
distributions, ils contrôlent le délai de livraison des
mises à jour.
> Ils contrôlent leurs dépendances, ce qui est expédié est
ce que l'utilisateur obtiendra.
> Les snaps ont une isolation d'application (la boîte de
Nextcloud avec des applications de tiers installées).
Pour les utilisateurs :
> Ils obtiennent la version exacte et le contexte que les
développeurs ont testé.
> Ils réduisent leur Time-To-Market pour produire la
NextCloud Box.
> Processus robuste de mise à jour avec possibilité de
retour arrière
25. LES AVANTAGES DES SNAPS
Pour RocketChat
Pour les développeurs :
> Mise à disposition de versions différentes dans les
canaux de mise à jour sélectionnables par l'utilisateur
(edge, beta, candidate, stable ...)
> Peut être installé sur plusieurs systèmes, comme la
boîte Nextcloud !
Pour les utilisateurs :
> Ils peuvent facilement devenir des bêta-testeurs
> Peut s’installer comme n’importe quel autre paquet,
via la ligne de commande ou la logithèque. La
configuration de RocketChat passe de 3h à moins d’une
minute !
27. Ubuntu Core
Un système complet basé sur les snaps
> L’intégrité du code est assurée par des archives
squashfs signées en lecture seule
Une manière moderne de construire une
distribution Linux
Architecture système modulaire en Snaps
Snap Noyau
Snap Base
Snap Gadget
Snap
ApplicatifSnap applicatif
Snap
Applicatif
Snap Interface de contenu
> Pas besoin de reconstruire ou de re-flasher une
image entière pour une seul changement applicatif
28. Quelle est la différence
entre conteneurisation
et confinement ?
29. Docker/LXD vs Snaps
Docker et LXD fournissent de la conteneurisation :
> Processus unique ou propre contrôle de processus
Snap fournit du confinement :
> Noyau partagé, propre système de fichiers/réseau
> Les paquets des applications s’exécutent comme n’importe
quel autre processus du système
> Noyau/réseau partagé, système de fichiers propre
> Processus gérés par des outils traditionnels
> Pas de routage réseau compliqué
> Les fichiers sont directement accessibles
> Prise en charge de plusieurs utilisateurs
LXD
snap
33. Mise à jour, changement de version et désinstallation d’un snap
Démo 3
34. Un snap plus complexe : face-detection-demo
Démo 4 (partie 1)
> Installation de face-detection-demo
> L’interface web est disponible à l’adresse
http://localhost:8080
> On peut activer la caméra soit dans
l’interface, soit via la commande face-
detection-demo --enable-camera
> La commande communique (via un socket
Unix) avec notre service, qui est branché à la
caméra et écoute le réseau.
35. Un snap plus complexe : face-detection-demo
Démo 4 (partie 2)
> Mise à jour vers la dernière version à tester
> C’est cassé et nos données sont corrompues!
> Il faut donc faire un retour arrière
> Testons la nouvelle version :
http://localhost:8080
36. Un snap plus complexe : face-detection-demo
Démo 4 (partie 3)
> Retour arrière vers la dernière version fonctionnelle
> Tout est revenu à la normal
> Re-testons la nouvelle version :
http://localhost:8080
38. QUESTIONS DE BASES SUR
LES SNAPS
QUESTIONS FRÉQUENTES
> Les snaps remplacent-elles les paquet rpm ou deb ?
Non (pour le système de base).
> La même snap fonctionnera-t-elle sur n’importe quelle
distribution supportant les snaps ?
Oui.
> Les snaps ont-elles un lien avec les paquets click
d’Ubuntuphone ?
Oui, c’est en quelque sorte les paquets clicks 2.0.
> Les snaps sont-elles totalement isolées ou supportent-elles
les bibliothèques partagées ?
Il existe un système d'interface à relier au système.
Les bibliothèques partagées sont possibles via des interfaces de contenu,
privées pour les développeurs.
> Comment les snaps gèrent-elles les systèmes multi
utilisateurs ?
Les snaps sont installées globalement pour tous les utilisateurs.
Chaque utilisateur dispose de données utilisateur distinctes.
39. QUESTIONS SUR LES DÉPÔTS
ET MAGASINS DE SNAPS
QUESTIONS FRÉQUENTES
> Un magasin tiers est-il possible ?
Oui, il peut y avoir un magasin de marque (hébergé par Canonical)
ou la mise en place d’un magasin open source tiers.
> Les snaps peuvent-elles être installées sans passer par un
dépôt ou un magasin ?
Oui, les snaps peuvent être installées localement
(en fonction des possibilités offertes par votre appareil).
> Comment les espaces de noms sont-ils gérés avec les snaps ?
Les conflits de nom de snaps sont-ils possibles ?
Les espaces de noms sans suffixe sont réservés à la gestion officielle de projets.
Les snaps non officielles doivent utiliser un espace de noms basé sur un suffixe.
40. QUESTIONS SUR LA
CONSTRUCTION DES SNAPS
QUESTIONS FRÉQUENTES
> Quel outils pour créer un snap ?
Il y a un outil : Snapcraft.
- Vous pouvez écrire un fichier snapcraft.yaml et construire votre snap
- Ou vous pouvez déverser votre logiciel déjà construit dans un répertoire, y
ajouter des métadonnées et exécuter "snapcraft snap dir/"
On peut aussi utiliser des usines logicielles :
- Launchpad
- https://build.snapcraft.io/ + https://github.com (Ne prends pas en compte les
PPAs)
> Est-ce qu’il est possible pour de multiples développeurs,
comme par exemple une équipe de gérer le même snap ?
Oui.
> Comment la sécurité des bibliothèques tierces est-elle gérée ?
Les bibliothèques sont exécutées comme votre application, et donc confinées.
Le système des “parties” de snapcraft avec des parties venant du nuage vous permet
de reconstruire facilement votre logiciel et de le tester avec de nouveaux correctifs de
sécurité avant de les publier.