virli/tutorial/devops/run-gistre.md

190 lines
4.8 KiB
Markdown
Raw Normal View History

2021-11-19 23:00:30 +00:00
## Lancement du module sur la machine cible
Mettons de côté le déploiement continu, pour nous concentrer sur la manière
dont nous allons pouvoir exécuter notre module de relevé de compteur Linky.
\
2022-02-24 19:43:43 +00:00
Le binaire de notre module se lance de la manière suivante :
2021-11-19 23:00:30 +00:00
<div lang="en-US">
```shell
42sh$ ./linky2influx --influx-host localhost --influx-username myuser \
--influx-password mypasswd /dev/ttyEnedis0
# or
42sh$ INFLUXDB_HOST=localhost INFLUXDB_USERNAME=myuser INFLUXDB_PASSWORD=mypasswd \
./linky2influx /dev/ttyEnedis0
```
</div>
`/dev/ttyEnedis0` est le périphérique correspondant à notre liaison série
vers le compteur. On considère qu'une règle `udev` a été écrite pour créer
l'entrée correspondante dans `/dev`.
\
L'objectif est d'établir la méthode qui sera la plus efficace pour
Électropcool, car elle devra sans doute demander à chacune des équipes de
2022-12-17 08:03:29 +00:00
réaliser le packaging des modules qu'elles maintiennent. Il faut pour cela
tester plusieurs solutions. Certaines peuvent sans doute déjà être éliminées car
inadaptées, c'est à vous de déterminer parmi les technologies d'empacketages
2021-11-19 23:00:30 +00:00
proposées, et celles que vous connaissez, lesquelles vous écartez d'emblée,
lesquelles vous souhaitez garder pour explorer davantage, et enfin laquelle
retient votre attention.
Vous êtes tenu de retenir au minimum 2 solutions distinctes (on considère que
les technologies listées sur la même lignes sont similaires).
2022-02-24 19:43:43 +00:00
La liste de technologies proposées est à la suivante :
2021-11-19 23:00:30 +00:00
- conteneur Docker ou podman,
- conteneur LXC (avec base alpine ou nu),
- conteneur OCI via runc,
- service systemd ou systemd-nspawn,
- packages `.ipk` via Yocto/Bitbake,
- package Nix,
- paquet Snap, FlatPack ou AppImage,
- [k3s](https://k3s.io/),
- ...
Les sections suivantes vous donneront une idée des éléments attendus pour chacun.
### Docker, podman, ...
Nous avons déjà un `Dockerfile` dans notre dépôt, vous avez juste à écrire un
script shell permettant de lancer le module, il doit bien évidemment avoir
accès au périphérique correspondant au compteur.
<div lang="en-US">
```
2022-12-17 08:03:29 +00:00
./docker/run.sh
2021-11-19 23:00:30 +00:00
```
</div>
### Conteneur LXC
LXC peut s'utiliser de multiple manière différentes, y compris avec des images
OCI. Choisissez la méthode qui vous semble la plus appropriée, il est attendu
au moins un script pour lancer notre conteneur, s'il est différent d'un
<div lang="en-US">
```shell
42sh# lxc-create --template linky2influx --name l2i && lxc-start -n l2i`.
```
</div>
<div lang="en-US">
```
2022-12-17 08:03:29 +00:00
./lxc/run.sh
2021-11-19 23:00:30 +00:00
```
</div>
En complément, vous pouvez inclure au dépôt de `linky2influx` le modèle
2022-02-24 19:43:43 +00:00
permettant de créer le conteneur LXC, ainsi qu'un exemple de configuration :
2021-11-19 23:00:30 +00:00
<div lang="en-US">
```
2022-12-17 08:03:29 +00:00
./linky2influx/lxc-scripts/template.sh
./linky2influx/lxc-scripts/sample.config
2021-11-19 23:00:30 +00:00
```
</div>
### Conteneur OCI via `runc`
`runc` a besoin d'un fichier `config.json` et éventuellement `runtime.json`. La
ligne de commande pour lancer `runc` n'est pas demandée, l'image OCI résultant
du `Dockerfile` sera utilisée et présente pour l'exécution.
### Service systemd ou systemd-nspawn
Le service `systemd` est redondant avec un système Yocto contenant `systemd`,
vous pourriez écrire le script `systemd` et profiter de l'utiliser dans votre
recette `bitbake`.
Un service basé sur `nspawn` peut par contre être potentiellement intéressant,
2022-02-24 19:43:43 +00:00
il pourra être intégré au dépôt :
2021-11-19 23:00:30 +00:00
<div lang="en-US">
```
2022-12-17 08:03:29 +00:00
./linky2influx/systemd/linky2influx.nspawn
2021-11-19 23:00:30 +00:00
```
</div>
### Yocto
Vous pourriez vouloir écrire une recette Bitbake pour créer et déployer le
module via un paquet `.ipk` ou similaire en fonction de votre configuration.
2022-02-24 19:43:43 +00:00
Écrivez la recette au sein de `meta-electropcool` :
2021-11-19 23:00:30 +00:00
<div lang="en-US">
```
2022-12-17 08:03:29 +00:00
./meta-electropcool/recipes-support/linky2influx/linky2influx_9999.bb
2021-11-19 23:00:30 +00:00
```
</div>
### Nix
L'expression Nix correspondant au paquet pourra être intégré au dépôt
<div lang="en-US">
```
2022-12-17 08:03:29 +00:00
./linky2influx/linky2influx.nix
2021-11-19 23:00:30 +00:00
```
</div>
Précisez ensuite dans un `README-nix.md` à côté, la manière dont vous souhaitez
utiliser le package Nix ensuite.
### Snap, Flatpack, AppImage
2022-02-24 19:43:43 +00:00
Intégrez au dépôt le fichier de description, par exemple :
2021-11-19 23:00:30 +00:00
<div lang="en-US">
```
2022-12-17 08:03:29 +00:00
./linky2influx/snapcraft.yaml
2021-11-19 23:00:30 +00:00
```
</div>
Il faudra également préciser avec un fichier `run.sh` la manière dont lancer
2022-02-24 19:43:43 +00:00
votre conteneur :
2021-11-19 23:00:30 +00:00
<div lang="en-US">
```
2022-12-17 08:03:29 +00:00
./{snap,flatpack}/run.sh
2021-11-19 23:00:30 +00:00
```
</div>
### k3s
2022-12-17 08:03:29 +00:00
Si vous connaissez déjà Kubernetes, vous pourriez vouloir écrire un *Chart*
Helm :
2021-11-19 23:00:30 +00:00
<div lang="en-US">
```
2022-12-17 08:03:29 +00:00
./k3s/linky2influx.yaml
2021-11-19 23:00:30 +00:00
```
</div>
2022-12-17 08:03:29 +00:00
### *Votre solution ici*
2021-11-19 23:00:30 +00:00
2022-12-17 08:03:29 +00:00
N'hésitez pas à apporter une autre solution originale, mais tout de même
adaptée à l'objectif, que celles qui seraient listées ici.
\
2021-11-19 23:00:30 +00:00
2022-12-17 08:03:29 +00:00
Commençons par appréhender la publication d'image Docker, que nous maîtrisons
plutôt bien normalement.
2021-11-19 23:00:30 +00:00
2022-12-17 08:03:29 +00:00
\newpage
## Déploiement via Docker