ملاحظات الإصدار لـ Vapor
يتتبع هذا السجل التحديثات والميزات الجديدة وإصلاح الأخطاء الخاصة بـ وكيل مضيف Vapor.
الإصدار 3.3.2 (أكتوبر 2026)
يسد هذا الإصدار ثغرة أمنية في تسجيل الدخول بمفتاح SSH موجودة في جميع الإصدارات السابقة، لذا رقِّ كل مضيف. كما يعيد قبول رفع صور VDI وVHDX، ويتيح للمضيفات ذات النواة الأقدم إعادة تعيين هوية نسخ الآلات الافتراضية قيد التشغيل، ويمنع فشل عمليات الاستنساخ الطويلة في نهايتها.
الأمان:
- كان تسجيل الدخول بمفتاح SSH يقبل مفاتيح لم يأذن بها المستخدم. في Vapor 3.3.1 وجميع الإصدارات السابقة، كان تسجيل الدخول بمفتاح SSH (
POST /api/v1/auth/challengeثمPOST /api/v1/auth/challenge/verify) يتحقق من التوقيع مقابل المفتاح العام المُرسل مع الطلب، لكنه لا يتحقق من أن هذا المفتاح من المفاتيح المأذون بها للمستخدم (~/.ssh/authorized_keys). لذا كان بإمكان أي شخص يصل إلى واجهة Vapor API أن يسجّل الدخول بصفة أي مستخدم على المضيف، بما في ذلكroot. لا يقبل Vapor 3.3.2 إلا المفاتيح التي أذن بها المستخدم. رقِّ كل مضيف إلى 3.3.2، وإلى ذلك الحين اسمح بالوصول إلى واجهة Vapor API من الشبكات الموثوقة فقط.
إصلاحات:
- صار رفع صور VDI وVHDX ممكنًا من جديد. كان Vapor 3.3.1 يرفضها، مع أن إجراء Convert في مستعرض التخزين يعرض كلتيهما صيغتَي مصدر. ارفعها وحوّلها كما في السابق.
- استنساخ الآلات الافتراضية قيد التشغيل على مضيفات نواتها أقدم من 5.15. على Ubuntu 20.04 (النواة 5.4)، لم يكن ممكنًا إعادة تعيين هوية نسخة من آلة افتراضية قيد التشغيل بضيف حديث مثل Debian 13 (السبب
unmountable)، فكانت النسخة تبدأ عادةً بلا شبكة. ولم يتأثر استنساخ الآلات المتوقفة. صار التثبيت الجديد على Ubuntu 20.04 يمنح libguestfs appliance الخاص بـ Vapor نواة 5.15 دون تغيير نواة المضيف. على المضيف المُرقّى في مكانه، أعدّ ذلك يدويًا: راجع Virtual Machines. - لم تعد عمليات الاستنساخ الطويلة تفشل في نهايتها. يجدّد Vapor اتصاله بـ libvirt كل 30 دقيقة (منذ 3.0.0). وكان الاستنساخ أو النشر من قالب الذي لا يزال ينسخ الأقراص أو يعيد تعيين هوية الضيف عند حدوث ذلك قد يفشل بعد النسخ، أثناء إنشاء الآلة الافتراضية. يحتفظ Vapor 3.3.2 بالاتصال حتى يكتمل إنشاء الآلة الافتراضية.
الإصدار 3.3.1 (سبتمبر 2026)
لم يعد المستنسَخ يحمل هوية مصدره. صار بإمكان استنساخ جهاز افتراضي أو نشره من قالب أن يمنح النسخة معرّف جهاز (machine ID) ومفاتيح مضيف SSH واسم مضيف خاصة بها، فتحصل على عنوان DHCP خاص بها، ويقلع مستنسَخ جهاز مبني على صورة سحابية وشبكته تعمل. ويصلح هذا الإصدار أيضاً تراجعاً في 3.3.0 كان يُنشئ المستنسخات دون قناة وكيل ضيف QEMU، ويتيح حذف لقطات أجهزة UEFI دون أن يصير الجهاز عاجزاً عن الإقلاع.
ميزات جديدة:
- هوية الضيف عند الاستنساخ أو النشر من قالب: صار الاستنساخ والنشر من قالب يسألان عن طريقة معاملة النسخة. يمنحها خيار Reset guest identity (recommended) معرّف جهاز جديداً ومفاتيح مضيف SSH جديدة وتهيئة شبكة مرتبطة بعناوين MAC الخاصة بها، ويحذف عقود DHCP، ويضع بذرة عشوائية جديدة واسم مضيف خاصاً بها. أما Keep an exact copy فيُبقيها مطابقة للمصدر، لاختبارات الاستعادة أو للبرمجيات المرخّصة على معرّف الجهاز. حتى الآن كان كل مستنسَخ نسخة مطابقة: يأخذ عنوان DHCP الخاص بالمصدر، ويقلع مستنسَخ الجهاز المبني على صورة سحابية دون شبكة لأن تهيئته ما زالت تسمّي بطاقة شبكة المصدر. تُجرى إعادة التعيين على الأقراص المنسوخة قبل تعريف المستنسَخ؛ فإن أخفقت أخفق الاستنساخ ولا يبقى شيء خلفه. ويُكشف ضيوف Windows والأقراص المشفّرة والضيوف التي لا يستطيع المضيف تركيبها قبل نسخ أي شيء — استنسخ هذه بخيار Keep an exact copy. ويُحتفظ بعنوان IP الثابت مع تحذير، ويُنشأ المستنسَخ والتشغيل التلقائي معطّل كي تغيّر العنوان قبل أن يعمل الجهازان على شبكة واحدة. يمرّر عملاء API الحقل
guest_identity(resetأوautoأوkeep). راجع الأجهزة الافتراضية. - متطلب المضيف لإعادة التعيين: تستخدم إعادة التعيين أدوات libguestfs. التثبيت الجديد يأتي بها. أما المضيف الذي رُقّي في مكانه فثبّتها عليه قبل الاستنساخ؛ وإلى أن تفعل لا يعرض المضيف إلا النسخة المطابقة:
- Debian 12 وما بعده، Ubuntu 22.04 وما بعده:
apt-get install guestfish libguestfs-xfs - Debian 11، Ubuntu 20.04:
apt-get install libguestfs-tools libguestfs-xfs - RHEL 9 ومشتقاته:
dnf install libguestfs libguestfs-xfs - RHEL 8 ومشتقاته:
dnf install libguestfs-tools-c libguestfs-xfs
- Debian 12 وما بعده، Ubuntu 22.04 وما بعده:
تحسينات:
- تأخذ أقراص الجهاز المُنشأ حديثاً وضع التخزين المؤقت
noneووضع الإدخال والإخراجthreadsافتراضياً ما لم يحدّد الطلب غير ذلك. ولا تتغيّر الأجهزة القائمة. - حذف اللقطة الذي يتطلب إيقاف الجهاز يقول ذلك صراحةً — في نافذة الحذف وبالرمز
409 SNAPSHOT_REQUIRES_SHUTDOWNفي API — بدل إخفاق عام. - يمكن الحكم على ملف موجود أصلاً في المخزن بالقاعدة نفسها التي تُطبَّق على الرفع: يبلّغ
GET /api/v1/virtualization/storages/pools/{name}/volumes/{vol_name}?inspect=trueهل الملف مكتفٍ بذاته، وإن لم يكن فلماذا — قبل عرضه صورةً.
الأمان:
- يجب أن تكون الصورة المرفوعة أو المُنزَّلة بإحدى الصيغ التي تُحفظ بها وحدات التخزين — qcow2 أو raw (وملف ISO يُعدّ raw) أو VMDK — وأن يكون VMDK ملفاً واحداً. فواصف VMDK يسرد الملفات التي تقع فيها بياناته، ويقبل أي مسار على المضيف، لذا صار الفاصف يُرفض، بما في ذلك الفاصف المصحوب بملف
-flatمنفصل. ارفع VMDK من نوع monolithic أو stream-optimized، أو حوّل القرص أولاً، مثلاًqemu-img convert -O qcow2 in.vmdk out.qcow2. وتُرفض صور QED وVHD أيضاً؛ حوّلها إلى qcow2 أولاً. أما VDI وVHDX فيُفترض قبولهما — راجع المشكلات المعروفة.
إصلاحات:
- عادت قناة وكيل ضيف QEMU إلى المستنسخات. الأجهزة المستنسخة — أو المنشورة من قالب — بـ Vapor 3.3.0 أُنشئت دون القناة التي يتواصل عبرها وكيل الضيف، فلم يستطع المضيف الوصول إلى الوكيل: لم تُعرض عناوين IP للضيف، ولم تستطع النسخ الاحتياطية تجميد أنظمة ملفات الضيف. لم يتأثر Vapor 3.2.0 وما قبله، والمستنسخات المُنشأة بـ 3.3.1 فيها القناة. أما المستنسَخ الذي أُنشئ بـ 3.3.0 فتبقى فيه المشكلة إلى أن يُصلح: أوقفه، واستدعِ
POST /api/v1/virtualization/computes/{id}/guest-agent/channel، ثم شغّله من جديد — أو استنسخه مجدداً من مصدره. - يمكن حذف لقطات أجهزة UEFI دون إفساد الجهاز. جهاز UEFI له لقطات قديمة أُخذت وهو متوقف وأخرى أحدث أُخذت وهو يعمل — كما يتيح 3.3.0 — يحمل سلسلة يرفض libvirt الحذف من أيّ طرفيها. صار النوعان يُحذفان والجهاز متوقف؛ وإن كان يعمل طلب Vapor إيقافه بدل إعادة خطأ libvirt. وكان حذف لقطة قد يترك الجهاز عاجزاً عن الإقلاع؛ والجهاز الذي بقي على تلك الحال يُصلَح في المرة التالية التي يُشغَّل فيها من Vapor أو Cockpit.
المشكلات المعروفة:
- تُرفض صور VDI وVHDX عند رفعها. يرفض Vapor 3.3.1 صورة VDI أو VHDX المرفوعة أو المُنزَّلة، مع أن إجراء Convert في مستعرض التخزين يعرض كلتيهما صيغتَي مصدر؛ ويقبلهما Vapor 3.3.0 وما قبله. إلى أن يصدر إصدار يقبلهما من جديد، حوّل القرص قبل رفعه، مثلاً
qemu-img convert -O qcow2 disk.vdi disk.qcow2(أوdisk.vhdx)، ثم ارفع ملف qcow2. أُصلح ذلك في Vapor 3.3.2.
الإصدار 3.3.0 (سبتمبر 2026)
صار Vapor يدير Open Virtual Network: المبدّلات والموجّهات المنطقية، وVPC، ومجموعات الأمان، وDHCP، وموازنة الحمل، مع توصيل الأجهزة بها كأي شبكة أخرى، ومعالج يفعّل OVN على مضيف أو يكوّن عنقود OVN جديداً. وصارت النسخة الاحتياطية تستعيد الجهاز كاملاً — كل قرص وتهيئته — ويمكنها الكتابة فوق الجهاز الذي أُخذت منه. وتعمل لقطات الذاكرة لأجهزة UEFI، ولم يعد تعديل الجهاز يتركه عاجزاً عن الإقلاع. رقِّ إلى 3.3.1: الأجهزة المستنسخة بـ 3.3.0 تُنشأ دون قناة وكيل ضيف QEMU.
ميزات جديدة:
- Open Virtual Network (OVN): أدِر OVN من شاشة OVN تحت Network: المبدّلات المنطقية ومنافذها، والموجّهات المنطقية مع المسارات الثابتة وNAT، وقائمة chassis للقراءة فقط، وطوبولوجيا لكل مبدّل. وفوقها: VPC (موجّه مع شبكاته الفرعية، يُنشأ ويُحذف كياناً واحداً)، ومجموعات أمان مبنية من مجموعات المنافذ وقوائم ACL ومجموعات العناوين، وخيارات DHCPv4 وDHCPv6، وسجلات DNS، وموازِنات الحمل ومجموعاتها، وتوجيه السياسات، وQoS، والعدّادات (meters). ويُرفض حذف مبدّل ما زالت له منافذ، أو VPC ما زالت شبكاته الفرعية تحمل أحمالاً، مع تسمية ما يعترض الحذف.
- أجهزة على OVN: صار OVN Logical Switch نوع شبكة في نافذة Add وEdit Network Interface، وتعيين العنوان الافتراضي هو OVN DHCP. يُنشأ المنفذ المنطقي قبل تعريف الجهاز ويُحذف مع الواجهة، ويُسجَّل عنوان MAC للجهاز على الجانبين كي يجيبه DHCP الخاص بـ OVN. ونقلُ جهاز متوقف إلى مضيف آخر يربط واجهات OVN فيه بمبدّل منطقي — أو شبكة أخرى — في الوجهة، ومن ذلك مبدّل في نشر OVN مختلف. يحتاج المضيف إلى عميل Open vSwitch (
ovs-vsctl)، ويقول Vapor ذلك إن كان مفقوداً. - معالج تفعيل OVN: فعّل OVN على مضيف دون تحرير التهيئة يدوياً، بإحدى ثلاث طرق: تكوين نشر أصيل لـ Vapor (تهيئة قاعدة بيانات عنقودية جديدة، أو الانضمام إلى قائمة برمز يُستخدم مرة واحدة يُصدَر على مضيف مركزي)، أو الانضمام إلى OVN خارجي قائم، أو الانضمام إلى عنقود Kube-OVN قائم. يجري الاكتشاف وفحوص ما قبل التنفيذ أولاً، ولا تُستبدل قواعد بيانات OVN الموجودة على المضيف إلا بعد تأكيدك. ويُطلق إلغاء التفعيل ما هيّأه Vapor نفسه فقط، فتبقى عقدة Kube-OVN على شبكتها.
- تهيئة المضيف من الواجهة: تقرأ Host > System > Configuration الملف
vapor.confوتحرّره — نموذج للإعدادات الشائعة وعرض خام لما سواها — وتعيد تشغيل Vapor. وتُفحص إعادة التشغيل: إن لم يعد Vapor للعمل استُعيدت التهيئة السابقة. وتبقى التعليقات وترتيب المفاتيح بعد التحرير، ولا يُعرض مفتاح التوقيع ولا يُكتب فوقه أبداً. - لقطات الذاكرة لأجهزة ذات أقراص raw: يمكن أخذ لقطة مع الذاكرة لجهاز يعمل وأقراصه ملفات raw، والعودة إليها.
تحسينات:
- تُحفظ متغيرات البرنامج الثابت لجهاز UEFI، وفيها مدخلات الإقلاع، مع كل نسخة احتياطية وتُعاد عند الاستعادة؛ والجهاز المستعاد باسم جديد يحصل على نسخته الخاصة بدل مشاركة نسخة الأصل. وتحملها نقاط الاسترجاع في النسخ المتماثل أيضاً، ويقلع بها تجاوز الفشل وتجاوز الفشل التجريبي.
- تعرض الاستعادة تقدّمها. ومع Overwrite existing VM تخفي النافذة حقل الاسم الجديد وتحذّر من أن الجهاز سيُوقف ويُستبدل ويبقى مطفأً بعدها — مع إبراز التحذير إن كان يعمل.
- يعرض الجهاز العامل نظام التشغيل الذي يسمّيه وكيل الضيف، مثل "Ubuntu 20.04.5 LTS"، فلم يعد الضيف المستورد أو المُرحَّل يظهر بلا نظام تشغيل.
- استيراد VDDK الذي يعجز عن فتح القرص المصدر يذكر السبب الذي سجّله VDDK — بصمة خاطئة، أو منفذ لا يمكن الوصول إليه — بدل "Unknown error" وحدها.
- يمكن عرض النسخ الاحتياطية لجهاز لم يعد معرَّفاً على المضيف.
- يسجّل المستنسَخ معرّف UUID لمصدره، ويبقى صالحاً إن أُعيدت تسمية المصدر.
- يُعطَّل حقل Name للجهاز العامل، بدل رفض إعادة التسمية عند الحفظ.
الأمان:
- تُرفض الصورة الواردة بالرفع أو بالتنزيل من عنوان URL — بما في ذلك الرفع عبر متصفح التخزين — (
422 IMAGE_NOT_SELF_CONTAINED) إن سمّت ملفاً أساسياً (backing file) أو ملف بيانات خارجياً. فمثل هذا الملف، إذا عُرض صورةً، ينسخ ملفاً آخر على المضيف، كقرص جهاز آخر، إلى كل جهاز يُنشأ منه. الإصدارات السابقة تقبل مثل هذه الصور؛ رقِّ إلى 3.3.0. - يجب أن يكون اسم الملف في الرفع إلى مخزن التخزين اسماً مجرداً. فالاسم الذي يتضمن مساراً قد يضع الملف خارج المخزن. الإصدارات السابقة متأثرة؛ رقِّ إلى 3.3.0.
إصلاحات:
- استعادة النسخة الاحتياطية تعيد الجهاز كاملاً، ويمكنها الكتابة فوقه. كانت الاستعادة مع Overwrite existing VM تخفق برسالة domain … already exists، وكان الجهاز ذو الأقراص المتعددة يعود بقرص واحد، وكان الجهاز المستعاد يأخذ ذاكرة 2 GiB ومعالجين افتراضيين أيّاً كان الأصل. صارت النسخة الاحتياطية تسجّل تعريف الجهاز، وتعيد الاستعادة بناءه منه — كل قرص، والذاكرة، والمعالج، والشبكات. والكتابة فوق الجهاز توقفه، حتى وهو يعمل، وتستبدله بمعرّف UUID نفسه، فتظل نسخه الاحتياطية وكل ما يشير إليه قادرة على إيجاده. أما النسخ المأخوذة قبل 3.3.0 فلا تحمل تعريفاً: تستعيد كل قرص، بإعدادات افتراضية للذاكرة والمعالج والشبكة.
- تعمل لقطات الذاكرة لأجهزة UEFI. كانت كل لقطة مع الذاكرة لجهاز UEFI تخفق، لأن libvirt لا يأخذ لقطات داخلية لأجهزة ذات برنامج ثابت UEFI. صارت لقطات خارجية بملف ذاكرة منفصل، ويمكن العودة إليها وحذفها.
- لم يعد تعديل الجهاز يتركه عاجزاً عن الإقلاع. كانت ثلاثة تعديلات تفعل ذلك. فأي تعديل كان يُسقط أعلام ميزات المعالج، فيخفق الجهاز الذي يحتاج إحداها — مثل
svmالمعطّل على الطرازqemu64— عند إقلاعه البارد التالي برسالة Host CPU does not provide required features. وإعطاء قرص ترتيب إقلاع في جهاز يقلع حسب نوع الجهاز كان يفصل ذلك القرص. وحفظ جهاز تقع واجهته على شبكة libvirt بوضع الجسر كان يحوّلها إلى واجهة جسر على جهاز غير موجود (Cannot get interface MTU). صارت ميزات المعالج تبقى بعد التعديل، ويبقى القرص موصولاً، وتبقى الواجهة على شبكتها. - استنساخ جهاز متوقف يعمل مع أقراص SATA وraw. كان الجهاز المتوقف ذو القرص SATA — الشائع في ضيوف Windows وما يُستورد من VMware — يخفق في الاستنساخ برسالة Found duplicate drive address، والجهاز ذو القرص raw يخفق برسالة Image is not in qcow2 format، وكذلك إنشاء قالب منه ونشر ذلك القالب. ولم يعد المستنسَخ يكتسب CD-ROM لم يكن لمصدره، ويبقى القرص raw كما هو، ويحتفظ بنوع جهاز المصدر (machine type) بدل نقله إلى q35.
- صارت قائمة الأجهزة والبيانات التي يزامنها Cockpit تبلّغ عن UEFI والإقلاع الآمن وTPM. كان Cockpit يسجّل كل جهاز على أنه BIOS بلا TPM؛ وكان محمّل البرنامج الثابت الذي لا يتضمن مساره "OVMF" يُقرأ BIOS، والإقلاع الآمن المعطّل يُقرأ مفعّلاً.
- تسمّي شهادات TLS العناوين التي يستخدمها العملاء. كانت الشهادة المعاد توليدها تسرد كل عنوان على كل واجهة في تلك اللحظة، ومنها واجهات الحاويات والأجهزة، وقد تظل تُظهر العنوان القديم للمضيف بعد تغيير عنوانه. صارت تسمّي الاسترجاع (loopback) والعناوين الحقيقية لواجهات المضيف، ويحدّد
VAPOR_TLS_SANSالقائمة مباشرة. وتقول علامة التبويب TLS هل تغطي الشهادة العنوان الذي اتصلت عبره. لا يتغيّر شيء حتى تعيد توليد شهادة؛ وإعادة توليد شهادة API تغيّر بصمتها، فوحدة التحكم التي تثبّت المضيف (pinning) يجب أن تثبّته من جديد. وإن كان العنوان القديم ما زال معيّناً على واجهة فأزله أو اضبطVAPOR_TLS_SANS. - كان إنشاء مخزن تخزين OCFS2 لعنقود بنبض عام (global heartbeat) يخفق عند التهيئة برسالة Unsupported feature(s) found when parsing fs-features string.
- لا يُبلَّغ عن المضيف بأنه يحتفظ بعنقود OCFS2 عبر إعادة التشغيل إلا إذا كان نبضه العام قادراً على البدء: يجب ضبط كل جهاز نبض ليعود (البدء التلقائي في iSCSI، أو إدراجه في
/etc/ceph/rbdmap) وأن يبدأ o2cb بعد الخدمة التي توفّره. كان المضيف قد يُبلَّغ عنه بأنه دائم ثم يعود وكل تركيب لـ OCFS2 يخفق، في حين يُبلَّغ عن مضيف مرتّب ترتيباً صحيحاً عبر اسم مستعار لخدمة بأنه غير دائم. - لم يكن النسخ المتماثل لجهاز بقرص واحد يكتمل أبداً: تبقى نقطة الاسترجاع معلّقة (pending) ولا يمكن تجاوز الفشل إليها. وكان تجاوز الفشل التجريبي لجهاز UEFI يشارك الجهاز المستعاد متغيرات برنامجه الثابت، فكان تفكيك الاختبار يحذفها.
- كان حذف نسخة احتياطية لجهاز متعدد الأقراص يترك كل قرص بعد الأول على التخزين.
- كانت إعادة التشغيل اللطيفة تُبلَّغ فاشلة مع أن الضيف أعاد التشغيل. وصارت إجراءات الطاقة المرسلة بأسماء أخرى —
shutdownوrebootوsuspendوforce-offوforce-reboot— مقبولة بدل رفضها كغير معروفة. - لم يكن للأجهزة المُنشأة من المعالج مجال لإضافة معالجات افتراضية أو ذاكرة أثناء التشغيل: كانت Max vCPUs وMax Memory تساويان دائماً القيم الحالية (منذ 3.1.0). صارت قيمتاهما الافتراضيتان عدد معالجات المضيف وذاكرته، وصارت حقول الذاكرة بوحدة GiB افتراضياً.
- كان إنشاء شبكة NAT أو موجَّهة دون نطاق IP يعيد خطأ لكنه ينشئ الشبكة رغم ذلك.
- كان حذف عنوان واجهة ثم إضافتها إلى جسر OVS قد يترك العنوان نفسه على عضو الجسر وعلى المنفذ الداخلي للجسر. صار العنوان الذي تحمله واجهة أخرى يُرفض، ولم يعد حفظ منفذ OVS يثبّت MTU على ما صادف أن كانت عليه.
- تُكتب تواريخ الترخيص باسم الشهر كاملاً وبلغة الواجهة، فلم يعد تاريخ مثل 10/9/2026 يُقرأ على أنه يومان مختلفان.
الإصدار 3.2.0 (سبتمبر 2026)
صار بإمكان الضيف المُرحَّل أن يحتفظ بأقراصه في مجلد خاص به. ويمكن إخبار عملية التنزيل بسلطة التصديق التي تُعتمد، فلا يحتاج خادم ذو شهادة خاصة إلى تركيب أي شيء على المضيف. كما صارت مضيفات عائلة RHEL — Rocky وAlma وRHEL 9 — قادرة على إنشاء أجهزة افتراضية كانت ترفضها من الأساس.
ميزات جديدة:
- أقراص الضيف في مجلد خاص بها: القرص المستورد أو المُنزَّل إلى مخزن يمكن وضعه في مجلد باسم الضيف، بدل أن يبقى في جذر المخزن إلى جانب أقراص كل ترحيل آخر. ويبلّغ Vapor بموضع حفظ كل ملف، لأن الملف داخل مجلد ليس وحدة تخزين في المخزن ولن يظهر في أي قائمة.
- إخبار التنزيل بالسلطة التي تُعتمد: يمكن تمرير سلطة تصديق للتحقق من المصدر. فيصير الخادم ذو الشهادة الخاصة قابلاً للوصول دون تركيب شيء في مخزن ثقة المضيف، ويبقى التحقق قائماً — وليس هذا خياراً لتخطّيه.
- الاستيعاب الدافئ داخل مجلد فرعي: الوجهة القابلة للكتابة التي يتدفق إليها الترحيل الحي يمكن أن تقع في مجلد تحت المخزن، فيحطّ الترحيل الدافئ حيث يحطّ البارد.
- وكيل ضيف QEMU: يمكن إنشاء جهاز مع توصيل وكيل الضيف عبر virtio-serial وتطبيق تهيئة cloud-init. وتُعرض أسماء الواجهات كما يراها الضيف نفسه.
- تحويل وحدة تخزين إلى صيغة أخرى من شاشة التخزين.
- تحديد إصدار NFS للمخازن: تثبيت إصدار NFS الذي يُركَّب به المخزن بدل تركه للتفاوض.
- تهيئة أجهزة نبض OCFS2 تلقائياً، مع تحقق من الحجم وتجاوز صريح.
- إدارة المسارات المتعددة: ضبط multipath من الواجهة، وإعادة تحميل
multipathdدون صدفة على المضيف. - أسماء الشهادة: تُعرض الأسماء البديلة في شهادة خادم libvirt، فيُرى عدم تطابق الاسم بدل تخمينه.
تحسينات:
- تسجيل الدخول المرفوض يذكر سببه في سجل المضيف — مستخدم غير معروف، أو ليس في مجموعة
sudo/wheel، أو رفضته PAM — بينما يبقى الجواب للمتصل مبهماً عن قصد. - تعود أهداف iSCSI للاتصال بعد إعادة التشغيل: صار تفضيل
node.startupيُكتب حتىiscsiadmبدل أن يبقى داخل Vapor وحده. - تكفّ عناوين واجهات الجهاز العامل عن التذبذب، ويحتفظ الجهاز المتوقف بأسماء واجهات ثابتة.
إصلاحات:
- مضيفات عائلة RHEL تستطيع إنشاء الأجهزة. كان يعترض ذلك افتراضان. فقد كان Vapor يسمّي
/usr/bin/qemu-system-x86_64صراحةً، وهو ترتيب Debian لا موضع RHEL، فيفشل الإنشاء برسالة Cannot check QEMU binary. وكان يطلب شاشةqxlالتي لم تعد RHEL 9 ومشتقاتها تشحنها، فتُرفض النطاقات برسالة does not support video model 'qxl'. وصار الاثنان يُقرآن مما يقوله libvirt عن المتاح على المضيف. أما المضيف الذي كان يعمل فيحصل على ما كان يحصل عليه تماماً. - لم يعد تفعيل UEFI أو الإقلاع الآمن أو TPM على جهاز قائم يفرض
qxlكذلك، فتوقف فشل ذلك التعديل على المضيفات نفسها. - صارت عمليات وحدات التخزين تفهم المجلدات: يمكن حذف قرص داخل مجلد فرعي، ويبلّغ عن سعته الحقيقية بدل أن يبدو مفقوداً.
- النسخ الاحتياطي متعدد الأقراص: صارت نقاط تحقق تتبّع التغيير صحيحة لكل قرص، ولم تعد تُترك خلفها.
- الدفع المتماثل بين المواقع إذا أخفق لم يعد يسجّل نقطة استرجاع مكتملة، والنسخة متعددة الأقراص تُسجَّل نقطة استرجاع واحدة لا عدة نقاط.
- تُطبَّق بنية المعالج المطلوبة صراحةً بدل تجاهلها بصمت.
- تظهر أقراص الجهاز في لقطة المزامنة، وتتصل جسور OVS كما هي مضبوطة.
- الواجهة التي تتعذّر إعطاؤها عنوانها تقول ذلك، بدل ترك تهيئة IP منقوصة.
الإصدار 3.1.0 (أغسطس 2026)
صار بإمكان مضيفات Vapor تسليم الأجهزة الافتراضية فيما بينها. يمكن نقل جهاز متوقف إلى مضيف آخر من داخل Awanio، وإلغاء النقل أثناء تنفيذه، ويُتحقق من إمكانية الوصول إلى الوجهة ومن توفر المساحة فيها قبل نسخ أي شيء. كما يمكن تخصيص مسار شبكي مستقل لحركة النسخ المتماثل والترحيل.
الميزات الجديدة:
- نقل جهاز افتراضي إلى مضيف آخر: ترحيل بارد لجهاز متوقف. يتأكد Vapor من أن الوجهة قابلة للوصول وتتسع للبيانات قبل النسخ، ويترك الأقراص الموجودة أصلًا على تخزين مشترك في مكانها، وينظّف ما خلّفه إذا فشل النسخ.
- إلغاء ترحيل جارٍ: يمكن إيقاف الترحيل أثناء تنفيذه، ويُبلَّغ عنه بوصفه ملغيًا لا فاشلًا.
- إعادة تسمية جهاز افتراضي: تسري إعادة التسمية على كل ما كان يشير إلى الاسم القديم — مسارات الأقراص في تعريف الجهاز، ومجلد النسخ الاحتياطي وأسماء ملفاته، والسجلات التي تشير إليها. ويجب أن يكون الجهاز متوقفًا حتى تُعاد تسميته.
- نقاط خدمة المضيف: خصّص لحركة النسخ المتماثل والترحيل واجهة شبكية خاصة على المضيف، منفصلة عن واجهة الإدارة، ويجري تعيينها من شاشة الواجهات.
- تجاوز الفشل غير المتزامن: يعود تجاوز الفشل بالرد فورًا ويبلّغ عن تقدمه، بدلًا من إبقاء الاتصال مفتوحًا طوال العملية.
- ملف hosts الخاص بالنظام: اعرض ملف
/etc/hostsالخاص بالمضيف وحرّره من تبويبات النظام.
التحسينات:
- شبكة افتراضية أسرع: تستخدم واجهات virtio الآن vhost وقوائم انتظار متعددة ومخازن حلقية أكبر.
- القوالب: يجري إنشاء قالب من جهاز افتراضي في الخلفية، ويمكن إلغاؤه أثناء تنفيذه.
- تعرض تفاصيل الجهاز الافتراضي تسميات الأمان التي يعمل بها، وتصرّح بوضوح حين يعجز المضيف عن الإبلاغ عنها.
- يذكر Vapor أثناء تشغيله أي إصدار بناء هو بالضبط، في
--versionوفي نقطة نهاية الحالة الصحية معًا. - تُرفض أسماء الأجهزة الافتراضية التي تحتوي مسافات أو رموزًا خاصة منذ البداية، بدلًا من قبولها ثم تعذّر التعامل معها لاحقًا.
إصلاح الأخطاء:
- كان اختبار التعافي من الكوارث يبني جهاز الاستعادة من تعريف الجهاز المصدر العامل بدلًا من نسخته المتماثلة، فينقل معه أقراص CD-ROM والأقراص المرنة الخاصة بالمصدر.
- كانت إعادة الحماية بعد العودة قد تشتق اسمًا خاطئًا، ولم يكن الجهاز المستعاد يحتفظ بمعرّفه الأصلي، فتفقد الدورة الثانية أثر الجهاز الأصلي.
- كانت النسخة الاحتياطية التزايدية التي نسخت القرص بالكامل فعليًا تُسجَّل رغم ذلك كنسخة تزايدية.
- لم تكن نتيجة تجاوز الفشل تُسجَّل إذا توقف الطرف الطالب عن الانتظار.
- كان استنساخ جهاز افتراضي متصل به ISO أو CD-ROM يفشل دون بيان السبب.
- لم تكن العُقد المضافة إلى عنقود o2cb تُسجَّل، ولم تكن إعادة محاولة تنزيل الصورة تذكر سبب فشل المحاولة السابقة.
الإصدار 3.0.2 (أغسطس 2026)
أصبح بإمكان Vapor العمل كموقع للتعافي من الكوارث. يتم نسخ الجهاز الافتراضي المحمي إلى موقع ثانٍ وفق جدول زمني، ويمكن تشغيله هناك عند الحاجة، ثم تتم حمايته مجددًا في الاتجاه المعاكس.
الميزات الجديدة:
- النسخ المتماثل بين المواقع: احمِ جهازًا افتراضيًا بنسخه إلى موقع ثانٍ وفق جدول تحدده أنت، مع الاحتفاظ بنقاط الاستعادة يوميًا أو أسبوعيًا أو شهريًا.
- تجاوز الفشل (Failover): شغّل الجهاز الافتراضي المحمي في موقع الاستعادة — إما تجاوزًا مخططًا مع مزامنة أخيرة وإيقاف سليم للجهاز الأصلي، أو تجاوزًا غير مخطط عندما يتعذر الوصول إلى الموقع المصدر. تُعاد مطابقة الواجهات مع شبكات موقع الاستعادة، وتحط الأقراص في المجمع الذي اخترته، ويمكن للنظام الضيف أخذ عنوان جديد عند التشغيل.
- اختبار تجاوز الفشل: شغّل النسخة المتماثلة على شبكة معزولة للتأكد من إقلاعها، بينما يستمر الجهاز الأصلي في الخدمة.
- إعادة الحماية (Reprotect): بعد تجاوز الفشل، يصبح الجهاز المستعاد مصدرًا محميًا بذاته، ويستأنف النسخ المتماثل في الاتجاه المعاكس.
- النسخ الاحتياطي للكتل المتغيرة: ينسخ النسخ الاحتياطي التزايدي الكتل التي تغيرت منذ النسخة السابقة فقط.
التحسينات:
- يتم التحقق من كل نسخة متماثلة مقابل مصدرها قبل اعتمادها كنقطة استعادة.
- يستأنف النقل المتوقف من حيث توقف بدلًا من البدء من جديد.
- يتوقف النسخ الاحتياطي مبكرًا برسالة واضحة عند نقص مساحة العمل المؤقتة، ويعرض تقدمه أثناء التشغيل.
- اختر الأقراص التي يتم نسخها، واطلب نسخة ساكنة (quiesced)، وأوقف الحماية مؤقتًا أو استأنفها في أي وقت.
- إخراج قرص CD-ROM، وتغيير حجم وحدة تخزين أثناء تشغيل الجهاز الافتراضي، وحفظ أقراص كل جهاز في مجلد خاص به.
الأمان:
- تمت إزالة نقطة النهاية التي كانت تكتب بيانات خام في قرص الجهاز الافتراضي، وأصبح مسار القراءة المتبقي يحدد القرص بعنوانه الخاص لا بمسار ملف يُرسل في الطلب. الإصداران 3.0.0 و 3.0.1 متأثران؛ يُرجى الترقية إلى 3.0.2.
- يرفض Vapor صور الأقراص التي تعيد توجيه القراءة إلى ملفات أخرى على المضيف.
إصلاح الأخطاء:
- التحديث الفاشل يتراجع عن نفسه الآن. يتأكد Vapor من أن الإصدار الجديد يعمل فعلًا ويحتفظ بالإصدار السابق قبل التبديل. وإذا تعذر تشغيل الإصدار الجديد، يُستعاد السابق وتعود الخدمة تلقائيًا — فلم يعد المضيف يبقى بحاجة إلى استعادة يدوية.
- كان اختبار تجاوز الفشل على جهاز متعدد الأقراص يوجّه قرصًا واحدًا فقط إلى النسخة المتماثلة.
- لم تكن سياسة الاحتفاظ قادرة على استرجاع المساحة من سلسلة طويلة من نقاط الاستعادة التزايدية.
- كانت المزامنة تُسجَّل كناجحة قبل وصول نقطة الاستعادة فعليًا إلى موقع الاستعادة.
- كان حذف نسخة احتياطية يترك نقطة تفتيش تتبع التغييرات الخاصة بها، فلا تُسترجع المساحة.
- كانت قراءات الذاكرة والمعالج لجهاز افتراضي قيد التشغيل تتجاوز قيمها الحقيقية أحيانًا.
الإصدار 3.0.1 (يوليو 2026)
يضيف دعم الترحيل الدافئ (warm migration) — إذ يمكن لمضيف Vapor الآن أن يكون وجهة لترحيل حي بأقل توقف ممكن لجهاز افتراضي قيد التشغيل — إلى جانب إدارة حزم نظام التشغيل من الواجهة وتحسينات عامة في الموثوقية.
الميزات الجديدة:
- وجهة الترحيل الدافئ: يستطيع مضيف Vapor الآن استقبال ترحيل حي لجهاز افتراضي قيد التشغيل. يظل النظام الضيف في الخدمة أثناء النقل ولا يتوقف إلا لبرهة قصيرة عند التبديل. يعمل مع Condensa و Cockpit لجلب أجهزة Proxmox العاملة إلى Awanio.
- إدارة مكتبات وحزم نظام التشغيل: تصفح مكتبات نظام التشغيل والحزم على المضيف وأدرها من تبويبات النظام.
التحسينات:
- أداة التحديث: تخبرك الآن عند توفر إصدار رئيسي جديد، بدلًا من الإبلاغ بأن النظام محدّث.
إصلاح الأخطاء:
- يعيد تسجيل الدخول الفاشل الآن رسالة خطأ واضحة بدلًا من خطأ في الخادم.
- تعزيز الأمان والموثوقية عبر وكيل المضيف بالكامل.
الإصدار 3.0.0 (يوليو 2026)
إصدار رئيسي يضيف دعم NVIDIA vGPU، ومستوى بيانات الترحيل المستند إلى VDDK لاستيراد الأجهزة الافتراضية من المنصات الأخرى، ونسخ احتياطي تزايدي أكثر مرونة، وإدارة التخزين المجمع (OCFS2/O2CB)، وموقف أمني مُحكَم ومغلق عند الفشل (fail-closed).
تغيير جذري — إجراء مطلوب
يعمل وكيل Vapor الآن بأسلوب المغلق عند الفشل (fail-closed): لن يتم التوثيق بدون سر توقيع مكوّن، وتُشتق الأذونات من الهوية الموثقة. قم بتهيئة سر JWT على كل مضيف قبل الترقية.
الميزات الجديدة:
- NVIDIA vGPU (الأجهزة الوسيطة): دعم كامل لتقسيم وحدة GPU الفيزيائية إلى وحدات GPU افتراضية — التنسيق من جانب المضيف ونقاط نهاية API، ومثبت NVIDIA vGPU Manager الموجه مع فحوصات ما قبل التشغيل، وعرض إدارة الأجهزة على مستوى المضيف، ومعرفة عدد المثيلات المتاحة لكل ملف تعريف.
- مستوى بيانات الترحيل الدافئ/البارد (VDDK): محرك استيراد أقراص لجلب VM من VMware، بما في ذلك التحويلات التزايدية (كتلة متغيرة/CBT)، وبناء ملحق nbdkit + VDDK حديث، والكشف التلقائي عن الملحقات، وإدارة إصدارات VDDK المثبتة. يتم تتبع تقدم الاستيراد مباشرة.
- إدارة مكتبات الطرف الثالث: تثبيت وإدارة مكونات VDDK و NVIDIA vGPU من تبويبات النظام، مع دعم التحميل القابل للاستئناف (TUS) للملفات الكبيرة.
- واجهة برمجة تطبيقات وكيل الضيف (Guest Agent API): واجهة عامة لوكيل ضيف QEMU (الأمر الخام والـ exec)، بالإضافة إلى نقاط نهاية لضمان قناة الوكيل وإزالة ملفات بذور cloud-init.
- إدارة عنقود O2CB / OCFS2: وضع الصيانة مع تكوين التمهيد الدائم، وواجهة API لإدارة مهلة دقات القلب/الشبكة، والتحديد الصريح للعنقود عند إنشاء مجمعات OCFS2، والتمهيد الأولي للعنقود — كل ذلك مع فحوصات السلامة التي تراعي مساحة أسماء المضيف.
التحسينات:
- ترحيل أكثر أمانًا: تتطلب واجهة المستخدم للترحيل الآن تأكيد الإجراءات المدمرة، ويتم تقليم متجر الترحيل تلقائيًا مع الإبلاغ دائمًا عن أحدث حالة.
- استعادة أفضل: اختر مجمع تخزين مستهدف، واسترد إلى نسخة قرص مستقلة، وقم بإرفاق الأقراص الحالية مع تحذيرات تبعية واضحة للسلاسل التزايدية/التفاضلية.
- متصفح التخزين: إعادة تسمية الملفات ونقلها وتتبع المرفقات بالآلات الافتراضية في المتصفح.
- تعديل الآلات الافتراضية: التحقق من صحة وضع CPU المخصص، والحفاظ على إعدادات البرامج الثابتة/الجهاز للآلات الافتراضية الشغالة حتى لا يتم رفض التعديلات.
- العمليات: يستهدف بناء
deploy-peersتوزيع الملف التنفيذي على المضيفين الأقران وإعادة تشغيل الخدمة.
الأمان:
- توثيق مغلق عند الفشل مع تثبيت خوارزمية التوقيع واشتقاق الأذونات من الهوية الموثقة.
- تحديد المعدل (Rate-limiting) على نقاط نهاية تسجيل الدخول، ومعالجة ترويسات الوكيل الموثوقة، وحماية SSRF على العمليات المدفوعة بـ Ansible.
- متابعة إعادة تدقيق تغطية التفويض عبر المعالجات.
إصلاح الأخطاء:
- النسخ الاحتياطي التزايدي: الحذف والاحتفاظ لم يعد يدمر السلاسل التزايدية؛ وتم اكتشاف الفشل الصامت في إعادة تأسيس الفروق (rebase-delta)؛ ولم يعد
qemu-imgينشئ الصورة الوجهة؛ والمهام المقاطعة لم تعد تفسد الأهداف التزايدية. - أداء واستقرار Libvirt: تحسين سرد المجمعات، وإعادة تدوير الاتصالات دوريًا، ومهل الطلبات، وتهيئة حلقة الأحداث، وإصلاحات تسرب الموارد التي حلت التأخير السابق؛ وتم كبح عمليات مسح المقاييس عبر الطيران الفردي والتربيد (caching).
- إصلاح تسرب goroutine لمضخة مقاييس WebSocket عند إلغاء الاشتراك/إعادة الاشتراك.
- إصلاح فشل العمود المكرر (الترحيل 21) على قواعد البيانات التي لم تشغل الترحيل 20 مطلقًا.
- تصحيح تنسيق البيانات الوصفية للآلة الافتراضية بعد تحديثات البيانات الوصفية، وإضافة جهاز رسومات VNC افتراضي حتى تتم التمهيدات المستردة بشكل نظيف.
- يتسامح التحقق من صحة الترخيص مع عقد نبضات القلب المنتهي لمستوى التحكم خلال نافذة التحديث.
- الجلسات لم تعد تنتهي مهلتها أثناء المهام الخلفية الكبيرة وعمليات التحميل الطويلة.
- إصلاح ترحيل Windows BIOS وتحديث أدوات v2v.