portable services
Depuis la v239 (2018) de Systemd, est introduit la
notion de Portable Services.
En quoi cela va nous interesser?
Isolation
- Il est possible de donner accès à une partie du système de fichiers
du host via
BindPaths=etBindReadOnlyPaths=, pour y stocker des datas dites "dynamiques", ressemblant aux volumes surDocker.
Pour le reste, le service estchroot. - Si le service est compromis, les accès au système sont restreints.
- Pour les mises à jour, on
detachl'image.rawde la version précédente du service, et onattachla nouvelle version!
C'est tout!
Pas besoin de MAJ le système, votre démon est indépendant du système sur lequel il s'execute!. Vous pouvez MAJ le système sans impact sur le service, et inversement!
Il va donc être possible d'avoir par exemple un dossier /srv/startpage/
contenant:
.r--r--r-- root root 5.7 MB Thu Jan 1 01:00:01 1970 startpage_1.1.0.raw
.r--r--r-- root root 5.7 MB Thu Jan 1 01:00:01 1970 startpage_1.2.0.raw
.r--r--r-- root root 5.7 MB Thu Jan 1 01:00:01 1970 startpage_1.3.0.raw
et pouvoir upgrade le service dans le temps, et rollback sur l'image d'avant en cas de problème.
Reproductibilité
- On package notre démon dans une image
.raw. Cette image embarque le service et toutes ses dépendances. Peu importe la distribution, il se comportera de la même manière. - Nix sait construire des images Portable Services via pkgs.portableService.
Léger
- C'est plus léger que
docker(pas de surcouche / isolation réseau).
Pour quelles limites?
Lorsque l'on commence à vouloir faire discuter plusieurs services,
docker compose (ou similaire) va s'imposer naturellement pour continuer
de bosser en isolation, avec reproductibilité.