
holos v0.6.3
أداة تنسيق (orchestration) افتراضية KVM/QEMU تعريفية (Declarative) تستخدم ملفات compose بصيغة YAML. تدير مجموعات متعددة من الأجهزة الافتراضية (multi-VM stacks) مع cloud-init وSSH وتمرير PCI (PCI passthrough) والتحقق من الصور (image verification) دون الحاجة إلى libvirt أو XML.
Docker compose لـ KVM. عرّف حزم متعددة الأجهزة الافتراضية في ملف YAML واحد. بدون libvirt، بدون XML، بدون لوحة تحكم موزعة.
الموقع والتوثيق: https://zeroecco.github.io/holos/
الوحدة الأساسية هي الجهاز الافتراضي (VM)، وليس الحاوية. كل نسخة من عبء العمل تحصل على حدود نواة خاصة بها، وطبقة 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
هذا جهاز افتراضي حقيقي يُقلع من صورة سحابية، ويثبّت حزمة، ويكتب إعدادات، ويُمرّر منفذ المضيف.
التثبيت
الملفات التنفيذية الجاهزة مرفقة بكل إصدار على 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 للمصنوعات (artifact attestations) لإثبات المصدر الموقّع. تحقق من كليهما قبل تثبيت الملفات التنفيذية على مضيفات الإنتاج.
أو ابنِ من المصدر:
go build -o bin/holos ./cmd/holos
go test ./...
bin/holos doctor
واجهة سطر الأوامر (CLI)
holos up [-f holos.yaml] [--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] 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 أحادي المضيف.
- التطوير: البناء، والاختبار، ومتطلبات المضيف، وعملية الإصدار.
- سياسة الأمان: الإصدارات المدعومة والإبلاغ الخاص.
- نموذج التهديد / التقوية: التحقق من الصور، وأذونات الحالة، والأقفال، والإرشادات التشغيلية.
- المساهمة: البناء، والاختبار، والأسلوب، واتفاقيات طلبات السحب (PR).
الأمثلة
ابدأ بمثال nginx الصغير:
holos up -f examples/alpine-nginx/holos.yaml
curl localhost:8080
holos down alpine-nginx
يتضمن دليل الأمثلة أيضًا تزويد Dockerfile، وتمرير GPU،
وحزمة متعددة الخدمات تُظهر depends_on، والإعدادات المُولَّدة،
والنسخ المتماثلة (replicas).
متطلبات المضيف
- Linux مع
/dev/kvm qemu-system-x86_64qemu-img- أحد الأدوات
cloud-localdsأوgenisoimageأوmkisofsأوxorriso - برنامج OVMF / edk2-ovmf الثابت لـ UEFI أو تمرير PCI
sshلـholos execوفحوصات الصحة
شغّل holos doctor للتحقق من المضيف.
استكشاف الأخطاء وإصلاحها
إعادة تعيين SSH عند الإقلاع الأول
kex_exchange_identification: read: Connection reset by peer عادةً يعني
أن cloud-init لا يزال يعيد توليد مفاتيح المضيف ويعيد تشغيل sshd. ينتظر holos exec
حتى 60 ثانية افتراضيًا، لكن عمليات الإقلاع الأولى البطيئة جدًا قد تحتاج إلى محاولة أخرى أو
holos exec -w 5m <project>.
وحدة التحكم تُظهر Login incorrect
قد تحاول وحدة التحكم التسلسلية تسجيل الدخول التلقائي قبل أن ينشئ cloud-init المستخدم.
انتظر ظهور cloud-init ... finished في سجل وحدة التحكم، ثم استخدم holos exec.
الصور السحابية عمومًا لا تأتي بكلمة مرور لوحدة التحكم، وholos لا
يضيف واحدة.
فشل up على macOS
KVM ميزة في نواة Linux. ملفات macOS التنفيذية مفيدة للتأليف والأوامر
غير المتصلة، لكن holos up وholos run يجب أن يُنفَّذا على مضيف
Linux KVM.
أهداف غير مقصودة
holos ليس Kubernetes. إنه لا يحاول حل التجميع متعدد المضيفين، أو الترحيل الحي، أو شبكات الخدمات (service meshes)، أو الشبكات العلوية (overlay networks)، أو المجدولات، أو CRDs، أو نصاب لوحة التحكم.
الهدف هو جعل KVM عمليًا لحزم أحادية المضيف دون استيراد الشكل التشغيلي لـ Kubernetes.
الترخيص
مرخّص بموجب رخصة Apache، الإصدار 2.0. راجع
NOTICE لحقوق النسب.