العودة إلى التحديثات
New releaseAug 14, 2026

holos v0.6.2

أداة تنسيق (orchestration) افتراضية KVM/QEMU تعريفية (Declarative) تستخدم ملفات compose بصيغة YAML. تدير مجموعات متعددة من الأجهزة الافتراضية (multi-VM stacks) مع cloud-init وSSH وتمرير PCI (PCI passthrough) والتحقق من الصور (image verification) دون الحاجة إلى libvirt أو XML.

مشاركة
holos

Docker compose لـ KVM. عرّف حزمًا متعددة الأجهزة الافتراضية في ملف YAML واحد. لا libvirt، ولا XML، ولا لوحة تحكم موزعة.

الموقع والتوثيق: https://zeroecco.github.io/holos/

الوحدة الأساسية هي جهاز افتراضي، وليس حاوية. كل نسخة من عبء العمل تحصل على حدود نواة خاصة بها، وطبقة qcow2 علوية، وبذرة cloud-init، ووصول SSH مُولَّد.

البدء السريع

يتطلب Linux + /dev/kvm. تعمل نسخ macOS على الأوامر غير المتصلة مثل validate وimport وimages وpull، لكن up وrun يحتاجان إلى مضيف KVM.

جهاز افتراضي واحد قابل للتخلص منه، بدون ملف compose:

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

حزمة خدمة واحدة يمكنك تنفيذ curl عليها. احفظها باسم 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

هذا جهاز افتراضي حقيقي يُقلع من صورة سحابية، ويثبّت حزمة، ويكتب إعدادات، ويُمرّر منفذًا من المضيف.

الاستخدام اليومي

داخل دليل مشروع:

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

استخدم اسم نسخة مثل web-0 عندما تكون للخدمة عدة نسخ متماثلة.

التثبيت

تُرفَق ملفات ثنائية مبنية مسبقًا مع كل إصدار على 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

تتضمن صفحات الإصدارات مجاميع تحقق SHA-256 وإثباتات أصناف GitHub (GitHub artifact attestations) لإثبات المصدر الموقّع. تحقق من كليهما قبل تثبيت الملفات التنفيذية على مضيفات الإنتاج.

أو قم بالبناء من المصدر:

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

المستندات

  • الموقع الإلكتروني: الصفحة الرئيسية والمستندات المعروضة.
  • دليل CLI: الأجهزة الافتراضية المؤقتة، وexec، وتثبيت systemd، واستيراد virsh، وdoctor.
  • ملف Compose: الخدمات، والأحجام، وفحوصات السلامة، والشبكات، وتمرير PCI، وتوفير Dockerfile، والإعدادات الافتراضية.
  • مخطط JSON: الإكمال والتحقق في المحرر لملف holos.yaml.
  • الأمثلة: حزم قابلة للتشغيل وقوالب مع شروحات بأسلوب README.
  • الميزات المفقودة: الفجوات ذات الأولوية التي تتوافق مع هدف holos المتمثل في compose على KVM لمضيف واحد.
  • التطوير: البناء، والاختبار، ومتطلبات المضيف، و عملية الإصدار.
  • سياسة الأمان: الإصدارات المدعومة والإبلاغ الخاص.
  • نموذج التهديد / التقوية: التحقق من الصور، وأذونات الحالة، والأقفال، والإرشادات التشغيلية.
  • المساهمة: البناء، والاختبار، والأسلوب، واصطلاحات طلبات السحب.

الأمثلة

ابدأ بمثال nginx الصغير:

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

يتضمن دليل الأمثلة أيضًا توفير Dockerfile، وتمرير GPU، وحزمة متعددة الخدمات تُظهر depends_on، والتكوين المُولَّد، والنسخ المتماثلة.

متطلبات المضيف

  • Linux مع /dev/kvm
  • qemu-system-x86_64
  • qemu-img
  • واحد من cloud-localds أو genisoimage أو mkisofs أو xorriso
  • برنامج OVMF / edk2-ovmf الثابت لـ UEFI أو تمرير PCI
  • ssh لـ holos exec وفحوصات السلامة

شغّل holos doctor للتحقق من المضيف.

استكشاف الأخطاء وإصلاحها

رفض الإذن عند فتح /dev/kvm

تحقق من id -nG وls -l /dev/kvm. على المضيفين حيث ينتمي الجهاز إلى مجموعة kvm، أضف مستخدمك باستخدام sudo usermod -aG kvm "$USER"، ثم سجّل الخروج وأعد الاتصال. تحتفظ الأصداف الموجودة بعضويتها القديمة في المجموعة. شغّل holos doctor مرة أخرى من الجلسة الجديدة.

إعادة تعيين SSH عند الإقلاع الأول

الفئات