
أداة تنسيق (orchestration) افتراضية KVM/QEMU تعريفية (Declarative) تستخدم ملفات compose بصيغة YAML. تدير مجموعات متعددة من الأجهزة الافتراضية (multi-VM stacks) مع cloud-init وSSH وتمرير PCI (PCI passthrough) والتحقق من الصور (image verification) دون الحاجة إلى libvirt أو XML.
Docker compose لـ KVM. قم بتعريف مكدسات متعددة من الأجهزة الافتراضية (VMs) في ملف YAML واحد. لا حاجة لـ libvirt، ولا XML، ولا لوحة تحكم موزعة.
الموقع والوثائق: https://zeroecco.github.io/holos/
الأساس هو جهاز افتراضي (VM)، ليس حاوية (container). يحصل كل مثيل عمل على حد النواة الخاص به، وطبقة 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.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
صفحات الإصدار تتضمن مجاميع SHA-256 وشهادات القطع الأثرية (artifact attestations) من GitHub لإثبات المصدر المُوقَّع. تحقق من كليهما قبل تثبيت الملفات الثنائية على المضيفات الإنتاجية.
أو ابنِ من المصدر:
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]
تشغيل جميع الخدمات
holos run [flags] <image> [-- cmd...] إقلاع جهاز افتراضي لمرة واحدة
holos down <project> إيقاف وإزالة مشروع
holos ps [-f holos.yaml] سرد المشاريع الجارية
holos start [-f holos.yaml] [svc] تشغيل خدمة موقوفة أو جميع الخدمات
holos stop [-f holos.yaml] [svc] إيقاف خدمة أو جميع الخدمات
holos console <project> [<inst>] توصيل وحدة التحكم التسلسلية
holos exec <project> [<inst>] [-- cmd...]
اتصال SSH داخل مثيل
holos logs <project> [<svc|inst>] عرض سجلات وحدة التحكم
holos inspect [-f holos.yaml] [project|instance]
فحص الحالة كـ JSON
holos validate [-f holos.yaml] التحقق من صحة ملف compose (--capacity/--network)
holos pull <image> سحب صورة سحابية
holos verify <image>|--all التحقق من مجاميع الصورة المخزنة مؤقتًا
holos images سرد الصور المتاحة
holos images lock -f holos.yaml [-o holos.images.lock]
كتابة ملف قفل صور المشروع
holos snapshots {create|list|rm|restore|export} ... إدارة لقطات الجذر
holos volumes [-f holos.yaml] [--json]
سرد وحدات التخزين المسماة
holos volumes rm <project> <volume> إزالة وحدة تخزين مسماة منفصلة
holos volumes export <project> <volume> <path>
تصدير وحدة تخزين مسماة منفصلة
holos volumes snapshot <project> <volume> <snapshot>
إنشاء لقطة لوحدة تخزين مسماة منفصلة
holos volumes snapshots <project> <volume>
سرد لقطات وحدة التخزين
holos volumes snapshot-rm <project> <volume> <snapshot>
إزالة لقطة وحدة تخزين
holos volumes snapshot-restore <project> <volume> <snapshot>
استعادة لقطة وحدة تخزين
holos volumes snapshot-export <project> <volume> <snapshot> <path>
تصدير لقطة وحدة تخزين
holos volumes resize [--shrink] <project> <volume> <size>
تغيير حجم وحدة تخزين مسماة منفصلة
holos devices [--gpu] سرد أجهزة PCI ومجموعات IOMMU
holos completion <bash|zsh|fish> طباعة سكريبت إكمال الصدفة
holos doctor [--json] فحص تبعيات المضيف
holos install [-f holos.yaml] [--system] [--enable]
تثبيت وحدة systemd
holos uninstall [-f holos.yaml] [--system]
إزالة وحدة systemd
holos import [vm...] [--all] [--xml file] [--connect uri] [-o file]
تحويل أجهزة virsh الافتراضية إلى holos.yaml
exec، تثبيت systemd، استيراد virsh، وdoctor.holos.yaml.ابدأ بالمثال الصغير لـ nginx:
holos up -f examples/alpine-nginx/holos.yaml
curl localhost:8080
holos down alpine-nginx
يتضمن دليل الأمثلة أيضًا توفير Dockerfile، تمرير GPU، ومكدس متعدد الخدمات يُظهر depends_on، والإعدادات المُولَّدة، والنسخ المكررة (replicas).
/dev/kvmqemu-system-x86_64qemu-imgcloud-localds، genisoimage، mkisofs، أو xorrisossh لـ holos exec وفحوصات الصحةشغّل holos doctor لفحص المضيف.
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 يفشل على macOSKVM هي ميزة نواة Linux. الملفات الثنائية على macOS مفيدة للتأليف والأوامر غير المتصلة، لكن holos up وholos run يجب تنفيذهما على مضيف KVM يعمل بنظام Linux.
holos ليس Kubernetes. لا يحاول حل العنقود متعدد المضيفات، أو الترحيل الحي، أو شبكات الخدمات (service meshes)، أو الشبكات التراكبية (overlay networks)، أو المجدولين (schedulers)، أو CRDs، أو إجماع لوحة التحكم.
الهدف هو جعل KVM عمليًا للمكدسات على مضيف واحد دون استيراد الشكل التشغيلي لـ Kubernetes.
مرخَّص بموجب رخصة Apache، الإصدار 2.0. راجع NOTICE للإسناد.