SYSTEMD-VMSPAWN(1)

الاسم
systemd-vmspawn - إنشاء نظام تشغيل في آلة افتراضية

موجز

systemd-vmspawn [الخيارات...] [المعطيات...]

الوصف

يمكن استخدام systemd-vmspawn لبدء آلة افتراضية من صورة نظام تشغيل. يشبه في كثير من النواحي systemd-nspawn(1)، لكنه يطلق آلة افتراضية كاملة بدلًا من استخدام مساحات الأسماء.

يمكن تمرير واصفات الملفات لـ /dev/kvm و /dev/vhost-vsock إلى systemd-vmspawn عبر واجهة تمرير المقابس الأصيلة لـ systemd (انظر sd_listen_fds(3) للتفاصيل حول البروتوكول الدقيق المستخدم والترتيب الذي تُمرر به واصفات الملفات)، ويجب تمرير واصفات الملفات هذه بالاسمين "kvm" و "vhost-vsock" على التوالي.

ملاحظة: في مشتقات أوبونتو/دبيان، يتطلب systemd-vmspawn أن يكون المستخدم في مجموعة "kvm" لاستخدام خيارات VSOCK.

الخيارات

تُمرر المعطيات الزائدة كمعطيات إضافية لسطر أوامر النواة باستخدام SMBIOS.

الخيارات التالية مفهومة:

-q، --quiet
    يوقف أي مخرجات حالة من الأداة نفسها. عند استخدام هذا المفتاح، سيكون المخرج الوحيد من vmspawn هو مخرجات الطرفية لنظام تشغيل الآلة الافتراضية نفسه.

    أُضيف في الإصدار 256.

--system، --user
    يحدد ما إذا كان سيتم التفاعل مع مدير المستخدم أو مدير النظام وما إذا كان سيتم التسجيل في نسخة machined الخاصة بالمستخدم أو نسخة machined الخاصة بالنظام. إذا لم يُحدد، فسيُستخدم مدير النظام ونسخة machined عند التشغيل كجذر (root)، وإلا فسيُستخدم مدير المستخدم ونسخة machined.

    أُضيف في الإصدار 260.

  خيارات الصورة

-D، --directory=
    الدليل المراد استخدامه كجذر لنظام الملفات للآلة الافتراضية.

    يجب تحديد أحد الخيارين --directory= أو --image=. إذا لم يُحدد أيهما، يُفترض --directory=..

    ملاحظة: إذا كنت توصل دليلًا لا يملكه الجذر، فقد تحتاج إلى --private-users= للمطابقة مع مساحة أسماء subuid الخاصة بالمستخدم. يتوفر مثال لاحقًا حول كيفية استخدام /etc/subuid لهذا الغرض.

    أُضيف في الإصدار 256.

-x، --ephemeral
    إذا حُدد، ستعمل الآلة الافتراضية بلقطة مؤقتة لنظام ملفاتها تُحذف فور انتهاء الآلة. يعمل حاليًا مع --image= فقط. لاحظ أن --ephemeral لن يعمل مع --extra-drive=.

    أُضيف في الإصدار 260.

-i، --image=
    صورة قرص نظام ملفات الجذر (أو عقدة جهاز) للآلة الافتراضية.

    أُضيف في الإصدار 255.

--image-format=FORMAT
    يحدد تنسيق صورة القرص الممررة إلى --image=. يقبل إما "raw" أو "qcow2". القيمة المبدئية هي "raw". لاحظ أن "qcow2" مدعوم فقط للملفات العادية، وليس للأجهزة الكتلية.

    أُضيف في الإصدار 260.

--image-disk-type=النوع
    يحدد نوع القرص المستخدم للقرص الجذر المُمرَّر إلى --image=. ترث الأقراص الإضافية المُضافة عبر --extra-drive= هذا النوع ما لم يُستبدل ببادئة نوع قرص صريحة. يأخذ أحد القيم "virtio-blk" أو "virtio-scsi" أو "nvme" أو "scsi-cd". المبدئي هو "virtio-blk". عندما يُحدد "scsi-cd"، يُوصل القرص كمحرك أقراص CD-ROM للقراءة فقط.

    أُضيف في الإصدار 261.

--discard-disk=BOOL
    يتحكم في معالجة qemu لطلبات التخلص (discard) من الآلة الافتراضية. هذا يمنع الآلات الافتراضية التي تعمل لفترات طويلة من استهلاك مساحة قرص أكثر من المطلوب. هذا الخيار مفعل مبدئيًا.

    أُضيف في الإصدار 256.

--grow-image=BYTES, -G BYTES
    يزيد حجم ملف الصورة المحدد بـ --image= إلى الحجم المحدد بالبايت إذا كان أصغر من ذلك. لا ينفذ أي عملية إذا لم يُستخدم ملف صورة أو إذا كان ملف الصورة بحجم الحجم المطلوب أو أكبر منه بالفعل. يقبل الحجم المحدد اللواحق المعتادة K، M، G (بأساس 1024). تُقرب القيم المحددة لأعلى إلى مضاعفات 4096.

    أُضيف في الإصدار 258.

  ضبط المضيف

--cpus=CPUS
    عدد وحدات المعالجة المركزية لبدء الآلة الافتراضية بها. المبدئي هو 1.

    أُضيف في الإصدار 255.

--ram=بايت[:الحد الأقصى[:الفتحات]]
    مقدار الذاكرة الذي يُبدأ به الجهاز الافتراضي. المبدئي هو 2G. إذا حُدد حجم أقصى بعد نقطتين (:)، يُفعَّل الإضافة الساخنة للذاكرة مع الحد الأعلى المُعطى. يمكن تحديد عدد فتحات الإضافة الساخنة اختيارياً بعد نقطتين ثانيتين والمبدئي هو 1.

    أُضيف في الإصدار 255.

--kvm=BOOL
    يتحكم فيما إذا كان سيتم تمكين تسريع KVM. إذا لم يُحدد أو ضُبط على auto، فسيُكتشف دعم KVM آليًا. إذا كان صحيحًا (true)، سيُصر على استخدام KVM. إذا كان خاطئًا (false)، سيُعطل KVM.

    أُضيف في الإصدار 255.

--vsock=BOOL
    يتحكم في تخصيص مقبس VSOCK للضيف. إذا لم يُحدد أو ضُبط على auto، فسيُكتشف دعم شبكة VSOCK آليًا. إذا كان صحيحًا (true)، سيُصر على استخدام VSOCK. إذا كان خاطئًا (false)، ستُعطل شبكة VSOCK.

    أُضيف في الإصدار 255.

--vsock-cid=CID
    يحدد معرف المضيف (CID) المحدد لاستخدامه للضيف. معرفات CID الصالحة تقع في النطاق من 3 إلى 4294967294 (0xFFFF_FFFE). المعرفات خارج هذا النطاق محجوزة. مبدئيًا، سيحاول vmspawn اشتقاق CID للضيف من اسم الجهاز، مع الرجوع إلى CID عشوائي إذا كان هذا المعرف محجوزًا.

    أُضيف في الإصدار 255.

--tpm=BOOL
    يتحكم في تقديم جهاز TPM للضيف، عبر swtpm(8). إذا لم يُحدد أو ضُبط على auto، فسيتحقق vmspawn من وجود برنامج swtpm آليًا. إذا كان نعم، سيُصر على دعم swtpm. إذا كان لا، سيُعطل TPM.

    أُضيف في الإصدار 256.

--tpm-state=PATH|auto|off
    يضبط مكان وضع حالة TPM، في حال تمكين دعم TPM (انظر --tpm= أعلاه). يأخذ مسار نظام ملفات مطلق لدليل لوضع الحالة فيه بشكل دائم. إذا كان الدليل مفقودًا، فسيُنشأ حسب الحاجة. إذا ضُبط على السلسلة الخاصة "auto"، فسيُشتق مسار دائم آليًا من مسار صورة الآلة الافتراضية أو مسار الدليل، مع إلحاق اللاحقة ".tpmstate". إذا ضُبط على السلسلة الخاصة "off"، فستُحفظ حالة TPM بشكل عابر فقط وتُفرغ عند إيقاف تشغيل الآلة الافتراضية. هذا الوضع غير مناسب للآلات الافتراضية التي تقفل مفاتيح تعمية القرص بـ TPM، حيث ستُفقد هذه المفاتيح في كل إعادة تشغيل. المبدئي هو "auto".

    إذا حُدد --ephemeral، فسيتصرف الخيار "auto" مثل "off".

    أُضيف في الإصدار 258.

--efi-nvram-template=المسار
    يأخذ مساراً مطلقاً، أو مساراً نسبياً يبدأ بـ ./. يحدد المسار إلى ملف قالب NVRAM الخاص بـ EFI ليُنسخ ويُستخدم كحالة NVRAM المتغيرة الأولية لـ EFI. إذا لم يُحدد، يُنسخ ويُستخدم قالب NVRAM المبدئي من تعريف البرنامج الثابت.

    أُضيف في الإصدار 261.

--efi-nvram-state=المسار|آلي|إيقاف
    يُهيئ مكان وضع حالة NVRAM المتغيرة لـ EFI. يأخذ مسار نظام ملفات مطلقاً إلى ملف عادي لوضع الحالة فيه بشكل دائم. إذا كان الملف مفقوداً، يُنشأ عند الحاجة. إذا عُيِّنت السلسلة الخاصة "آلي"، يُشتق مسار دائم آلياً من مسار صورة VM أو مسار الدليل، مع إضافة اللاحقة ".efinvramstate". إذا عُيِّنت السلسلة الخاصة "إيقاف"، تُحتفظ حالة NVRAM المتغيرة لـ EFI بشكل مؤقت فقط وتُفرغ عند إيقاف VM. المبدئي هو "آلي".

    إذا حُدد --ephemeral، فسيتصرف الخيار "auto" مثل "off".

    أُضيف في الإصدار 261.

--secure-boot=BOOL
    يُهيئ ما إذا كان سيبحث عن برنامج ثابت يدعم الإقلاع الآمن. يأخذ قيمة منطقية أو "آلي". تعيين هذا إلى نعم يعادل --firmware-features=secure-boot وتعيين هذا إلى لا يعادل --firmware-features=~secure-boot. تعيين هذا إلى "آلي" يزيل "secure-boot" من قائمتي الميزات المُضمنة والمستبعدة.

    أُضيف في الإصدار 255.

--firmware=PATH
    يختار أي برنامج ثابت يُستخدم في VM. يأخذ أحد القيم "آلي" أو "uefi" أو "bios" أو "لا شيء" أو مساراً مطلقاً أو مساراً نسبياً يبدأ بـ ./. المبدئي هو "آلي"، الذي يختار برنامج UEFI الثابت ما لم يحدد --linux= صورة نواة غير PE، وفي هذه الحالة يُختار "لا شيء". "uefi" يُحمِّل برنامج OVMF الثابت (استخدم مساراً إلى ملف تعريف برنامج ثابت بصيغة JSON لاختيار واحد محدد). "bios" يتخطى تحميل OVMF ويسمح لـ QEMU باستخدام BIOS المدمج (مثل SeaBIOS على x86). "لا شيء" يُعطِّل تحميل البرنامج الثابت بالكامل ويتطلب تحديد --linux= للإقلاع المباشر للنواة. إقلاع UKI يتطلب "uefi". إذا حُددت السلسلة الخاصة "قائمة"، تُدرج جميع ملفات تعريف البرنامج الثابت المكتشفة. إذا حُددت السلسلة الخاصة "وصف"، يُطبع برنامج UEFI الثابت الذي سيُختار (مع مراعاة --firmware-features=) ويخرج البرنامج. إذا حُددت سلسلة فارغة، يُعاد تعيين الخيار إلى المبدئي.

    أُضيف في الإصدار 256.

--firmware-features=الميزة[,الميزة...]
    يأخذ قائمة مفصولة بفواصل من سلاسل ميزات البرنامج الثابت. يمكن تحديد هذا الخيار عدة مرات، وفي هذه الحالة تُدمج قوائم الميزات. عندما يُحدد، تُؤخذ في الاعتبار فقط تعريفات البرنامج الثابت التي تحتوي على جميع الميزات المطلوبة أثناء الاكتشاف الآلي للبرنامج الثابت. تُستبعد الميزات المسبوقة بـ "~": يُتجاوز البرنامج الثابت الذي يحتوي على مثل هذه الميزة. إذا ظهرت ميزة في كلتا القائمتين المُضمنة والمستبعدة، يكون للإدراج الأولوية. مبدئياً، يُستبعد البرنامج الثابت بميزة "المفاتيح المسجلة". إذا مُررت سلسلة فارغة، تُعاد تعيين كلتا قائمتي الميزات المُضمنة والمستبعدة. إذا حُددت السلسلة الخاصة "قائمة"، تُدرج جميع ميزات البرنامج الثابت المتاحة.

    أُضيف في الإصدار 261.

--coco=
    ملاحظة: هذه الميزة تجريبية، ومن المحتمل أن يتم تغييرها (أو إزالتها في شكلها الحالي) في إصدار مستقبلي من systemd.

    يُهيئ ما إذا كان سيُشغَّل الضيف كجهاز افتراضي سري. يأخذ أحد القيم "لا" أو "sev-snp". المبدئي هو "لا".

    "sev-snp" يُفعِّل AMD SEV-SNP. يتطلب ذلك KVM على مضيف x86_64 مع عتاد وبرنامج ثابت يدعمان SNP. يجب أن يشير --firmware= إلى صورة OVMF خام مبنية لـ SNP بصيغة .fd; التقسيم القياسي pflash + NVRAM غير مدعوم تحت SNP، لذا يُحمَّل البرنامج الثابت عبر QEMU's -bios والإقلاع الآمن غير متاح. تُرفض بيانات اعتماد SMBIOS المُمررة عبر --set-credential= أو --load-credential= لأنها خارج قياس إطلاق SNP. الإقلاع المباشر للنواة عبر --linux= مطلوب بحيث تُجزَّأ النواة وinitrd وسطر الأوامر في قياس الإطلاق ("kernel-hashes=on"); إقلاع النواة من صورة القرص عبر البرنامج الثابت سيتركها خارج القياس. يجب أن يُعامل vTPM، إذا وُصل عبر --tpm=، كغير موثوق من قبل الضيف.

    أُضيف في الإصدار 261.

  خيارات الشبكة

-n, --network-tap
    إنشاء جهاز TAP للربط الشبكي مع الآلة الافتراضية.

    ملاحظة: امتيازات الجذر مطلوبة لاستخدام شبكة TAP. بالإضافة إلى ذلك، يجب أن يكون systemd-networkd(8) يعمل ومضبوطًا بشكل صحيح على المضيف لتهيئة واجهة المضيف. يمكن العثور على ملف ".network" ذي الصلة في /usr/lib/systemd/network/80-vm-vt.network.

    أُضيف في الإصدار 255.

--network-user-mode
    استخدام وضع شبكة المستخدم.

    أُضيف في الإصدار 255.

  خيارات التنفيذ

--linux=PATH
    حدد صورة نواة لينكس لاستخدامها في إقلاع النواة المباشر. إذا استُخدمت صورة من نوع دليل وأُغفل --linux=، فسيقوم vmspawn بالبحث عن مدخلات محمل الإقلاع وفقًا لـ مواصفة محمل الإقلاع UAPI.1[1] مع افتراض أن XBOOTLDR يقع في /boot و ESP هو /efi على التوالي. إذا لم تُثبت نواة في الصورة، فستفشل الصورة في الإقلاع.

    أُضيف في الإصدار 256.

--initrd=PATH
    حدد initrd لاستخدامها في إقلاع النواة المباشر. إذا كان ملف --linux= المزود هو مدخل من النوع رقم 2 في مواصفة محمل الإقلاع UAPI.1[1]، فإن هذا المعطى غير مطلوب. إذا لم تُثبت initrd في الصورة، فستفشل الصورة في الإقلاع.

    يمكن تحديد --initrd= عدة مرات وسيقوم vmspawn بدمجها معًا.

    أُضيف في الإصدار 256.

--smbios11=STRING, -s STRING
    يمرر السلسلة المحددة إلى الآلة الافتراضية كسلسلة مورد SMBIOS من النوع رقم 11. هذا مفيد لضبط معايير الآلة الافتراضية المستدعاة بطرق مختلفة. انظر smbios-type-11(7) للتفاصيل.

    أُضيف في الإصدار 258.

--notify-ready=
    يضبط دعم الإشعارات من عملية بدء التشغيل (init) الخاصة بالآلة الافتراضية إلى systemd-vmspawn. إذا كان صحيحًا (true)، سيعتبر systemd-vmspawn الجهاز جاهزًا فقط عندما يتلقى رسالة "READY=1" من عملية init في الآلة الافتراضية. إذا كان خاطئًا (false)، سيعتبر systemd-vmspawn الجهاز جاهزًا فور إنشائه. في كلتا الحالتين، يرسل systemd-vmspawn إشعار الجاهزية الخاص به إلى مديره بعد جاهزية الآلة الافتراضية المنشأة. لمزيد من التفاصيل حول الإشعارات، انظر sd_notify(3).

    المبدئي هو صحيح (true). (لاحظ أن هذا يختلف عن الخيار الذي يحمل نفس الاسم في systemd-nspawn(1) والذي يكون مبدئيًا خاطئًا (false).)

    أُضيف في الإصدار 258.

  خيارات هوية النظام

-M، --machine=
    يحدد اسم الجهاز لهذه الآلة الافتراضية. يمكن استخدام هذا الاسم لتمييز هذه الآلة الافتراضية أثناء تشغيلها (على سبيل المثال في أدوات مثل machinectl(1) وما شابه).

    أُضيف في الإصدار 255.

--uuid=
    يحدد UUID المحدد للآلة الافتراضية. سيقوم نظام البدء بتهيئة /etc/machine-id من هذا إذا لم يكن هذا الملف قد ضُبط بعد. لاحظ أن هذا الخيار يسري فقط إذا كان ملف /etc/machine-id في الآلة الافتراضية فارغًا.

    أُضيف في الإصدار 256.

  خيارات الخاصية

-S، --slice=
    يجعل الآلة الافتراضية جزءًا من الـ slice المحددة، بدلاً من machine.slice المبدئية. ينطبق هذا فقط إذا كانت الآلة تعمل في وحدة scope خاصة بها، أي في حال عدم استخدام --keep-unit.

    أُضيف في الإصدار 258.

--property=
    يضبط خاصية وحدة على وحدة الـ scope للتسجيل في الجهاز. ينطبق هذا فقط إذا كانت الآلة تعمل في وحدة scope خاصة بها، أي في حال عدم استخدام --keep-unit. يأخذ تعيينات خصائص الوحدة بنفس تنسيق systemctl set-property. هذا مفيد لتعيين حدود الذاكرة وما شابه للآلة الافتراضية.

    أُضيف في الإصدار 258.

--register=
    يتحكم في ما إذا كان الجهاز الافتراضي مُسجَّلاً مع systemd-machined(8). يأخذ وسيطة منطقية أو "آلي"، والمبدئي هو "آلي". يضمن ذلك أن الجهاز الافتراضي يمكن الوصول إليه عبر machinectl(1). عندما يُعيَّن إلى "آلي"، تُحاول التسجيل ولكن تُتجاهل حالات الفشل.

    أُضيف في الإصدار 256.

  خيارات مساحات أسماء المستخدمين

--private-users=UID_SHIFT[:UID_RANGE]
    يتحكم في مساحات أسماء المستخدمين تحت --directory=. في حال تمكينه، يُوجّه virtiofsd(1) لمطابقة معرفات المستخدمين والمجموعات (UIDs و GIDs). يتضمن ذلك مطابقة معرفات UIDs/GIDs الخاصة المستخدمة في الآلة الافتراضية (بدءًا من المستخدم الجذر للآلة الافتراضية 0 فما فوق) بنطاق من معرفات UIDs/GIDs على المضيف غير مستخدم لأغراض أخرى (عادةً في النطاق الذي يتجاوز UID/GID المضيف 65536).

    إذا حُدد رقم أو رقمان مفصولان بنقطتين، فسيتم تشغيل مساحات أسماء المستخدمين. يحدد UID_SHIFT أول معرف UID/GID للمضيف لمطابقته، و UID_RANGE اختياري ويحدد عدد معرفات UIDs/GIDs للمضيف المراد تخصيصها للآلة الافتراضية. إذا أُغفل UID_RANGE، فسيُخصص 65536 معرف UID/GID.

    عند استخدام مساحات أسماء المستخدمين، يُختار دائمًا نطاق GID المخصص لكل آلة افتراضية ليكون مطابقًا لنطاق UID.

    أُضيف في الإصدار 256.

  خيارات الوصل

--bind=PATH, --bind-ro=PATH
    وصل دليل من المضيف إلى الآلة الافتراضية. يأخذ واحدًا من: معطى مسار — وفي هذه الحالة سيُوصل المسار المحدد من المضيف إلى نفس المسار في الآلة الافتراضية، أو زوج من المسارات مفصول بينهما بنقطتين — وفي هذه الحالة يكون المسار الأول المحدد هو المصدر في المضيف، والمسار الثاني هو الوجهة في الآلة الافتراضية. إذا لم يكن مسار المصدر مطلقًا، فسيُحلل بالنسبة لدليل العمل الحالي. ينشئ خيار --bind-ro= عمليات وصل ربط للقراءة فقط. تُفسر هروبات الشرطة المائلة العكسية، لذا يمكن استخدام "\:" لتضمين النقطتين في أي من المسارين. يمكن تحديد هذا الخيار عدة مرات لإنشاء نقاط وصل ربط مستقلة متعددة.

    أُضيف في الإصدار 256.

--extra-drive=[التنسيق:][نوع القرص:]المسار
    يأخذ صورة قرص أو جهاز كتلة على المضيف ويُزوّد ​​به الجهاز الظاهري كقرص إضافي. يُمكن تحديد تنسيق الصورة و/أو نوع القرص، اختياريًا، عن طريق إضافة قيمتيهما مفصولتين بنقطتين رأسيتين قبل المسار. يُمكن أن تظهر بادئات التنسيق ونوع القرص بأي ترتيب. التنسيق المبدئي هو "raw"، ونوع القرص المبدئي هو --image-disk-type= (والذي بدوره تكون قيمته المبدئية هي "virtio-blk"). لاحظ أن "qcow2" مدعوم فقط للملفات العادية، وليس لأجهزة الكتلة.

    أُضيف في الإصدار 256.

--bind-volume=المُزوِّد:الحجم[:التكوين][:المفتاح=القيمة,...]
    يُحصل على حجم تخزين من مُزوِّد storagectl(1) ويُوصله بالآلة الافتراضية. المُزوِّد هو اسم المُزوِّد (عادةً "block" أو "fs"). الحجم هو اسم الحجم المُمرَّر لطريقة Acquire() الخاصة بالمُزوِّد. التكوين يختار نوع جهاز الضيف ويأخذ واحداً من "virtio-blk" أو "virtio-scsi" أو "nvme" أو "scsi-cd". إذا كان فارغاً أو مُهملاً، فالمبدئي هو "virtio-blk".

    قائمة المفتاح=القيمة المفصولة بفواصل في النهاية تُمرر معاملات إلى io.systemd.StorageProvider.Acquire(): template=، create= (واحد من "any" أو "new" أو "open")، read-only= (أو ro=؛ يأخذ قيمة منطقية أو "auto")، size= / create-size= (حجم للأحجام المُنشأة)، request-as= (واحد من "blk" أو "reg" أو "dir"؛ "dir" مرفوض بواسطة vmspawn).

    كل حجم مُوصَّل يُعرف بالاسم "المُزوِّد:الحجم". الأحجام المُوصَّلة عند بدء التشغيل عبر هذا الخيار لا يمكن فصلها أثناء التشغيل عبر machinectl unbind-volume؛ فقط الأحجام المُضافة أثناء التشغيل عبر machinectl bind-volume قابلة للإزالة.

    يُبحث عن المُزوِّد تحت /run/systemd/io.systemd.StorageProvider/ لوضع النظام (أو $XDG_RUNTIME_DIR/systemd/io.systemd.StorageProvider/ لوضع المستخدم)، مطابقاً لنطاق التشغيل المُختار عبر --user / --system.

    أُضيف في الإصدار 261.

--bind-user=
    يربط الدليل المنزلي للمستخدم المحدد على المضيف بالآلة الافتراضية. يأخذ اسم مستخدم موجود على المضيف كمعطى. يمكن استخدامه عدة مرات لربط مستخدمين متعددين بالآلة الافتراضية. يقوم هذا بأمرين:

        1. يُتاح الدليل المنزلي للمستخدم من المضيف في /run/vmhost/home/ باستخدام virtiofs. يقوم virtiofsd بترجمة المعرفات لمطابقة UID/GID الخاص بمستخدم المضيف مع UID/GID المخصص له في الآلة الافتراضية.

        2. تُولد سجلات مستخدم ومجموعة بتنسيق JSON تصف المستخدم المطابق والتي تُمرر إلى الآلة الافتراضية باستخدام وثائق الاستيثاق "userdb.transient.*". وهي تحتوي على تمثيل مصغر لسجل مستخدم المضيف، معدلًا وفقًا لـ UID/GID ومسار الدليل المنزلي المخصص للمستخدم في الآلة الافتراضية. ستلتقط وحدة nss-systemd(8) الخاصة بـ glibc NSS هذه السجلات من هناك وتجعلها متاحة في قواعد بيانات المستخدمين/المجموعات بالآلة الافتراضية.

    يضمن الجمع بين العمليتين أعلاه إمكانية تسجيل الدخول إلى الآلة الافتراضية باستخدام نفس معلومات الحساب الموجودة على المضيف. تُطابق بيانات المستخدم بشكل عابر فقط، أثناء تشغيل الآلة الافتراضية، ولا تؤدي عملية المطابقة نفسها إلى تغييرات دائمة في الآلة الافتراضية (باستثناء رسائل السجل التي قد تُولد وقت تسجيل الدخول وما شابه). لاحظ بشكل خاص أن تخصيص UID/GID في الآلة الافتراضية لا يتم بشكل دائم. إذا تم ربط المستخدم بشكل عابر، فمن الأفضل عدم السماح للمستخدم بإجراء تغييرات دائمة على الآلة الافتراضية. إذا ترك المستخدم ملفات أو أدلة يملكها، وأُعيد استخدام معرفات UIDs/GIDs هذه أثناء استدعاءات الآلة الافتراضية لاحقًا (ربما باستخدام مطابقة --bind-user= مختلفة)، فستكون تلك الملفات والأدلة متاحة للمستخدم "الجديد".

    تعمل مطابقة سجلات المستخدم/المجموعة فقط إذا كانت الآلة الافتراضية تحتوي على إصدار systemd 258 أو أحدث، مع ضبط nss-systemd بشكل صحيح في nsswitch.conf. انظر nss-systemd(8) للتفاصيل.

    لاحظ أن سجل المستخدم المنقول من المضيف إلى الآلة الافتراضية سيحتوي على هاش كلمة سر يونكس (UNIX) للمستخدم، بحيث يمكن تسجيل الدخول بسلاسة في الآلة الافتراضية. إذا كانت الآلة الافتراضية أقل موثوقية من المضيف، فمن المهم إذًا استخدام دالة هاش قوية لكلمات سر يونكس (مثل yescrypt أو ما شابه، مع بادئة الهاش "$y$").

    أُضيف في الإصدار 259.

--bind-user-shell=
    عند استخدامه مع --bind-user=، يتضمن الصدفة المحددة في سجلات المستخدمين المربوطين بالآلة الافتراضية. يأخذ إما قيمة منطقية أو مسارًا مطلقًا.

        • إذا كان خاطئًا (المبدئي)، فلن تُمرر أي صدفة في سجلات المستخدم للمستخدمين المربوطين بالآلة الافتراضية. هذا يؤدي لاستخدام المستخدمين المربوطين للصدفة المبدئية للآلة الافتراضية.

        • إذا كان صحيحًا، تُدرج الصدفات المحددة في سجلات مستخدم المضيف في سجلات جميع المستخدمين المربوطين بالآلة الافتراضية.

        • إذا مُرر مسار مطلق، فسيُحدد ذلك المسار كصدفة لسجلات جميع المستخدمين المربوطين بالآلة الافتراضية.

    ملاحظة: لن يتحقق هذا مما إذا كانت الصدفات المحددة موجودة في الآلة الافتراضية.

    هذه العملية مدعومة فقط بالاقتران مع --bind-user=.

    أُضيف في الإصدار 259.

--bind-user-group=اسم
    عند استخدامه مع --bind-user=، يتضمن المجموعة المحددة كمجموعة إضافية في سجلات المستخدمين المربوطين بالآلة الافتراضية. يأخذ اسم مجموعة.

    ملاحظة: لن يتحقق هذا مما إذا كانت المجموعات المحددة موجودة في الآلة الافتراضية.

    هذه العملية مدعومة فقط بالاقتران مع --bind-user=.

    أُضيف في الإصدار 259.

  خيارات التسجيل

--forward-journal=FILE|DIR
    توجيه سجل (journal) الآلة الافتراضية إلى المضيف. يُستخدم systemd-journal-remote(8) حاليًا لاستقبال مدخلات السجل الموجهة من الآلة الافتراضية الضيفة. يحدد هذا الخيار مكان حفظ هذا السجل على المضيف وله نفس دلالات -o/--output الموضحة في systemd-journal-remote(8).

    أُضيف في الإصدار 256.

--forward-journal-max-use=BYTES, --forward-journal-keep-free=BYTES, --forward-journal-max-file-size=BYTES, --forward-journal-max-files=N
    هذه الخيارات تُهيئ الإعدادات المُقابلة لـ systemd-journal-remote(8) عند توجيه إدخالات السجل من الآلة الافتراضية. انظر journal-remote.conf(5) لأوصاف هذه الإعدادات.

    أُضيف في الإصدار 261.

  خيارات SSH

--pass-ssh-key=BOOL
    مبدئيًا، يُولد مفتاح SSH للسماح لـ systemd-vmspawn بفتح اتصال D-Bus بناقل systemd الخاص بالآلة الافتراضية. ضبط هذا على "no" سيعطل توليد مفتاح SSH.

    المفاتيح المولدة عابرة. أي أنها صالحة فقط للاستدعاء الحالي لـ systemd-vmspawn، وعادةً لا تُحفظ بشكل دائم.

    أُضيف في الإصدار 256.

--ssh-key-type=TYPE
    يضبط نوع مفتاح SSH المراد توليده، انظر ssh-keygen(1) لمزيد من المعلومات.

    مبدئيًا، تُولد مفاتيح "ed25519"، ومع ذلك قد تكون مفاتيح "rsa" مفيدة أيضًا إذا كانت الآلة الافتراضية تحتوي على إصدار قديم جدًا من sshd(8).

    أُضيف في الإصدار 256.

  خيارات الإدخال والإخراج

--console=وضع
    يُهيئ كيفية إعداد وحدة التحكم للآلة الافتراضية. يأخذ واحداً من "interactive" أو "read-only" أو "native" أو "gui" أو "headless". المبدئي هو "interactive". "interactive" يُوفر واجهة طرفية تفاعلية للآلة الافتراضية. "read-only" مشابه، لكنه للقراءة فقط بشكل صارم، أي لا يقبل أي إدخال من المستخدم. "native" يُوفر أيضاً واجهة قائمة على TTY، لكنه يستخدم تنفيذ qemu الأصلي (مما يعني أن مراقب qemu متاح). "gui" يُظهر واجهة qemu الرسومية. "headless" يُشغل الآلة الافتراضية بدون أي وحدة تحكم، وهو مفيد للاستخدام الآلي أو المُبرمج.

    أُضيف في الإصدار 256.

--console-transport=النقل
    يُهيئ النقل لاستخدامه لوحدة تحكم الآلة الافتراضية. يأخذ واحداً من "virtio" أو "serial". المبدئي هو "virtio". "virtio" يستخدم جهاز virtio-serial، الذي يظهر كـ /dev/hvc0 في الآلة الافتراضية. "serial" يستخدم منفذاً تسلسلياً عادياً، يظهر كـ /dev/ttyS0 (أو /dev/ttyAMA0 على ARM) في الآلة الافتراضية. هذا الخيار له تأثير فقط في أوضاع --console=interactive و --console=read-only و --console=native.

    أُضيف في الإصدار 261.

--background=COLOR
    تغيير لون خلفية الطرفية إلى لون ANSI المحدد طالما كانت الآلة الافتراضية تعمل. يجب أن يكون اللون المحدد لون خلفية ANSI X3.64 SGR، أي سلاسل مثل "40"، "41"، ...، "47"، "48;2;..."، "48;5;...". انظر كود هروب ANSI (ويكيبيديا)[2] للتفاصيل. خصص سلسلة فارغة لتعطيل أي تلوين. هذا له تأثير فقط في وضعي --console=interactive و --console=read-only.

    أُضيف في الإصدار 256.

  بيانات الاعتماد

--load-credential=المعرف:المسار، --set-credential=المعرف:القيمة
    تمرير وثيقة استيثاق إلى الآلة الافتراضية. يقابل هذان الخياران إعدادي LoadCredential= و SetCredential= في ملفات الوحدات. انظر systemd.exec(5) للتفاصيل حول هذه المفاهيم، بالإضافة إلى صيغة معطيات الخيار.

    لتضمين بيانات ثنائية في بيانات الاعتماد لـ --set-credential=، استخدم هروباً بنمط لغة C (أي "\n" لتضمين سطر جديد، أو "\x00" لتضمين بايت NUL). لاحظ أن الصدفة المستدعاة قد تطبق بالفعل إلغاء الهروب مرة واحدة، لذا قد يتطلب ذلك هروباً مزدوجاً!

    يُفضل تمرير بيانات الاعتماد إلى الآلة الافتراضية عبر سلاسل SMBIOS Type 11 أو ملفات QEMU fw_cfg. إذا لم تكن أي من الآليتين متاحة، تُمرر بيانات الاعتماد على سطر أوامر النواة باستخدام systemd.set_credential_binary= وهي ليست قناة سرية. لا تستخدم هذا لتمرير الأسرار إلى الآلة الافتراضية في تلك الحالة.

    أُضيف في الإصدار 255.

  أخرى

--no-pager
    لا تمرر المخرجات إلى برنامج عرض (pager).

-h، --help
    اطبع نص مساعدة قصير واخرج.

--version
    اطبع سلسلة إصدار قصيرة واخرج.

--no-ask-password
    لا تسأل المستخدم عن الاستيثاق للعمليات ذات الامتيازات.

البيئة

$SYSTEMD_LOG_LEVEL
    الحد الأقصى لمستوى السجل للرسائل الصادرة (تُكتم الرسائل ذات مستوى السجل الأعلى، أي الأقل أهمية). يأخذ قائمة قيم مفصولة بفواصل. يمكن أن تكون القيمة إما واحدة من (بترتيب تنازلي للأهمية) emerg، أو alert، أو crit، أو err، أو warning، أو notice، أو info، أو debug، أو رقمًا صحيحًا في النطاق من 0 إلى 7. راجع syslog(3) لمزيد من المعلومات. يمكن اختياريًا سبق كل قيمة بأحد الخيارات console، أو syslog، أو kmsg أو journal متبوعة بنقطتين لضبط الحد الأقصى لمستوى السجل لهذا الهدف المحدد (مثلاً: SYSTEMD_LOG_LEVEL=debug,console:info يحدد التسجيل بمستوى debug باستثناء التسجيل في الطرفية الذي يجب أن يكون بمستوى info). لاحظ أن الحد الأقصى العالمي لمستوى السجل له الأولوية على أي حدود مستويات سجل لكل هدف على حدة.

$SYSTEMD_LOG_COLOR
    قيمة منطقية. إذا كانت صحيحة، فستُلون الرسائل المكتوبة في الـ tty حسب الأولوية.

    هذا الإعداد مفيد فقط عندما تُكتب الرسائل مباشرة إلى الطرفية، لأن journalctl(1) والأدوات الأخرى التي تعرض السجلات ستلون الرسائل بناءً على مستوى السجل من تلقاء نفسها.

$SYSTEMD_LOG_TIME
    قيمة منطقية. إذا كانت صحيحة، فستُسبق رسائل سجل الطرفية بختم زمني.

    هذا الإعداد مفيد فقط عندما تُكتب الرسائل مباشرة إلى الطرفية أو إلى ملف، لأن journalctl(1) والأدوات الأخرى التي تعرض السجلات ستُرفق طوابع زمنية بناءً على البيانات الوصفية للمدخلات من تلقاء نفسها.

$SYSTEMD_LOG_LOCATION
    قيمة منطقية. إذا كانت صحيحة، فستُسبق الرسائل باسم الملف ورقم السطر في الشيفرة المصدرية حيث نشأت الرسالة.

    لاحظ أن موقع السجل غالبًا ما يُرفق كبيانات وصفية بمدخلات اليوميات على أي حال. ومع ذلك، قد يكون تضمينه مباشرة في نص الرسالة مفيدًا عند تنقيح البرامج.

$SYSTEMD_LOG_TID
    قيمة منطقية. إذا كانت صحيحة، فستُسبق الرسائل بمعرّف الخيط الرقمي الحالي (TID).

    لاحظ أن هذه المعلومات تُرفق كبيانات وصفية بمدخلات اليوميات على أي حال. ومع ذلك، قد يكون تضمينه مباشرة في نص الرسالة مفيدًا عند تنقيح البرامج.

$SYSTEMD_LOG_TARGET
    وجهة رسائل السجل. أحد الخيارات: console (التسجيل في الطرفية المرفقة)، أو console-prefixed (التسجيل في الطرفية المرفقة ولكن مع بادئات ترميز مستوى السجل و"المرفق"، راجع syslog(3)، أو kmsg (التسجيل في ذاكرة السجل الدائرية للنواة)، أو journal (التسجيل في اليوميات)، أو journal-or-kmsg (التسجيل في اليوميات إذا كانت متاحة، وفي kmsg بخلاف ذلك)، أو auto (تحديد هدف السجل المناسب آليًا، وهو المبدئي)، أو null (تعطيل مخرج السجل).

$SYSTEMD_LOG_RATELIMIT_KMSG
    فيما إذا كان سيُحد معدل kmsg أم لا. يأخذ قيمة منطقية. القيمة المبدئية هي "true". إذا عُطّل، فلن يحد systemd من معدل الرسائل المكتوبة في kmsg.

$SYSTEMD_PAGER، $PAGER
    مستعرض الصفحات المراد استخدامه عندما لا يُعطى الخيار --no-pager. يُستخدم $SYSTEMD_PAGER إذا كان مضبوطًا؛ وإلا فيُستخدم $PAGER. إذا لم يُضبط أي من $SYSTEMD_PAGER أو $PAGER، فتُجرب مجموعة من التطبيقات المعروفة لمستعرضات الصفحات تباعًا، بما في ذلك less(1) و more(1)، حتى يُعثر على أحدها. إذا لم يُكتشف أي تطبيق لمستعرض الصفحات، فلا يُستدعى أي مستعرض. ضبط متغيرات البيئة هذه على سلسلة فارغة أو القيمة "cat" يعادل تمرير الخيار --no-pager.

    ملاحظة: إذا لم يُضبط $SYSTEMD_PAGERSECURE، فلا يمكن استخدام $SYSTEMD_PAGER و $PAGER إلا لتعطيل مستعرض الصفحات (باستخدام "cat" أو "")، ويُتجاهل فيما عدا ذلك.

$SYSTEMD_LESS
    تجاوز الخيارات الممررة إلى less (مبدئيًا "FRSXMK").

    قد يرغب المستخدمون في تغيير خيارين على وجه الخصوص:

    K
        يوجه هذا الخيار مستعرض الصفحات بالخروج فورًا عند الضغط على Ctrl+C. للسماح لـ less بالتعامل مع Ctrl+C بنفسه للعودة إلى محث أوامر المستعرض، قم بإلغاء ضبط هذا الخيار.

        إذا لم تتضمن قيمة $SYSTEMD_LESS الحرف "K"، وكان المستعرض المستدعى هو less، فسيُتجاهل Ctrl+C من قبل الملف التنفيذي، ويجب معالجته من قبل المستعرض.

    X
        يوجه هذا الخيار مستعرض الصفحات بعدم إرسال سلاسل تهيئة وإنهاء termcap إلى الطرفية. يُضبط مبدئيًا للسماح لمخرجات الأوامر بالبقاء مرئية في الطرفية حتى بعد خروج المستعرض. ومع ذلك، فإن هذا يمنع بعض وظائف المستعرض من العمل، لا سيما أن المخرجات المفصولة بصفحات لا يمكن تمريرها باستخدام الفأرة.

    لاحظ أن ضبط متغير البيئة العادي $LESS ليس له أي تأثير عند استدعاء less بواسطة أدوات systemd.

    راجع less(1) لمزيد من النقاش.

$SYSTEMD_LESSCHARSET
    يتجاوز طقم المحارف الممرر إلى less (مبدئيًا "utf-8"، إذا حُدّد أن الطرفية المستدعية متوافقة مع UTF-8).

    لاحظ أن ضبط متغير البيئة العادي $LESSCHARSET ليس له أي تأثير عند استدعاء less بواسطة أدوات systemd.

$SYSTEMD_PAGERSECURE
    تدعم أوامر المستعرض (pager) الشائعة مثل less(1)، بالإضافة إلى "التصفح"، أي التمرير عبر المخرجات، فتح ملفات أخرى أو الكتابة إليها وتشغيل أوامر صدفة عشوائية. عند استدعاء الأوامر بامتيازات مرفوعة، على سبيل المثال تحت sudo(8) أو pkexec(1)، يصبح المستعرض حدًا أمنيًا. يجب الحرص على استخدام البرامج ذات الوظائف المحدودة للغاية فقط كمستعرضات، وعدم السماح بالميزات التفاعلية غير المقصودة مثل فتح ملفات جديدة أو إنشائها أو بدء عمليات فرعية. يمكن تمكين "الوضع الآمن" للمستعرض كما هو موضح أدناه، إذا كان المستعرض يدعم ذلك (معظم المستعرضات لم تُكتب بطريقة تأخذ هذا في الاعتبار). يوصى إما بتمكين "الوضع الآمن" صراحةً أو تعطيل المستعرض تمامًا باستخدام --no-pager أو PAGER=cat عند السماح للمستخدمين غير الموثوق بهم بتنفيذ أوامر بامتيازات مرفوعة.

    يأخذ هذا الخيار وسيطًا منطقيًا. عند ضبطه على صحيح (true)، يُمكن "الوضع الآمن" لمستعرض الصفحات. في "الوضع الآمن"، سيُضبط LESSSECURE=1 عند استدعاء المستعرض، مما يوجه المستعرض لتعطيل الأوامر التي تفتح أو تنشئ ملفات جديدة أو تبدأ عمليات فرعية جديدة. حاليًا، يُعرف فقط less(1) بقدرته على فهم هذا المتغير وتطبيق "الوضع الآمن".

    عند الضبط إلى false، لا توضع قيود على أداة التصفح (pager). إن ضبط SYSTEMD_PAGERSECURE=0 أو عدم إزالته من البيئة الموروثة قد يسمح للمستخدم باستدعاء أوامر اعتباطية.

    عندما لا يكون $SYSTEMD_PAGERSECURE مضبوطًا، تحاول أدوات systemd آليًا معرفة ما إذا كان ينبغي تفعيل "النمط الآمن" وما إذا كان المستعرض (pager) يدعمه. يُفعل "النمط الآمن" إذا كان معرف المستخدم الفعلي (UID) ليس هو نفسه مالك جلسة الولوج، انظر geteuid(2) و sd_pid_get_owner_uid(3)، أو عند التشغيل تحت sudo(8) أو أدوات مماثلة ($SUDO_UID مضبوط [3]). في تلك الحالات، سيُضبط SYSTEMD_PAGERSECURE=1 ولن تُستخدم المستعرضات التي لا يُعرف عنها تنفيذ "النمط الآمن" على الإطلاق. لاحظ أن هذا الاكتشاف الآلي يغطي فقط الآليات الأكثر شيوعًا لرفع الامتيازات وهو مخصص للتسهيل. يوصى بضبط $SYSTEMD_PAGERSECURE صراحة أو تعطيل المستعرض.

    لاحظ أنه إذا أُريد احترام المتغيرات $SYSTEMD_PAGER أو $PAGER، لغير غرض تعطيل مستعرض الصفحات، فيجب ضبط $SYSTEMD_PAGERSECURE أيضًا.

$SYSTEMD_COLORS
    يأخذ وسيطًا منطقيًا (boolean)، أو قيمة خاصة. مبدئيًا (عند عدم الضبط)، سيستخدم systemd والأدوات المرتبطة به الألوان في مخرجاتها إذا أمكن ذلك. إذا ضُبط $COLORTERM على "truecolor" أو "24bit"، فستُمكّن ألوان 24 بت، وإلا فستُستخدم 256 لونًا، ما لم يشر $NO_COLOR أو $TERM إلى تعطيل الألوان.

    true
        نفس حالة عدم الضبط، باستثناء تجاهل $NO_COLOR.

    false
        سيكون المخرج أحادي اللون.

    "16"، "256"، "24bit"
        استخدم دائمًا ألوان ANSI الـ 16 الأساسية، أو 256 لونًا، أو لون 24 بت، على التوالي.

    "auto-16"، "auto-256"، "auto-24bit"
        استخدم كمية الألوان المعطاة، بشرط $TERM، وما هو متصل بالطرفية.

$SYSTEMD_URLIFY
    يجب أن تكون القيمة منطقية. تتحكم فيما إذا كان يجب توليد روابط قابلة للنقر في المخرج لمحاكيات الطرفية التي تدعم ذلك. يمكن تحديد هذا لتجاوز القرار الذي يتخذه systemd بناءً على $TERM وشروط أخرى.

أمثلة

مثال 1. تشغيل صورة آلة افتراضية لـ Arch Linux مولدة بواسطة mkosi

    $ mkosi -d arch -p systemd -p linux --autologin -o image.raw -f build
    $ systemd-vmspawn --image=image.raw

مثال 2. استيراد وتشغيل صورة Fedora 44 السحابية باستخدام importctl

    $ curl -L \
           -O https://download.fedoraproject.org/pub/fedora/linux/releases/44/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-44-1.7.x86_64.qcow2 \
           -O https://download.fedoraproject.org/pub/fedora/linux/releases/44/Cloud/x86_64/images/Fedora-Cloud-44-1.7-x86_64-CHECKSUM \
           -O https://fedoraproject.org/fedora.gpg
    $ gpgv --keyring ./fedora.gpg Fedora-Cloud-44-1.7-x86_64-CHECKSUM
    $ sha256sum -c Fedora-Cloud-44-1.7-x86_64-CHECKSUM
    # importctl import-raw -m Fedora-Cloud-Base-Generic-44-1.7.x86_64.qcow2 fedora-44-cloud
    # systemd-vmspawn -M fedora-44-cloud

مثال 3. بناء وتشغيل صورة نظام systemd وتوجيه سجل الآلة الافتراضية إلى ملف محلي

    $ mkosi build
    $ systemd-vmspawn \
        -D mkosi.output/system \
        --private-users $(grep $(whoami) /etc/subuid | cut -d: -f2) \
        --linux mkosi.output/system.efi \
        --forward-journal=vm.journal \
        enforcing=0

ملاحظة: يستخدم هذا المثال أيضًا معطى لسطر أوامر النواة لضمان عدم بدء SELinux في وضع الإنفاذ (enforcing mode).

مثال 4. الدخول عبر SSH إلى آلة افتراضية تعمل باستخدام systemd-ssh-proxy

    $ mkosi build
    $ my_vsock_cid=3735928559
    $ systemd-vmspawn \
        -D mkosi.output/system \
        --private-users $(grep $(whoami) /etc/subuid | cut -d: -f2) \
        --linux mkosi.output/system.efi \
        --vsock-cid $my_vsock_cid \
        enforcing=0
    $ ssh root@vsock/$my_vsock_cid -i /run/user/$UID/systemd/vmspawn/machine-*-system-ed25519

حالة الخروج

إذا حدث خطأ، فستُمرر قيمة errno إلى رمز الإرجاع. إذا تم توفير EXIT_STATUS بواسطة الصورة قيد التشغيل، فسيُرجع ذلك الرمز. وإلا، يُرجع EXIT_SUCCESS.

انظر أيضًا

systemd(1)، mkosi(1)، machinectl(1)، importctl(1)، مواصفة محمل الإقلاع UAPI.1[1]

ملاحظات

1.  مواصفات محمل الإقلاع UAPI.1
    https://uapi-group.org/specifications/specs/boot_loader_specification

2.  رمز هروب ANSI (ويكيبيديا)
    https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters

3.  يوصى للأدوات الأخرى بضبط والتحقق من $SUDO_UID حسب الاقتضاء، ومعاملته كواجهة مشتركة.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.