Aller au contenu
English

createFirecrackerSandboxProvider

import { createFirecrackerSandboxProvider } from "@elie-laloum/outpost/providers/firecracker";

Crée un provider distant qui démarre une microVM Firecracker à partir de votre noyau, de votre système de fichiers racine et de votre périphérique TAP, puis joint l’invité par SSH. Il exige Linux avec /dev/kvm et un invité avec Node.js 24+, git, setsid et tar. Un provider exécute une VM à la fois ; release l’arrête et supprime sa copie privée du rootfs.

Exemple complet et règles détaillées.

  • optionsRequis
    FirecrackerOptions
    Ressources de démarrage hôtes, réseau TAP, accès SSH à l’invité, ressources et jailer optionnel. Des chemins ou valeurs invalides échouent avec le code configuration dès la création.
  • options.binaryRequis
    string
    Chemin hôte absolu de l’exécutable firecracker.
  • options.kernelRequis
    string
    Chemin hôte absolu de l’image du noyau invité.
  • options.rootfsRequis
    string
    Chemin hôte absolu de l’image du système de fichiers racine invité ; chaque VM démarre sur une copie privée.
  • options.tapRequis
    string
    Périphérique TAP hôte existant pour le réseau de l’invité, d’au plus 15 lettres, chiffres, points, tirets ou soulignés. Le provider le possède : il exécute donc une VM à la fois.
  • options.guestMacRequis
    string
    Adresse MAC de l’interface réseau de l’invité, en six paires hexadécimales.
  • options.bootArgsRequis
    string
    Arguments de démarrage du noyau transmis à Firecracker.
  • options.sshRequis
    { readonly host: string; readonly user: string; readonly identity: string; readonly knownHosts: string; readonly port?: number; readonly binary?: string; }
    Accès d’Outpost à l’invité : hôte, utilisateur, fichier d’identité, fichier known_hosts de confiance, port optionnel (22 par défaut) et binaire ssh.
  • options.rootOptionnel
    string | undefined
    Répertoire du dépôt dans l’invité, /workspace par défaut.
  • options.homeRequis
    string
    Home de l’agent dans l’invité ; il doit correspondre au HOME de l’utilisateur invité, sinon la vérification de démarrage n’aboutit jamais.
  • options.cpusOptionnel
    number | undefined
    vCPU de l’invité, 2 par défaut. Il ne limite pas le CPU hôte ; jailer.cpuQuotaUs le fait.
  • options.memoryMbOptionnel
    number | undefined
    Mémoire de l’invité en Mio, 2048 par défaut ; jailer.memoryMaxMb doit la dépasser.
  • options.bootDeadlineMsOptionnel
    number | undefined
    Délai accordé à l’invité pour répondre par SSH avec ses prérequis, 60000 par défaut. Au-delà, l’acquisition échoue avec le code timeout et la VM s’arrête.
  • options.variablesOptionnel
    Readonly<Record<string, string>> | undefined
    Variables d’environnement définies pour chaque commande de la sandbox, en valeurs littérales. Une clé aussi déclarée par l’agent échoue avec le code configuration.
  • options.jailerOptionnel
    { readonly binary: string; readonly directory: string; readonly cgroup: string; readonly uid: number; readonly gid: number; readonly cpuQuotaUs: number; readonly memoryMaxMb: number; readonly processes: number; } | undefined
    Lancement par le jailer Firecracker : binaire et chemins appartenant à root, parent cgroup v2 dédié avec les contrôleurs cpu, memory et pids activés, uid et gid non root, cpuQuotaUs par période de 100000 microsecondes (au moins 1000), memoryMaxMb supérieur à la mémoire invitée et processes (au moins 16). Outpost doit déjà tourner en root et n’appelle jamais sudo ; sans jailer, Firecracker tourne sous l’utilisateur appelant.

SandboxProvider

export declare function createFirecrackerSandboxProvider(
  options: FirecrackerOptions,
): SandboxProvider;