Beryl::Jail
Génération de jails FreeBSD « thin » en RAW jail.conf (zéro dépendance) :
une appli web = une jail, base FreeBSD PARTAGÉ monté en lecture seule
(nullfs RO) + couche rw propre à l'appli (/etc, /var, /home, /usr/local…).
Depuis l'intérieur, ../ ne sort pas de la jail → une appli compromise ne
peut pas lire les secrets d'une autre appli ni du host.
Ce module ne contient QUE les générateurs PURS (testables sans FreeBSD) :
contenu du jail.conf.d/<nom>.conf, du fstab nullfs, et l'allocation IP.
La partie impérative (build du base, montages, start) vit dans la primitive
jail-create.
Constants
Répertoires du base montés en LECTURE SEULE (nullfs) dans chaque thin
jail. Tout le reste (/etc, /var, /tmp, /root, /home, /usr/local, /dev…)
est rw et propre à la jail. rescue = binaires de secours statiques.
Répertoires rw créés dans le dataset de la jail (skeleton). /usr/local et /home reçoivent l'appli ; /etc et /var sont peuplés depuis le base.
Class methods
Script (sh) qui build/rafraîchit le BASE PARTAGÉ d'une thin jail via
pkgbase (pkg --rootdir), réutilisable pour PATCHER le base (re-run =
upgrade). Mirroir d'install-pkgbase.sh : ABI + clés depuis le host. Au
re-run, pkg install -U met à jour → toutes les jails (nullfs RO) suivent
après redémarrage. PUR (renvoie le script) → testable.
Contenu de /etc/jail.conf.d/<name>.conf. path = racine de la jail,
ip = alias loopback. sshd/services internes via /bin/sh /etc/rc.
IP loopback dédiée à une jail (sur l'interface lo1). index 1..254.
Bloc nginx (host) qui reverse-proxy server_name vers la jail (loopback).
TLS géré séparément (recettes nginx/acme). PUR → testable.
Script shell (sh) qui crée le SKELETON rw d'une thin jail : répertoires rw
- points de montage RO (vides, pour les nullfs), /etc et /var peuplés depuis le base, lo1 cloné, jail_enable. Idempotent (mkdir -p, sysrc -q). PUR (renvoie le script) → testable ; exécuté par la primitive jail-create.
Contenu du fstab nullfs (<path>.fstab) : monte chaque RO_DIR du base en
lecture seule dans la jail. Aligné en colonnes pour rester lisible.