Retour aux mises à jour
New releaseAug 14, 2026

holos v0.6.2

Outil déclaratif d'orchestration de VM KVM/QEMU utilisant des fichiers de composition YAML. Gère des piles multi-VM avec cloud-init, SSH, PCI passthrough et vérification d'image sans libvirt ni XML.

Partager
holos

Docker compose pour KVM. Définissez des piles multi-VM dans un seul fichier YAML. Pas de libvirt, pas de XML, pas de plan de contrôle distribué.

Site web et documentation : https://zeroecco.github.io/holos/

La primitive est une VM, pas un conteneur. Chaque instance de charge de travail dispose de sa propre frontière de noyau, de son overlay qcow2, de sa graine cloud-init et d'un accès SSH généré.

Démarrage rapide

Nécessite Linux + /dev/kvm. Les builds macOS exécutent des commandes hors ligne comme validate, import, images et pull, mais up et run nécessitent un hôte KVM.

Une VM jetable, sans fichier compose :

holos run alpine
holos exec <printed-project-name>
holos down <printed-project-name>

Une stack mono-service que vous pouvez interroger avec curl. Enregistrez-la sous holos.yaml :

name: hello

services:
  web:
    image: ubuntu:noble
    ports:
      - "8080:80"
    cloud_init:
      packages:
        - nginx
      write_files:
        - path: /var/www/html/index.html
          content: "hello from holos\n"
      runcmd:
        - systemctl restart nginx
holos up
curl localhost:8080
holos down hello

C'est une vraie VM qui démarre une image cloud, installe un paquet, écrit la configuration et transfère un port de l'hôte.

Utilisation quotidienne

Dans un répertoire de projet :

holos exec web       # open a guest shell
holos logs           # read project boot logs
holos stop web       # keep its disk
holos start web
holos up --dry-run   # preview configuration changes
holos help exec      # command syntax and options

Utilisez un nom d'instance tel que web-0 lorsqu'un service possède plusieurs réplicas.

Installation

Des binaires précompilés sont joints à chaque version GitHub :

TAG=v0.6.3
ASSET=holos_${TAG#v}_Linux_x86_64.tar.gz
BASE=https://github.com/zeroecco/holos/releases/download/$TAG
curl -LO $BASE/$ASSET
curl -LO $BASE/checksums.txt
grep " $ASSET$" checksums.txt | sha256sum -c -
gh attestation verify $ASSET --repo zeroecco/holos
sudo tar -xz -C /usr/local/bin -f $ASSET holos
holos version
holos doctor

Les pages de publication incluent des sommes de contrôle SHA-256 et des attestations d'artefacts GitHub pour une provenance signée. Vérifiez les deux avant d'installer des binaires sur des hôtes de production.

Ou compilez depuis les sources :

go build -o bin/holos ./cmd/holos
go test ./...
bin/holos doctor

CLI

holos up [-f holos.yaml] [--dry-run] [--recreate] [--strict] [--locked] [--lockfile path] [--lock-timeout 5m|--no-wait]
                                     start all services
holos run [flags] <image> [-- cmd...] launch a one-off VM
holos down <project>                 stop and remove a project
holos ps [-f holos.yaml]             list running projects
holos start [-f holos.yaml] [svc]    start a stopped service or all services
holos stop [-f holos.yaml] [svc]     stop a service or all services
holos console <project> [<inst>]     attach serial console
holos exec <project> [<inst>] [-- cmd...]
                                     SSH into an instance
holos logs <project> [<svc|inst>]    show console logs
holos inspect [-f holos.yaml] [project|instance]
                                     inspect state as JSON
holos validate [-f holos.yaml] [--strict]
                                     validate compose file (--capacity/--network)
holos pull <image>                   pull a cloud image
holos verify <image>|--all           verify cached image checksums
holos images                         list available images
holos images lock -f holos.yaml [-o holos.images.lock]
                                     write project image lockfile
holos snapshots {create|list|rm|restore|export} ... manage root snapshots
holos volumes [-f holos.yaml] [--json]
                                     list named volumes
holos volumes rm <project> <volume>  remove a detached named volume
holos volumes export <project> <volume> <path>
                                     export a detached named volume
holos volumes snapshot <project> <volume> <snapshot>
                                     snapshot a detached named volume
holos volumes snapshots <project> <volume>
                                     list volume snapshots
holos volumes snapshot-rm <project> <volume> <snapshot>
                                     remove a volume snapshot
holos volumes snapshot-restore <project> <volume> <snapshot>
                                     restore a volume snapshot
holos volumes snapshot-export <project> <volume> <snapshot> <path>
                                     export a volume snapshot
holos volumes resize [--shrink] <project> <volume> <size>
                                     resize a detached named volume
holos devices [--gpu]                list PCI devices and IOMMU groups
holos completion <bash|zsh|fish>      print shell completion script
holos doctor [--json]                check host dependencies
holos install [-f holos.yaml] [--system] [--enable]
                                     install a systemd unit
holos uninstall [-f holos.yaml] [--system]
                                     remove the systemd unit
holos import [vm...] [--all] [--xml file] [--connect uri] [-o file]
                                     convert virsh VMs into holos.yaml

Docs

  • Site web : page d'accueil et documentation rendue.
  • Guide CLI : VM ad hoc, exec, installation systemd, import virsh, et doctor.
  • Fichier Compose : services, volumes, healthchecks, réseau, passthrough PCI, provisionnement Dockerfile et valeurs par défaut.
  • Schéma JSON : complétion et validation dans l'éditeur pour holos.yaml.
  • Exemples : stacks exécutables et modèles avec explications de style README.
  • Fonctionnalités manquantes : lacunes priorisées qui correspondent à l'objectif compose KVM mono-hôte de holos.
  • Développement : build, tests, prérequis de l'hôte et processus de release.
  • Politique de sécurité : versions prises en charge et signalement privé.
  • Modèle de menace / durcissement : vérification des images, permissions d'état, verrous et recommandations opérationnelles.
  • Contribution : build, tests, style et conventions de PR.

Exemples

Commencez par le petit exemple nginx :

holos up -f examples/alpine-nginx/holos.yaml
curl localhost:8080
holos down alpine-nginx

Le répertoire examples inclut également le provisionnement Dockerfile, le passthrough GPU et une pile multi-services qui illustre depends_on, la configuration générée et les replicas.

Prérequis de l'hôte

  • Linux avec /dev/kvm
  • qemu-system-x86_64
  • qemu-img
  • L'un de cloud-localds, genisoimage, mkisofs ou xorriso
  • Firmware OVMF / edk2-ovmf pour UEFI ou le passthrough PCI
  • ssh pour holos exec et les healthchecks

Exécutez holos doctor pour vérifier l'hôte.

Dépannage

Permission denied à l'ouverture de /dev/kvm

Catégories