
Strumento dichiarativo di orchestrazione di VM KVM/QEMU utilizzando file compose YAML. Gestisce stack multi-VM con cloud-init, SSH, PCI passthrough e verifica delle immagini senza libvirt o XML.
Docker compose per KVM. Definisci stack multi-VM in un unico file YAML. Niente libvirt, niente XML, nessun piano di controllo distribuito.
Sito web e documentazione: https://zeroecco.github.io/holos/
La primitiva è una VM, non un contenitore. Ogni istanza di carico di lavoro ha il proprio confine del kernel, overlay qcow2, seed cloud-init e accesso SSH generato.
Richiede Linux +
/dev/kvm. Le build macOS eseguono comandi offline comevalidate,import,imagesepull, mauperunnecessitano di un host KVM.
Una VM usa e getta, nessun file compose:
holos run alpine
holos exec <printed-project-name>
holos down <printed-project-name>
Uno stack a servizio singolo che puoi curl. Salva come 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
Questa è una vera VM che avvia un cloud image, installa un pacchetto, scrive configurazione e inoltra una porta host.
I binari precompilati sono allegati a ogni release GitHub:
TAG=v0.6.1
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
Le pagine di release includono checksum SHA-256 e attestazioni di artefatti GitHub per una provenienza firmata. Verifica entrambi prima di installare i binari su host di produzione.
Oppure compila dai sorgenti:
go build -o bin/holos ./cmd/holos
go test ./...
bin/holos doctor
holos up [-f holos.yaml] [--locked] [--lockfile path] [--lock-timeout 5m|--no-wait]
avvia tutti i servizi
holos run [flags] <image> [-- cmd...] avvia una VM singola
holos down <project> ferma e rimuovi un progetto
holos ps [-f holos.yaml] elenca i progetti in esecuzione
holos start [-f holos.yaml] [svc] avvia un servizio fermo o tutti i servizi
holos stop [-f holos.yaml] [svc] ferma un servizio o tutti i servizi
holos console <project> [<inst>] collega console seriale
holos exec <project> [<inst>] [-- cmd...]
SSH in un'istanza
holos logs <project> [<svc|inst>] mostra i log della console
holos inspect [-f holos.yaml] [project|instance]
ispeziona lo stato come JSON
holos validate [-f holos.yaml] valida il file compose (--capacity/--network)
holos pull <image> scarica un cloud image
holos verify <image>|--all verifica i checksum delle immagini in cache
holos images elenca le immagini disponibili
holos images lock -f holos.yaml [-o holos.images.lock]
scrivi il lockfile delle immagini del progetto
holos snapshots {create|list|rm|restore|export} ... gestisci snapshot root
holos volumes [-f holos.yaml] [--json]
elenca i volumi nominati
holos volumes rm <project> <volume> rimuovi un volume nominato distaccato
holos volumes export <project> <volume> <path>
esporta un volume nominato distaccato
holos volumes snapshot <project> <volume> <snapshot>
esegui snapshot di un volume nominato distaccato
holos volumes snapshots <project> <volume>
elenca snapshot di un volume
holos volumes snapshot-rm <project> <volume> <snapshot>
rimuovi uno snapshot di un volume
holos volumes snapshot-restore <project> <volume> <snapshot>
ripristina uno snapshot di un volume
holos volumes snapshot-export <project> <volume> <snapshot> <path>
esporta uno snapshot di un volume
holos volumes resize [--shrink] <project> <volume> <size>
ridimensiona un volume nominato distaccato
holos devices [--gpu] elenca dispositivi PCI e gruppi IOMMU
holos completion <bash|zsh|fish> genera script di completamento shell
holos doctor [--json] verifica le dipendenze host
holos install [-f holos.yaml] [--system] [--enable]
installa un'unità systemd
holos uninstall [-f holos.yaml] [--system]
rimuovi l'unità systemd
holos import [vm...] [--all] [--xml file] [--connect uri] [-o file]
converti VM virsh in holos.yaml
exec, installazione systemd, importazione da virsh
e doctor.holos.yaml.Inizia con il piccolo esempio nginx:
holos up -f examples/alpine-nginx/holos.yaml
curl localhost:8080
holos down alpine-nginx
La directory degli esempi include anche provisioning con Dockerfile, passthrough GPU
e uno stack multi-servizio che mostra depends_on, configurazione generata e
repliche.
/dev/kvmqemu-system-x86_64qemu-imgcloud-localds, genisoimage, mkisofs o xorrisossh per holos exec e healthcheckEsegui holos doctor per controllare l'host.
kex_exchange_identification: read: Connection reset by peer di solito significa
che cloud-init sta ancora rigenerando le chiavi host e riavviando sshd. holos exec
attende fino a 60s per impostazione predefinita, ma i primi avvii molto lenti potrebbero
richiedere un altro tentativo o holos exec -w 5m <project>.
Login incorrectLa console seriale potrebbe tentare il login automatico prima che cloud-init crei
l'utente. Attendi cloud-init ... finished nel log della console, quindi usa
holos exec. Le cloud image generalmente non contengono una password per la console
e holos non ne aggiunge una.
up fallisce su macOSKVM è una funzionalità del kernel Linux. I binari macOS sono utili per la scrittura e
i comandi offline, ma holos up e holos run devono essere eseguiti su un host
KVM Linux.
holos non è Kubernetes. Non tenta di risolvere clustering multi-host, migrazione live, service mesh, reti overlay, scheduler, CRD o quorum del piano di controllo.
L'obiettivo è rendere KVM utilizzabile per stack a host singolo senza importare la forma operativa di Kubernetes.
Concesso in licenza sotto [Apache License, Version 2.0](./LICENSE. Vedi
NOTICE per le attribuzioni.