mkosi(1)

الاسم
mkosi — ابْنِ صور أنظمة تشغيل مخصصة

موجز
mkosi [الخيارات...] init

mkosi [الخيارات...] summary

mkosi [الخيارات...] cat-config

mkosi [الخيارات...] build [-- سطر الأوامر...]

mkosi [الخيارات...] shell [-- سطر الأوامر...]

mkosi [الخيارات...] boot [-- إعدادات nspawn...]

mkosi [الخيارات...] vm [-- معاملات vmm...]

mkosi [الخيارات...] ssh [-- سطر الأوامر...]

mkosi [الخيارات...] journalctl [-- سطر الأوامر...]

mkosi [الخيارات...] coredumpctl [-- سطر الأوامر...]

mkosi [الخيارات...] sysupdate [-- إعدادات sysupdate...]

mkosi [الخيارات...] box [-- سطر الأوامر...]

mkosi [الخيارات...] dependencies [-- الخيارات...]

mkosi [الخيارات...] clean

mkosi [الخيارات...] serve

mkosi [الخيارات...] burn <الجهاز>

mkosi [الخيارات...] bump

mkosi [الخيارات...] genkey

mkosi [الخيارات...] documentation [manual]

mkosi [الخيارات...] completion [صدفة]

mkosi [الخيارات...] latest-snapshot

mkosi [الخيارات...] help

الوصف
mkosi هو أداة لبناء صور أنظمة تشغيل مخصصة بسهولة. إنه غلاف متطور حول dnf و apt و pacman و zypper يمكنه توليد صور أقراص بمزايا وإضافات عديدة.

  أفعال سطر الأوامر
تُعرف أفعال سطر الأوامر التالية:

init
    يُهيّئ mkosi. هذه عملية تُنفذ لمرة واحدة تضبط ملفات ضبط متنوعة مطلوبة لتجربة مثلى. حاليًا لا يهيئ هذا سوى ملف tmpfiles.d لمجلد خبيئة حزم mkosi للتأكد من تنظيف الملفات القديمة وغير المستخدمة آليًا.

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

cat-config
    يُخرج أسماء ومحتويات جميع ملفات الضبط المُحمّلة. يُحمّل mkosi مجموعة من الملفات من مواقع مختلفة وهذا الأمر يسهل معرفة ما ضُبط وأين ضُبط.

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

shell
    يبني هذا الصورة إن لم تُبنَ بعد، ثم يستدعي systemd-nspawn لتشغيل صدفة تفاعلية في الصورة. لا يتطلب هذا إقلاع النظام، بل هو أشبه بـ chroot أفضل. يمكن تحديد سطر أوامر اختياري بعد فعل shell، ليُستدعى بدلاً من الصدفة في الحاوية. لتمرير خيارات إضافية لـ nspawn، افصلها عن الخيارات العادية باستخدام --.

boot
    مشابه لـ shell، ولكن بدلاً من إطلاق صدفة، فإنه يُقلع systemd في الصورة باستخدام systemd-nspawn. يمكن تحديد معطيات إضافية بعد فعل boot، والتي تُمرر كـ سطر أوامر النواة لنظام التهيئة في الصورة. لتمرير خيارات إضافية لـ nspawn، افصلها عن الخيارات العادية باستخدام --.

vm  مشابه لـ boot، ولكنه يستخدم مراقب الآلة الافتراضية المضبوط (مبدئيًا qemu) لإقلاع الصورة، أي بدلاً من الاستنراض بالحاويات، يُستخدم الاستنراض بالآلة الافتراضية. تعتمد كيفية تفسير معطيات سطر الأوامر الإضافية على مراقب الآلة الافتراضية المضبوط. انظر VirtualMachineMonitor= لمزيد من المعلومات. لتمرير خيارات إضافية لمراقب الآلة الافتراضية، افصلها عن الخيارات العادية باستخدام --.

ssh عند بناء الصورة بخيار Ssh=always أو إذا كانت خدمة sshd-vsock الخاصة بـ systemd تعمل في الآلة الافتراضية (الإصدار 256+)، يتصل هذا الأمر بآلة افتراضية مُقلعة عبر SSH. تأكد من تشغيل mkosi ssh بنفس الضبط المستخدم في mkosi build ليتوفر لديه المعلومات اللازمة للاتصال بالآلة الافتراضية عبر SSH. تحديدًا، يُستخدم مفتاح SSH الخاص من إعداد SshKey= للاتصال بالآلة الافتراضية. استخدم mkosi genkey لتوليد مفتاح وشهادة آليًا ليلتقطهما mkosi. أي معطيات تُمرر بعد فعل ssh تُمرر كمعطيات لاستدعاء ssh. لتمرير خيارات إضافية، افصلها عن الخيارات العادية باستخدام --. للاتصال بحاوية، استخدم machinectl login أو machinectl shell.

    يمكن استخدام خيار Machine= لإعطاء الآلة اسم مضيف مخصص عند إقلاعها، والذي يمكن استخدامه لاحقًا لـ ssh إلى الصورة (مثلاً: mkosi --machine=mymachine vm يتبعه mkosi --machine=mymachine ssh).

journalctl
    يستخدم journalctl لمعاينة السجل داخل الصورة. جميع المعطيات المحددة بعد فعل journalctl والمفصولة بـ -- عن الخيارات العادية تُلحق باستدعاء journalctl.

coredumpctl
    يستخدم coredumpctl للبحث عن ملفات تفريغ الذاكرة (coredumps) داخل الصورة. جميع المعطيات المحددة بعد فعل coredumpctl والمفصولة بـ -- عن الخيارات العادية تُلحق باستدعاء coredumpctl.

sysupdate
    يستدعي systemd-sysupdate مع ضبط خيار --transfer-source= على مجلد المخرجات وضبط خيار --definitions= على المجلد المضبوط بـ SysupdateDirectory=. جميع المعطيات المحددة بعد فعل sysupdate والمفصولة عن الخيارات العادية بـ -- تُمرر مباشرة إلى systemd-sysupdate.

box يُشغل أوامر عشوائية داخل نفس البيئة المستخدمة لتنفيذ أفعال أخرى مثل boot و shell و vm وغيرها. هذا يعني أن /usr سيُستبدل بـ /usr من شجرة الأدوات إذا استخدمت واحدة، بينما يظل كل شيء آخر في مكانه. إذا لم يُوفر أي أمر، فسيُنفذ $SHELL أو bash إذا لم يكن $SHELL مضبوطًا. لتمرير خيارات إضافية للأمر المعطى، افصلها عن الخيارات العادية بـ --.

clean
    يُزيل مخلفات البناء الناتجة عن بناء سابق. إذا دُمج مع -f، فإنه يزيل أيضًا صور خبيئة البناء التزايدي وشجرة الأدوات. إذا حُدد -f مرتين، فإنه يزيل أيضًا أي خبيئة حزم.

serve
    يبني هذا الصورة إذا لم تُبنَ بعد، ثم يخدم مجلد المخرجات (أي عادةً mkosi.output/، انظر أدناه) عبر خادم HTTP مدمج صغير، يستمع على المنفذ 8081. ادمجه مع -f لإعادة بناء الصورة دون قيد أو شرط قبل خدمتها. هذا الأمر مفيد لاختبار جلب صور أنظمة التشغيل عبر الشبكة، مثلاً عبر machinectl pull-raw ... و machinectl pull-tar ....

burn <الجهاز>
    يبني هذا الصورة إذا لم تُبنَ بعد، ثم يكتبها في الجهاز الكتلي المحدد. تُكتب محتويات القسم كما هي، ولكن يتم تصحيح جدول أقسام GPT ليطابق حجم القطاع والقرص للوسيط المحدد.

bump
    يرفع إصدار الصورة من mkosi.version ويكتب سلسلة الإصدار الناتجة في mkosi.version. هذا مفيد لتنفيذ مخطط إصدارات بسيط: في كل مرة يُستدعى فيها هذا الفعل يُرفع الإصدار استعدادًا للبناء اللاحق. لاحظ أن --auto-bump/-B يمكن استخدامه لرفع الإصدار آليًا كجزء من عملية البناء. لا يُكتب الإصدار الجديد في mkosi.version إلا إذا نجح البناء في تلك الحالة.

    إذا وجد mkosi.bump، فسيُستدعى لتوليد الإصدار الجديد بدلاً من استخدام منطق mkosi الخاص.

genkey
    يولّد زوجًا من مفاتيح الإقلاع الآمن (SecureBoot) للاستخدام مع خياري SecureBootKey=/--secure-boot-key= و SecureBootCertificate=/--secure-boot-certificate=.

documentation
    يُظهر توثيق mkosi. إذا لم يُعطَ أي معطى، تُعرض صفحة دليل mkosi، ولكن المعطيات mkosi و mkosi-initrd و initrd و mkosi-sandbox و sandbox و mkosi.news و news مدعومة وتُظهر على التوالي صفحات الدليل لـ mkosi و mkosi-initrd و mkosi-sandbox وملف الأخبار (NEWS) لـ mkosi.

    مبدئيًا سيحاول هذا الفعل عدة طرق لإخراج التوثيق، ولكن يمكن اختيار خيار محدد باستخدام خيار --doc-format. يُشجع محزمو التوزيعات على إضافة ملف mkosi.1 في مجلد mkosi/resources لحزمة بايثون، إذا كان مفقودًا، وكذلك تثبيته في مسار البحث المناسب لصفحات الدليل. يمكن توليد صفحة الدليل من ملف markdown mkosi/resources/man/mkosi.1.md مثلاً عبر pandoc -t man -s -o mkosi.1 mkosi.1.md.

completion
    يولّد إكمال الصدفة للصدفة المعطاة كمعطى ويطبعها في الخرج القياسي. تُفهم المعطيات bash و fish و zsh.

dependencies
    يُخرج قائمة الحزم المطلوبة من قبل mkosi لبناء وإقلاع الصور.

    يمكن تمرير هذه القائمة مباشرة إلى مدير حزم لتثبيت الحزم. مثلاً، إذا كان النظام المضيف يستخدم مدير الحزم dnf، يمكن تثبيت الحزم كما يلي:

            mkosi dependencies | xargs -d '\n' dnf install

    مبدئيًا، تُعرض التبعيات المطلوبة لبناء الصور بـ mkosi فقط. يمكن تفعيل تشكيلات شجرة أدوات إضافية لإخراج الحزم التابعة لتلك التشكيلات أيضًا. مثلاً، تشغيل mkosi dependencies -- --profile runtime سيخرج أيضًا الحزم في تشكيلة runtime بالإضافة إلى الحزم العادية. انظر توثيق ToolsTreeProfiles= لقائمة بالتشكيلات المتاحة.

latest-snapshot
    يُخرج أحدث لقطة متاحة في المرآة المضبوطة.

    هذا الفعل مفيد لرفع اللقطات آليًا بين الحين والآخر. لاحظ أن هذا الفعل يخرج أحدث لقطة فقط. يقع على عاتق المستدعي (caller) التأكد من كتابة اللقطة في ملف الضبط المقصود.

help
    هذا الفعل يكافئ خيار --help الموثق أدناه: يظهر شرحًا موجزًا للاستخدام.

  خيارات سطر الأوامر فقط
لا يمكن ضبط هذه الإعدادات في ملفات الضبط.

--force, -f
    استبدل ملف المخرجات إذا كان موجودًا بالفعل عند بناء صورة. مبدئيًا عند بناء صورة ووجود مخرجات سابقة سيرفض mkosi العملية. حدد هذا الخيار مرة واحدة لحذف جميع مخلفات البناء من تشغيل سابق قبل إعادة بناء الصورة. إذا فُعلت عمليات البناء التزايدي، فإن تحديد هذا الخيار مرتين سيضمن إزالة ملفات الخبيئة الوسيطة أيضًا قبل بدء إعادة البناء. إذا استُخدمت خبيئة حزم (انظر أيضًا قسم FILES أدناه)، فإن تحديد هذا الخيار ثلاث مرات سيضمن إزالة خبيئة الحزم أيضًا قبل بدء إعادة البناء. بالنسبة لعملية clean، يكون لهذا الخيار تأثير مختلف قليلاً: مبدئيًا سيقوم الفعل بإزالة مخلفات البناء من تشغيل سابق فقط، وعند تحديده مرة واحدة تُحذف ملفات الخبيئة التزايدية وشجرة الأدوات أيضًا، وعند تحديده مرتين تُزال خبيئة الحزم أيضًا.

--directory=, -C
    يأخذ مسارًا لمجلد. ينتقل mkosi إلى هذا المجلد قبل القيام بأي شيء. لاحظ أنه يتم البحث عن ملفات الضبط المتنوعة في هذا المجلد، لذا فإن استخدام هذا الخيار طريقة فعالة لبناء مشروع يقع في مجلد معين. القيمة المبدئية هي مجلد العمل الحالي. إذا حُددت سلسلة فارغة، سيتم تجاهل كل الضبط في مجلد العمل الحالي.

--debug
    فعل خرج تنقيب إضافي.

--debug-shell
    عند فشل تنفيذ أمر في الصورة، سيبدأ mkosi صدفة تفاعلية في الصورة للسماح بمزيد من التنقيح.

--debug-workspace
    عند تحديده، لن يُحذف مجلد مساحة العمل وسيتم تسجيل موقعه عند خروج mkosi.

--debug-sandbox
    شغّل mkosi-sandbox باستخدام strace.

--version
    أظهر إصدار الحزمة.

--help, -h
    أظهر معلومات استخدام موجزة.

--genkey-common-name=
    الاسم الشائع المستخدم عند توليد المفاتيح عبر أمر genkey الخاص بـ mkosi. القيمة المبدئية هي mkosi of %u، حيث %u تتمدد لتصبح اسم المستخدم الذي استدعى mkosi.

--genkey-valid-days=
    عدد الأيام التي يجب أن تظل فيها المفاتيح صالحة عند توليدها عبر أمر genkey لـ mkosi. القيمة المبدئية هي سنتان (730 يومًا).

--auto-bump=, -B
    إذا حُدد، سيُرفع الإصدار وإذا نجح البناء، يُكتب الإصدار في mkosi.version بطريقة مكافئة لفعل bump. هذا مفيد لإدارة إصدارات خطية بسيطة: سيكون لكل بناء في سلسلة رقم إصدار أعلى بواحد من البناء السابق.

    إذا وجد mkosi.bump، فسيُستدعى لتوليد الإصدار الجديد بدلاً من استخدام منطق mkosi الخاص.

--doc-format
    التنسيق الذي يُعرض به التوثيق. يدعم القيم markdown و man و pandoc و system و auto. في حالة markdown، يُعرض التوثيق بتنسيق Markdown الأصلي. تعرض man التوثيق بتنسيق صفحة الدليل، إذا كان متاحًا. ستقوم pandoc بتوليد تنسيق صفحة الدليل أثناء التشغيل، إذا كانت pandoc متاحة. ستعرض system صفحة الدليل الخاصة بـ mkosi على مستوى النظام، والتي قد تتطابق أو لا تتطابق مع الإصدار الذي تستخدمه، اعتمادًا على كيفية تثبيت mkosi. أما auto، وهي المبدئية، ستحاول جميع الطرق بالترتيب: man، ثم pandoc، ثم markdown، ثم system.

--json
    أظهر خرج الملخص كـ JSON-SEQ.

--wipe-build-dir, -w
    امسح مجلد البناء إذا ضُبط واحد قبل بناء الصورة.

--rerun-build-scripts, -R
    أعد تشغيل سكريبتات البناء. يتطلب تفعيل خيار Incremental= وأن تكون الصورة قد بُنيت بالفعل مرة واحدة. إذا فُعل خيار History=، سيتم إعادة استخدام السجل من البناء السابق ولن يُكتب سجل جديد.

  تنسيقات المخرجات المدعومة
تنسيقات المخرجات التالية مدعومة:

•   صورة قرص GPT خام، أنشئت باستخدام systemd-repart (disk)

•   مجلد عادي، يحتوي على شجرة نظام التشغيل (directory)

•   أرشيف Tar (tar)

•   أرشيف CPIO (cpio)

•   صورة نواة موحدة (UKI)

•   ... وأكثر من ذلك بكثير. انظر توثيق Format= أدناه.

يمكن أيضًا ضبط تنسيق المخرجات على none لكي لا ينتج mkosi أي صورة على الإطلاق. يمكن أن يكون هذا مفيدًا إذا كنت تريد فقط استخدام الصورة لإنتاج مخرج آخر في سكريبتات البناء (مثل بناء حزمة RPM).

عند إنشاء صورة قرص GPT، يمكن وضع ملفات تعريف أقسام repart في mkosi.repart/ لضبط صورة القرص المولدة.

يوصى بشدة بتشغيل mkosi على نظام ملفات يدعم reflinks مثل XFS و btrfs وإبقاء جميع المجلدات ذات الصلة على نفس نظام الملفات. يسمح هذا لـ mkosi بإنشاء الصور بسرعة كبيرة عن طريق استخدام reflinks لإجراء النسخ عبر عمليات النسخ عند الكتابة (copy-on-write).

  إعدادات الضبط
يمكن ضبط الإعدادات التالية عبر ملفات الضبط (بناء الجملة SomeSetting=value) وعلى سطر الأوامر (بناء الجملة --some-setting=value). بالنسبة لبعض معاملات سطر الأوامر، يُسمح أيضًا باختصار من حرف واحد. في ملفات الضبط، يجب أن يكون الإعداد في القسم المناسب، لذا يتم تجميع الإعدادات حسب القسم أدناه.

يُحلل الضبط بالترتيب التالي:

•   تُحلل معطيات سطر الأوامر.

•   يُحلل mkosi.local.conf و mkosi.local/ إذا وُجدا (بهذا الترتيب). يجب أن يكون هذا الملف والمجلد في .gitignore (أو ما يكافئه) وهما مخصصان للضبط المحلي.

•   إذا كان لخيار ما مسار مبدئي مقابل، فسيتم تحليله إذا وجد المسار المبدئي المقابل.

•   يُحلل mkosi.conf إذا وجد في المجلد المضبوط بـ --directory= أو مجلد العمل الحالي إذا لم يُستخدم --directory=. إذا لم يحتوي المجلد المحدد على mkosi.conf أو mkosi.tools.conf ولكن وجد mkosi/mkosi.conf أو mkosi/mkosi.tools.conf، فسيتم تحليل الضبط من المجلد الفرعي mkosi/ للمجلد المحدد بدلاً من ذلك.

•   يُحلل mkosi.conf.d/ في نفس المجلد مثل mkosi.conf إذا وجد. يتم تحليل كل مجلد وكل ملف بامتداد .conf في mkosi.conf.d/. يُحلل أي مجلد في mkosi.conf.d كما لو كان مجلد مستوى أعلى عادي، باستثناء mkosi.images/ و mkosi.tools.conf، اللذين يتم التقاطهما في مجلد المستوى الأعلى فقط.

•   إذا ضُبطت أي تشكيلات (profiles)، فسيتم تحليل ضبطها من مجلد mkosi.profiles/.

•   يتم تحليل الصور الفرعية من مجلد mkosi.images/ إذا وجد.

لاحظ أن الإعدادات المضبوطة عبر سطر الأوامر تسود دائمًا على الإعدادات المضبوطة عبر ملفات الضبط. إذا ضُبط نفس الإعداد أكثر من مرة عبر ملفات الضبط، فإن التعيينات اللاحقة تسود على التعيينات السابقة باستثناء الإعدادات التي تأخذ مجموعة من القيم. أيضًا، الإعدادات المقروءة من mkosi.local.conf أو mkosi.local/ ستسود على الإعدادات من ملفات الضبط التي تُحلل لاحقًا، ولكن ليس على الإعدادات المحددة في سطر الأوامر.

بالنسبة للإعدادات التي تأخذ قيمة واحدة، يمكن استخدام التعيين الفارغ (SomeSetting= أو --some-setting=) لتجاوز إعداد سابق وإعادة الضبط إلى القيمة المبدئية.

تُدمج الإعدادات التي تأخذ مجموعة من القيم عن طريق إلحاق القيم الجديدة بالقيم المضبوطة سابقًا. يؤدي تعيين سلسلة فارغة لمثل هذا الإعداد إلى إزالة جميع القيم المعينة سابقًا، ويتجاوز أي قيم مبدئية مضبوطة أيضًا. تُلحق القيم المحددة في سطر الأوامر بعد جميع القيم من ملفات الضبط.

لتضمين ملفات الضبط بشكل مشروط، يمكن استخدام قسم [Match]. يتكون قسم [Match] من شروط فردية. يمكن أن تستخدم الشروط رمز الأنبوب (|) بعد علامة التساوي (...=|...)، مما يجعل الشرط شرطًا مُطلقًا (triggering). سيتم تضمين ملف الضبط إذا تحقق الـ AND المنطقي لجميع الشروط غير المطلقة والـ OR المنطقي لجميع الشروط المطلقة. لنفي نتيجة شرط ما، ضع علامة تعجب قبل المعطى. إذا سُبق المعطى برمز الأنبوب وعلامة التعجب، يجب تمرير رمز الأنبوب أولاً ثم علامة التعجب ثانيًا.

لاحظ أن شروط [Match] تقارن بالقيم الحالية لإعدادات معينة، ولا تأخذ في الاعتبار التغييرات التي أُجريت على الإعداد في ملفات الضبط التي لم تُحلل بعد (تُؤخذ الإعدادات المحددة في سطر الأوامر في الاعتبار). لاحظ أيضًا أن المطابقة مع إعداد ما ثم تغيير قيمته لاحقًا في ملف ضبط مختلف قد يؤدي إلى نتائج غير متوقعة.

ينطبق قسم [Match] لملف mkosi.conf في مجلد ما على المجلد بأكمله. إذا لم تتحقق الشروط، يتم تجاوز المجلد بأكمله. تنطبق أقسام [Match] للملفات في mkosi.conf.d/ و mkosi.local.conf على الملف نفسه فقط.

إذا كان هناك عدة أقسام [Match] في نفس ملف الضبط، يجب أن يتحقق كل منها حتى يتم تضمين ملف الضبط. تحديدًا، تنطبق الشروط المطلقة فقط على قسم [Match] الحالي ويتم تصفيرها بين أقسام [Match] المتعددة. كمثال، سيطابق ما يلي فقط إذا كان تنسيق المخرجات واحدًا من disk أو directory والمعمارية واحدة من x86-64 أو arm64:

        [Match]
        Format=|disk
        Format=|directory
        [Match]
        Architecture=|x86-64
        Architecture=|arm64

يمكن استخدام قسم [TriggerMatch] للإشارة إلى المطابقات المُطلقة. هذه مطابقة للشروط المطلقة في وحدات systemd إلا أنها تنطبق على قسم المطابقة بالكامل بدلاً من شرط واحد فقط. كمثال، سيطابق ما يلي إذا كانت التوزيعة debian والإصدار bookworm أو إذا كانت التوزيعة ubuntu والإصدار noble.

        [TriggerMatch]
        Distribution=debian
        Release=bookworm
        [TriggerMatch]
        Distribution=ubuntu
        Release=noble

دلالات الشروط في أقسام [TriggerMatch] هي نفسها في [Match]، أي يتم ربط جميع الشروط العادية بـ AND منطقي وجميع الشروط المطلقة بـ OR منطقي. عند خلط أقسام [Match] و [TriggerMatch]، تتحقق المطابقة عندما تطابق جميع أقسام [Match] ويطابق قسم [TriggerMatch] واحد على الأقل. غياب أقسام المطابقة يُعتبر صحيحًا. منطقيًا يعني هذا:

        (⋀ᵢ Matchᵢ) ∧ (⋁ᵢ TriggerMatchᵢ)

يتوفر أيضًا دعم لأقسام [Assert] و [TriggerAssert] التي تعمل بشكل مطابق لأقسام المطابقة، باستثناء أن تحليل الضبط سيفشل إذا لم تُلبَّ أقسام التأكيد، أي يجب تلبية جميع أقسام [Assert] في الملف بالإضافة إلى قسم [TriggertAssert] واحد على الأقل، وإلا سيفشل تحليل الضبط.

تظهر خيارات سطر الأوامر التي لا تأخذ معطيات بدون = في إصدارها الطويل. في ملفات الضبط، يجب تحديدها بمعطى منطقي: إما 1، أو yes، أو true للتفعيل، أو 0، أو no، أو false للتعطيل.

  قسم [Distribution]

Distribution=، --distribution=، -d
    التوزيعة المراد تثبيتها في الصورة. تأخذ أحد المعطيات التالية: fedora، أو debian، أو kali، أو ubuntu، أو arch، أو opensuse، أو mageia، أو centos، أو rhel، أو rhel-ubi، أو openmandriva، أو rocky، أو alma، أو azure أو custom. إذا لم تُحدد، فستكون المبدئية هي توزيعة المضيف أو custom إذا كانت توزيعة المضيف غير مدعومة.

Release=، --release=، -r
    إصدار التوزيعة المراد تثبيتها في الصورة. يعتمد الصيغة الدقيقة للمعطى الذي تأخذه على التوزيعة المستخدمة، وهو إما سلسلة رقمية (في حالة Fedora Linux و CentOS وغيرها، مثلاً 29)، أو اسم إصدار التوزيعة (في حالة Debian و Kali و Ubuntu وغيرها، مثلاً artful). القيمة المبدئية هي إصدار حديث من التوزيعة المختارة، أو إصدار التوزيعة التي تعمل على المضيف إذا كانت تطابق التوزيعة المضبوطة.

Architecture=، --architecture=
    المعمارية المراد بناء الصورة لها. تعتمد المعماريات المدعومة فعليًا على التوزيعة المستخدمة وما إذا كانت الصورة المطلوبة قابلة للإقلاع أم لا. عند البناء لمعمارية أجنبية، ستحتاج أيضًا إلى تثبيت وتسجيل محاكي وضع المستخدم لتلك المعمارية.

    يمكن تحديد إحدى المعماريات التالية لكل صورة تُبنى: alpha، أو arc، أو arm، أو arm64، أو ia64، أو loongarch64، أو mips64-le، أو mips-le، أو parisc، أو ppc، أو ppc64، أو ppc64-le، أو riscv32، أو riscv64، أو s390، أو s390x، أو tilegx، أو x86، أو x86-64.

Mirror=، --mirror=، -m
    المرآة المستخدمة لتنزيل حزم التوزيعة. تتوقع رابط URL للمرآة كمعطى. إذا لم تُوفر، تُستخدم المرآة المبدئية للتوزيعة.

    المرايا المبدئية لكل توزيعة هي كما يلي (ما لم يُحدد خلاف ذلك، تُستخدم المرآة نفسها لجميع المعماريات):

     | x86-64 | aarch64
    debian | http://deb.debian.org |
    arch | https://fastly.mirror.pkgbuild.com | http://mirror.archlinuxarm.org
    opensuse | http://download.opensuse.org |
    kali | http://http.kali.org/kali |
    ubuntu | http://archive.ubuntu.com | http://ports.ubuntu.com
    centos | https://mirrors.centos.org |
    rocky | https://mirrors.rockylinux.org |
    alma | https://mirrors.almalinux.org |
    fedora | https://mirrors.fedoraproject.org |
    rhel-ubi | https://cdn-ubi.redhat.com |
    mageia | https://www.mageia.org |
    openmandriva | http://mirrors.openmandriva.org |
    azure | https://packages.microsoft.com/ |

Snapshot=
    تنزيل الحزم من اللقطة المعطاة بدلاً من تنزيل أحدث حزم التوزيعة من المرآة المعطاة. تأخذ معرف لقطة (يختلف تنسيق معرف اللقطة باختلاف التوزيعة)، استخدم الفعل latest-snapshot لمعرفة أحدث لقطة متاحة.

    إذا ضُبط هذا الإعداد ولم يُضبط Mirror= صراحةً، فستُستخدم مرايا مبدئية مختلفة:

     | x86-64 | aarch64
    debian | https://snapshot.debian.org |
    arch | https://archive.archlinux.org | http://mirror.archlinuxarm.org
    opensuse | http://download.opensuse.org |
    ubuntu | http://archive.ubuntu.com | http://ports.ubuntu.com
    centos | https://composes.stream.centos.org |
    fedora | https://kojipkgs.fedoraproject.org |

    بالنسبة لأي توزيعة غير مدرجة أعلاه، اللقطات غير مدعومة.

LocalMirror=، --local-mirror=
    ستُستخدم المرآة كمرآة محلية ومباشرة بدلاً من استخدامها كبادئة للمجموعة الكاملة من المستودعات التي تدعمها التوزيعات عادةً. مفيد للبناء دون اتصال بالشبكة تمامًا باستخدام مستودع واحد. مدعوم في التوزيعات المعتمدة على deb و rpm و pacman. يتجاوز --mirror= ولكن فقط لبناء mkosi المحلي، ولن يُضبط داخل الصورة النهائية، بل سيُضبط --mirror= (أو المستودع المبدئي) داخل الصورة النهائية بدلاً من ذلك.

RepositoryKeyCheck=، --repository-key-check=
    يتحكم في فحص التوقيع/المفتاح عند استخدام المستودعات، وهو مفعل مبدئيًا. مفيد لتعطيل الفحوصات عند استخدامه مع --local-mirror= واستخدام مستودع من نظام ملفات محلي فقط.

RepositoryKeyFetch=، --repository-key-fetch=
    يتحكم فيما إذا كان mkosi سيجلب مفاتيح GPG الخاصة بالتوزيعة عن بُعد. مفعل مبدئيًا على Ubuntu عند عدم استخدام شجرة أدوات أو عند استخدام أشجار أدوات Ubuntu لبناء Arch Linux أو التوزيعات المعتمدة على RPM. معطل مبدئيًا في جميع التوزيعات الأخرى. عند تعطيله، يجب تثبيت مفاتيح GPG الخاصة بالتوزيعة المستهدفة محليًا على نظام المضيف إلى جانب مدير الحزم لتلك التوزيعة.

    نُفذ هذا الإعداد فقط للتوزيعات التي تستخدم dnf، أو pacman أو zypper كمدير للحزم. بالنسبة للتوزيعات الأخرى، يُبحث دائمًا عن مفاتيح GPG للتوزيعة محليًا بغض النظر عن قيمة هذا الإعداد. لجعل مفاتيح GPG الخاصة بالتوزيعات متاحة دون تفعيل هذا الإعداد، يجب تثبيت الحزمة المقابلة على المضيف. عادة ما تكون هذه إحدى الحزم التالية: archlinux-keyring، أو debian-keyring، أو kali-archive-keyring، أو ubuntu-keyring أو distribution-gpg-keys (للتوزيعات المعتمدة على RPM).

Repositories=، --repositories=
    تفعيل مستودعات الحزم المعطلة مبدئيًا. يمكن استخدام هذا لتفعيل مستودعات EPEL لـ CentOS أو مكونات مختلفة من مستودعات Debian/Kali/Ubuntu.

  قسم [Output]

Format=، --format=، -t
    نوع تنسيق الصورة المراد توليدها. أحد الخيارات: directory (لتوليد صورة نظام تشغيل مباشرة في دليل محلي)، أو tar (مماثل، ولكن تُولد أرشفة tar لصورة نظام التشغيل)، أو cpio (مماثل، ولكن تُولد أرشفة cpio)، أو disk (صورة نظام تشغيل لجهاز كتلي مع جدول أقسام GPT)، أو uki (صورة نواة موحدة مع صورة نظام التشغيل في قسم PE باسم .initrd)، أو esp (صورة قرص مع قسم ESP فقط، ومحمل إقلاع وربما UKI)، أو oci (دليل متوافق مع مواصفات صورة OCI)، أو sysext، أو confext، أو portable، أو addon أو none (صورة نظام التشغيل مخصصة فقط كصورة بناء لإنتاج منتج آخر).

    إذا استخدم تنسيق الإخراج disk، فستُولد صورة القرص باستخدام systemd-repart. يمكن ضبط ملفات تعريف أقسام repart المستخدمة باستخدام إعداد RepartDirectories= أو عبر mkosi.repart/. عندما تُضبط أقسام verity باستخدام إعداد Verity= الخاص بـ systemd-repart، سيحلل mkosi آليًا roothash الخاص بقسم هاش verity من مخرجات JSON الخاصة بـ systemd-repart ويضمنه في سطر أوامر النواة لكل صورة نواة موحدة يبنيها mkosi.

    إذا استخدم تنسيق الإخراج none، فلن تُزال مخرجات البناء السابق، ولكن ستُنفذ سكربتات التنظيف (انظر CleanScripts=). يسمح هذا بإعادة تشغيل سكربت بناء (انظر BuildScripts=) دون إزالة نتائج بناء سابق.

ManifestFormat=، --manifest-format=
    نوع أو أنواع تنسيق البيان المراد توليدها. قائمة مفصولة بفاصلة تتكون من json (تنسيق مخرجات JSON القياسي الذي يصف الحزم المثبتة)، و changelog (تنسيق نصي قابل للقراءة من البشر مصمم للمقارنة). مبدئيًا لا يُولد أي بيان.

Output=، --output=، -o
    الاسم المستخدم لملف صورة المخرجات المولدة أو الدليل. المبدئي هو image أو، إذا حُدد ImageId=، فسيُستخدم كاسم الإخراج المبدئي، متبوعًا اختياريًا بالإصدار المحدد بـ ImageVersion= أو إذا بُنيت صورة محددة من mkosi.images، يُفضل اسم الصورة على ImageId. لاحظ أن هذا الخيار لا يسمح بضبط دليل الإخراج، استخدم OutputDirectory= لذلك.

    لاحظ أن هذا يحدد بادئة الإخراج فقط، اعتمادًا على تنسيق الإخراج المحدد، والضغط وإصدار الصورة المستخدم، قد يكون اسم الإخراج الكامل هو image_7.8.raw.xz.

OutputExtension=، --output-extension=
    استخدم الامتداد المحدد لملف الإخراج. المبدئي هو الامتداد المناسب بناءً على تنسيق الإخراج. يتضمن امتداد الملف فقط، وليس أي امتداد ضغط سيُلحق بهذا الامتداد إذا فُعل الضغط.

CompressOutput=، --compress-output=
    اضبط الضغط للصورة أو الأرشفة الناتجة. يمكن أن يكون المعطى إما قيمة منطقية أو خوارزمية ضغط (xz، أو zstd). يُستخدم ضغط zstd مبدئيًا، باستثناء CentOS ومشتقاته حتى الإصدار 8، والتي تستخدم xz مبدئيًا، وصور OCI التي تستخدم gzip مبدئيًا. لاحظ أنه عند تطبيقه على أنواع صور الأجهزة الكتلية، فإن الضغط يعني أنه لا يمكن بدء الصورة مباشرة ولكن يجب فك ضغطها أولاً. وهذا يعني أيضًا أن أفعال shell و boot و vm غير متاحة عند استخدام هذا الخيار. هذا الخيار ضمني لكل من tar و cpio و uki و esp و oci و addon.

CompressLevel=، --compress-level=
    اضبط مستوى الضغط المستخدم. يأخذ رقمًا صحيحًا. تعتمد القيم الممكنة على نوع الضغط المستخدم.

OutputDirectory=، --output-directory=، -O
    المسار إلى دليل لوضع جميع المنتجات المولدة فيه. إذا لم يُحدد هذا وكان الدليل mkosi.output/ موجودًا في الدليل المحلي، فسيُستخدم آليًا لهذا الغرض.

OutputMode=، --output-mode=
    وضع الوصول لنظام الملفات المستخدم عند إنشاء ملف صورة المخرجات. يأخذ وضع وصول بالترميز الثماني. إذا لم يُضبط، تُستخدم القيم المبدئية للنظام الحالي.

ImageVersion=، --image-version=
    اضبط إصدار الصورة. يقبل هذا أي سلسلة نصية، ولكن يُوصى بتحديد سلسلة من المكونات المفصولة بنقاط. يمكن أيضًا ضبط الإصدار عن طريق قراءة ملف mkosi.version (وفي هذه الحالة يمكن إدارته بسهولة عبر الفعل bump أو خيار --auto-bump) أو عن طريق قراءة المخرجات القياسية إذا كان قابلاً للتنفيذ (انظر قسم السكربتات أدناه). عند تحديده، يُضمن إصدار الصورة في اسم ملف الإخراج المبدئي، أي بدلاً من image.raw سيكون المبدئي هو image_0.1.raw للإصدار 0.1 من الصورة، وهكذا. يُمرر الإصدار أيضًا عبر $IMAGE_VERSION إلى أي سكربتات بناء تُستدعى (والذي قد يكون مفيدًا لترقيعه في /usr/lib/os-release أو ما شابه، لاسيما حقل IMAGE_VERSION= فيه).

ImageId=، --image-id=
    اضبط معرف الصورة. يقبل هذا سلسلة نصية حرة تُستخدم لتعريف الصورة. إذا ضُبط، فسيُسمى ملف الإخراج المبدئي باسمه (ربما متبوعًا بالإصدار). يُمرر المعرف أيضًا عبر $IMAGE_ID إلى أي سكربتات بناء تُستدعى. يُضاف معرف الصورة آليًا إلى /usr/lib/os-release.

SplitArtifacts=، --split-artifacts=
    أنواع المنتجات المراد فصلها عن الصورة النهائية. قائمة مفصولة بفاصلة تتكون من uki، و kernel، و initrd، و os-release، و prcs، و partitions، و roothash، و kernel-modules-initrd، و repart-definitions و tar. عند بناء صورة قابلة للإقلاع، يوافق kernel و initrd منتجهما الموجود في الصورة (أو في UKI)، بينما ينسخ uki كامل UKI. إذا حُدد pcrs، فيُكتب ملف JSON يحتوي على خلاصات TPM2 المحسوبة مسبقًا، وفقًا لمواصفات UKI (https://uapi-group.org/specifications/specs/unified_kernel_image/#json-format-for-pcrsig) ، وهو مفيد للتوقيع دون اتصال بالشبكة.

    عند بناء صورة قرص وتحديد partitions، مرر --split=yes إلى systemd-repart ليقوم بكتابة ملفات أقسام منفصلة لكل قسم مضبوط. اقرأ صفحة الدليل https://www.freedesktop.org/software/systemd/man/systemd-repart.html#--split=BOOL لمزيد من المعلومات. هذا مفيد في سيناريوهات تحديث A/B حيث يجب تعزيز صورة قرص موجودة بإصدار جديد من قسم الجذر أو قسم /usr إلى جانب قسم Verity الخاص به والنواة الموحدة.

    عند تحديد tar، يُؤرشف نظام ملفات الجذر (rootfs) إضافيًا كأرشفة tar (مضغوطة وفقًا لـ CompressOutput=).

    عند تحديد roothash وبناء صورة قرص dm-verity، يُكتب dm-verity roothash كملف منفصل، وهو مفيد للتوقيع دون اتصال بالشبكة.

    kernel-modules-initrd يوافق ملف initrd لوحدات النواة المنفصل الذي يلحقه mkosi بملف initrd الرئيس. هذا مخصص في المقام الرئيس للتنقيح لأن العديد من أدوات فحص initrd لا تتعامل بشكل صحيح مع عدة ملفات initrd ملحقة ببعضها البعض.

    عند تحديد repart-definitions، يُكتب دليل يحتوي على ملفات تعريف repart المستخدمة في دليل الإخراج. إذا ضُبطت أدلة متعددة عبر RepartDirectories=، فستُدمج، مع إعطاء الأولوية للأدلة اللاحقة على السابقة عند وجود ملفات بأسماء متطابقة.

    مبدئيًا، تُفصل كل من uki و kernel و initrd.

RepartDirectories=، --repart-directory=
    المسارات إلى الأدلة التي تحتوي على ملفات تعريف أقسام systemd-repart التي تُستخدم عندما يستدعي mkosi الأداة systemd-repart عند بناء صورة قرص. إذا كان الدليل mkosi.repart/ موجودًا في الدليل المحلي، فسيُستخدم لهذا الغرض أيضًا. لاحظ أن mkosi يستدعي repart مع ضبط --root= على جذر صورة الجذر، لذا فإن أي مسارات مصدر لـ CopyFiles= في ملفات تعريف الأقسام ستكون نسبية لدليل جذر الصورة.

SectorSize=، --sector-size=
    تجاوز حجم القطاع المبدئي الذي تستخدمه systemd-repart عند بناء صورة قرص.

Overlay=، --overlay=
    عند استخدامه مع BaseTrees=، سيتألف الإخراج فقط من التغييرات على أشجار الأساس المحددة. تُوصل كل شجرة أساس كطبقة سفلية في بنية overlayfs، ويصبح الإخراج هو الطبقة العلوية، والتي تكون فارغة في البداية. وبالتالي فإن الملفات التي لم تُعدل مقارنة بأشجار الأساس لن تكون موجودة في الإخراج النهائي.

    يمكن استخدام هذا الخيار لإنشاء امتدادات نظام systemd https://uapi-group.org/specifications/specs/extension_image

Seed=، --seed=
    يأخذ UUID كمعطى أو القيمة الخاصة random. يتجاوز البذرة التي تستخدمها systemd-repart عند بناء صورة قرص. هذا مفيد لتحقيق بناءات قابلة لإعادة الإنتاج، حيث يجب اشتقاق معرفات UUID حتمية وبيانات أقسام وصفية أخرى في كل عملية بناء. إذا لم يُحدد صراحة وكان الملف mkosi.seed موجودًا في الدليل المحلي، يُقرأ معرف UUID منه. خلاف ذلك، يُستخدم UUID عشوائي.

CleanScripts=، --clean-script=
    يأخذ قائمة مفصولة بفاصلة من المسارات إلى الملفات القابلة للتنفيذ التي تُستخدم كسكربتات تنظيف لهذه الصورة. انظر قسم SCRIPTS لمزيد من المعلومات.

  قسم [Content]

Packages=، --package=، -p
    تثبيت حزم التوزيعة المحددة (مثل RPM و deb وغيرها) في الصورة. يأخذ قائمة مفصولة بفاصلة من مواصفات الحزم. يمكن استخدام هذا الخيار عدة مرات وفي هذه الحالة تُدمج قوائم الحزم المحددة. استخدم BuildPackages= لتحديد الحزم التي يجب تثبيتها فقط في طبقة تغطية (overlay) تُوصل عندما تُنفذ سكربتات التحضير بمعطى build وعند تنفيذ سكربتات البناء.

    تعتمد أنواع وصيغ مواصفات الحزم المسموح بها على مثبت الحزم (مثلاً dnf للتوزيعات المعتمدة على RPM أو apt للتوزيعات المعتمدة على deb)، ولكنها قد تشمل أسماء الحزم، وأسماء الحزم مع الإصدار و/أو المعمارية، وأنماط أسماء الحزم (globs)، ومجموعات الحزم، والموفرات الافتراضية، بما في ذلك مسارات الملفات.

    انظر PackageDirectories= للحصول على معلومات حول كيفية جعل الحزم المحلية متاحة للتثبيت باستخدام Packages=.

    مثال: عند استخدام توزيعة تستخدم dnf، فإن الضبط التالي سيثبت حزمة meson (بأحدث إصدار)، وإصدار 32 بت من حزمة libfdisk-devel، وجميع الحزم المتاحة التي تبدأ بالبادئة git-، وحزمة RPM لـ systemd من نظام الملفات المحلي، وإحدى الحزم التي توفر /usr/bin/ld، والحزم في مجموعة Development Tools، والحزمة التي تحتوي على وحدة python باسم mypy.

            Packages=meson
                     libfdisk-devel.i686
                     git-*
                     /usr/bin/ld
                     @development-tools
                     python3dist(mypy)

BuildPackages=، --build-package=
    مشابه لـ Packages=، ولكنه يضبط الحزم لتثبيتها فقط في طبقة تغطية (overlay) تُتاح فوق الصورة لسكربتات التحضير عند تنفيذها بمعطى build وسكربتات البناء. يجب استخدام هذا الخيار لسرد الحزم التي تحتوي على ملفات الترويسة، والمصرفات، وأنظمة البناء، والموصلات وأدوات البناء الأخرى التي تتطلبها سكربتات mkosi.build للعمل. لاحظ أن الحزم المدرجة هنا ستكون غائبة في الصورة النهائية.

VolatilePackages=، --volatile-package=
    مشابه لـ Packages=، ولكن الحزم المضبوطة بهذا الإعداد لا تُخزن في الخبيئة عند تفعيل Incremental= وتُثبت بعد تنفيذ أي سكربتات بناء.

    تحديدًا، يمكن استخدام هذا الإعداد لتثبيت الحزم التي تتغير كثيرًا أو التي تُبنى بواسطة سكربت بناء.

PackageDirectories=، --package-directory=
    حدد الأدلة التي تحتوي على حزم إضافية لتكون متاحة أثناء البناء. سيقوم mkosi بإنشاء مستودع محلي يحتوي على جميع الحزم في هذه الأدلة ويجعله متاحًا عند تثبيت الحزم أو تشغيل السكربتات. إذا وُجد دليل mkosi.packages/ في الدليل المحلي، فسيُستخدم أيضًا لهذا الغرض.

VolatilePackageDirectories=، --volatile-package-directory=
    مثل PackageDirectories=، ولكن أي تغييرات على الحزم في هذه الأدلة لن تبطل الصور المخزنة في الخبيئة إذا فُعل Incremental=.

    بالإضافة إلى ذلك، يمكن لسكربتات البناء إضافة المزيد من الحزم إلى المستودع المحلي بوضع الحزم المبنية في $PACKAGEDIR. تُشارك الحزم الموضوعة في $PACKAGEDIR بين جميع عمليات بناء الصور وبالتالي تكون متاحة للتثبيت في جميع الصور باستخدام VolatilePackages=.

WithRecommends=، --with-recommends=
    يضبط ما إذا كان سيُثبت التبعات الموصى بها أو الضعيفة، اعتمادًا على تسميتها بواسطة مدير الحزم المستخدم، أم لا. مبدئيًا، لا تُثبت الحزم الموصى بها. يُستخدم هذا فقط لمديري الحزم الذين يدعمون هذا المفهوم، وهم حاليًا apt و dnf و zypper.

WithDocs=، --with-docs=
    تضمين التوثيق في الصورة. مفعل مبدئيًا. عند تعطيله، وإذا كان مدير حزم التوزيعة الأساسية يدعم ذلك، فلن يُضمن التوثيق في الصورة. يُضبط متغير البيئة $WITH_DOCS الممرر لسكربتات mkosi.build على 0 أو 1 بناءً على ما إذا كان هذا الخيار مفعلاً أم معطلاً.

BaseTrees=، --base-tree=
    يأخذ قائمة مفصولة بفاصلة من المسارات لاستخدامها كأشجار أساس. عند استخدامها، تُنسخ كل من أشجار الأساس هذه إلى شجرة نظام التشغيل وتشكل التوزيعة الأساسية بدلاً من تثبيت التوزيعة من الصفر. تُثبت الحزم الإضافية فقط فوق الحزم المثبتة بالفعل في أشجار الأساس. لاحظ أنه لكي يعمل هذا بشكل صحيح، لا تزال صورة الأساس بحاجة إلى احتواء البيانات الوصفية لمدير الحزم عن طريق ضبط CleanPackageMetadata=no (انظر CleanPackageMetadata=).

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

SkeletonTrees=، --skeleton-tree=
    يأخذ قائمة مفصولة بفاصلة من أزواج مسارات مفصولة بنقطتين رأسيتين. يشير المسار الأول من كل زوج إلى دليل لنسخه إلى شجرة نظام التشغيل قبل استدعاء مدير الحزم. يشير المسار الثاني من كل زوج إلى الدليل المستهدف داخل الصورة. إذا لم يُوفر المسار الثاني، يُنسخ الدليل فوق دليل الجذر للصورة. يُفسر المسار الثاني دائمًا كمسار مطلق. استخدم هذا لإدراج الملفات والأدلة في شجرة نظام التشغيل قبل أن يثبت مدير الحزم أي حزم. إذا وُجد دليل mkosi.skeleton/ في الدليل المحلي، فسيُستخدم أيضًا لهذا الغرض مع دليل الجذر كهدف (انظر أيضًا قسم FILES أدناه).

    لاحظ أن أشجار الهيكل (skeleton) تُخزن في الخبيئة، وأي تغييرات عليها بعد بناء صورة مخزنة (عند استخدام Incremental=) لا تُطبق إلا عند إعادة بناء الصورة المخزنة (باستخدام -ff أو تشغيل mkosi -f clean).

    كما هو الحال مع منطق شجرة الأساس أعلاه، يمكن توفير ملف tar بدلاً من الدليل أيضًا. سيُستخدم mkosi.skeleton.tar آليًا إذا وُجد في الدليل المحلي.

    لإضافة ملفات ضبط إضافية لمدير الحزم مثل المستودعات الإضافية، استخدم SandboxTrees= لأن mkosi يستدعي مديري الحزم من خارج الصورة وليس داخلها، لذا فإن أي ملفات ضبط لمدير الحزم تُوفر عبر SkeletonTrees= لن يسري مفعولها عندما يستدعي mkosi مدير الحزم لتثبيت الحزم.

ExtraTrees=، --extra-tree=
    يأخذ قائمة مفصولة بفاصلة من أزواج مسارات مفصولة بنقطتين رأسيتين. يشير المسار الأول من كل زوج إلى دليل لنسخه من المضيف إلى الصورة. يشير المسار الثاني من كل زوج إلى الدليل المستهدف داخل الصورة. إذا لم يُوفر المسار الثاني، يُنسخ الدليل فوق دليل الجذر للصورة. يُفسر المسار الثاني دائمًا كمسار مطلق. استخدم هذا لتجاوز أي ملفات ضبط مبدئية مشحونة مع التوزيعة. إذا وُجد دليل mkosi.extra/ في الدليل المحلي، فسيُستخدم أيضًا لهذا الغرض مع دليل الجذر كهدف (انظر أيضًا قسم FILES أدناه).

    كما هو الحال مع منطق شجرة الأساس أعلاه، يمكن توفير ملف tar بدلاً من الدليل أيضًا. سيُستخدم mkosi.extra.tar آليًا إذا وُجد في الدليل المحلي.

RemovePackages=، --remove-package=
    يأخذ قائمة مفصولة بفاصلة من مواصفات الحزم للإزالة، بنفس تنسيق Packages=. ستُنفذ الإزالة كواحدة من الخطوات الأخيرة. تُتخطى هذه الخطوة إذا استُخدم CleanPackageMetadata=no.

RemoveFiles=، --remove-files=
    يأخذ قائمة مفصولة بفاصلة من الأنماط (globs). ستُحذف الملفات في الصورة التي تطابق الأنماط في النهاية.

CleanPackageMetadata=، --clean-package-metadata=
    تفعيل/تعطيل إزالة قواعد بيانات مدير الحزم والبيانات الوصفية للمستودع عند نهاية التثبيت. يمكن تحديده كـ true، أو false، أو auto (المبدئي). مع auto، ستُزال قواعد بيانات مدير الحزم والبيانات الوصفية للمستودع إذا كان ملف مدير الحزم القابل للتنفيذ المعني غير موجود عند نهاية التثبيت.

SourceDateEpoch=، --source-date-epoch=
    يأخذ طابعًا زمنيًا بالثواني منذ حقبة UNIX كمعطى. ستُحصر أوقات تعديل الملفات لجميع الملفات في هذه القيمة. يُمرر المتغير أيضًا إلى systemd-repart والسكربتات التي ينفذها mkosi. إذا لم يُضبط صراحةً، تُجرب قيمة SOURCE_DATE_EPOCH من --environment= ومن بيئة المضيف بهذا الترتيب. هذا مفيد لجعل البناءات قابلة لإعادة الإنتاج. انظر SOURCE_DATE_EPOCH (https://reproducible-builds.org/specs/source-date-epoch/) لمزيد من المعلومات.

SyncScripts=، --sync-script=
    يأخذ قائمة مفصولة بفاصلة من المسارات إلى الملفات القابلة للتنفيذ التي تُستخدم كسكربتات مزامنة لهذه الصورة. انظر قسم SCRIPTS لمزيد من المعلومات.

PrepareScripts=، --prepare-script=
    يأخذ قائمة مفصولة بفاصلة من المسارات إلى الملفات القابلة للتنفيذ التي تُستخدم كسكربتات تحضير لهذه الصورة. انظر قسم SCRIPTS لمزيد من المعلومات.

BuildScripts=، --build-script=
    يأخذ قائمة مفصولة بفواصل من المسارات للملفات التنفيذية التي تُستخدم كبرامج بناء نصية لهذه الصورة. انظر قسم SCRIPTS لمزيد من المعلومات.

PostInstallationScripts=, --postinst-script=
    يأخذ قائمة مفصولة بفواصل من المسارات للملفات التنفيذية التي تُستخدم كبرامج ما بعد التثبيت النصية لهذه الصورة. انظر قسم SCRIPTS لمزيد من المعلومات.

FinalizeScripts=, --finalize-script=
    يأخذ قائمة مفصولة بفواصل من المسارات للملفات التنفيذية التي تُستخدم كبرامج الإنهاء النصية لهذه الصورة. انظر قسم SCRIPTS لمزيد من المعلومات.

PostOutputScripts=, --postoutput-script=
    يأخذ قائمة مفصولة بفواصل من المسارات للملفات التنفيذية التي تُستخدم كبرامج ما بعد الإخراج النصية لهذه الصورة. انظر قسم SCRIPTS لمزيد من المعلومات.

Bootable=, --bootable=
    يأخذ قيمة منطقية أو auto. يُفعّل أو يُعطّل توليد صورة قابلة للإقلاع. في حال التفعيل، سيثبّت mkosi محمّل إقلاع EFI، ويضيف قسم ESP عند استخدام مخرج صورة القرص. إذا كان محمّل إقلاع EFI المختار (انظر Bootloader=) غير مثبت أو لم يُعثر على صور نواة، سيفشل البناء. يسلك الخيار auto سلوك التفعيل، لكن البناء لن يفشل إذا لم يُعثر على صور نواة أو لم يُعثر على محمّل إقلاع EFI المختار. في حال التعطيل، لن يُثبّت أي محمّل إقلاع حتى لو وُجد داخل الصورة، ولن تُولد صور نواة موحدة ولن يُضاف قسم ESP إلى الصورة إذا استُخدم تنسيق مخرج القرص.

    إذا استُخدم تنسيق المخرج esp، يضاف قسم ESP ومحمّل الإقلاع دائمًا، ويتحكم الخيار Bootable= فقط فيما إذا كانت ستضاف صورة نواة موحدة (UKI) إلى قسم ESP أم لا.

Bootloader=, --bootloader=
    يأخذ أحد القيم: none، أو systemd-boot، أو uki، أو grub، أو systemd-boot-signed، أو uki-signed، أو grub-signed. القيمة المبدئية هي systemd-boot. إذا ضُبط على none، لن يُثبّت أي محمّل إقلاع EFI في الصورة. إذا ضُبط على systemd-boot، سيُثبّت systemd-boot وستُولد صورة نواة موحدة (UKI) لكل نواة مثبتة وتُخزن في EFI/Linux في ESP. إذا ضُبط على uki، ستُولد صورة نواة موحدة واحدة لأحدث نواة مثبتة (ذات الإصدار الأعلى) وتُثبّت في EFI/BOOT/BOOTX64.EFI في ESP. إذا ضُبط على grub، ستُولد صورة نواة موحدة لكل نواة مثبتة وتُخزن في EFI/Linux في ESP. ولكل صورة موحدة مولدة، يُلحق مدخل قائمة إلى تهيئة grub في grub/grub.cfg في ESP والذي يقوم بتحميل الصورة الموحدة تسلسليًا. ويُكتب أيضًا ملف grub.cfg وسيط إلى EFI/<distribution>/grub.cfg في ESP والذي يقوم بتحميل grub/grub.cfg في ESP للتوافق مع إصدارات grub الموقعة التي تحمل تهيئة grub من هذا الموقع.

    ستقوم المتغيرات الموقعة (signed) فقط بتثبيت ثنائيات EFI الموقعة مسبقًا والتي تشحنها التوزيعة.

    يجب وضع النوى في نظام الملفات الجذر (على سبيل المثال باستخدام ExtraTrees=) تحت /usr/lib/modules/$version، باسم vmlinux أو vmlinuz. الإصدار $version هو ما ينتجه هدف make المسمى kernelversion الخاص بـ Kbuild.

    ملاحظة: عند استخدام systemd-boot أو systemd-boot-signed، يتوقع mkosi وجود ثنائيات EFI الخاصة بـ systemd-boot في الصورة. اعتمادًا على توزيعتك، قد تكون هذه محزمة بشكل منفصل. على سبيل المثال، ستحتاج الصور المبنية على دبيان إلى systemd-boot-efi.

BiosBootloader=, --bios-bootloader=
    يأخذ أحد القيم none أو grub. القيمة المبدئية هي none. إذا ضُبط على none، لن يُثبّت محمّل إقلاع BIOS. إذا ضُبط على grub، سيُثبّت grub كمحمّل إقلاع BIOS إذا طُلبت صورة قابلة للإقلاع باستخدام خيار Bootable=. إذا لم تُضبط أي ملفات تعريف أقسام repart، سيضيف mkosi قسم إقلاع grub BIOS وقسم نظام EFI إلى ملفات تعريف الأقسام المبدئية.

    لاحظ أن هذا الخيار لا يتعارض مع Bootloader=. من الممكن الحصول على صورة قابلة للإقلاع على كل من UEFI و BIOS عن طريق ضبط كل من Bootloader= و BiosBootloader=.

    يجب أن يكون لقسم إقلاع grub BIOS المعرف UUID التالي: 21686148-6449-6e6f-744e-656564454649 وأن لا تقل مساحته عن 1 ميجابايت.

    حتى لو لم يُثبّت محمّل إقلاع EFI، سنظل بحاجة إلى قسم ESP لإقلاع BIOS حيث أننا هناك سنخزن النواة، و initrd ووحدات grub.

ShimBootloader=, --shim-bootloader=
    يأخذ أحد القيم: none، أو unsigned، أو signed. القيمة المبدئية هي none. إذا ضُبط على none، لن يُثبّت shim و MokManager في ESP. إذا ضُبط على unsigned، سيبحث mkosi عن ثنائيات EFI لـ shim و MokManager غير الموقعة ويقوم بتثبيتها. وإذا كان SecureBoot= مفعلًا، سيقوم mkosi بتوقيع الثنائيات غير الموقعة قبل تثبيتها. أما إذا ضُبط على signed، سيبحث mkosi عن الثنائيات الموقعة ويثبتها. وحتى لو كان الإقلاع الآمن مفعلًا، لن يقوم mkosi بتوقيع هذه الثنائيات مرة أخرى.

    لاحظ أن هذا الخيار لا يسري مفعوله إلا عند طلب صورة قابلة للإقلاع على برمجيات UEFI الثابتة باستخدام خيارات أخرى (Bootable=، Bootloader=).

    لاحظ أنه عند تفعيل هذا الخيار، سيقوم mkosi فقط بتثبيت ثنائيات محمل الإقلاع الموقعة مسبقًا، وملفات صور النواة، وصور النواة الموحدة لأن الثنائيات ذاتية التوقيع لن تُقبل من قِبل نسخة shim الموقعة.

UnifiedKernelImages=, --unified-kernel-images=
    يحدد ما إذا كان سيتم استخدام صور النواة الموحدة (UKI) أم لا عندما يكون Bootloader= مضبوطًا على systemd-boot أو grub. يأخذ أحد القيم: none، أو unsigned، أو signed، أو auto. القيمة المبدئية هي auto. إذا كان unsigned أو signed، تُستخدم الصور الموحدة دائمًا وسيفشل البناء في حال فقدان أي مكون مطلوب لبنائها. إذا ضُبط على auto، ستُستخدم الصور الموحدة إذا توفرت كافة المكونات اللازمة؛ وإلا ستُستخدم مداخل النوع 1 (Type 1) كما هي محددة في مواصفات محمل الإقلاع (Boot Loader Specification). في حال التعطيل، ستُستخدم مداخل النوع 1 دائمًا. وإذا ضُبط Bootloader= على أحد المتغيرات الموقعة، سيُبحث عن صورة موحدة مبنية مسبقًا وسيفشل البناء إذا لم يُعثر عليها، ما لم يُضبط UnifiedKernelImages= على unsigned، وفي هذه الحالة ستُبنى الصورة الموحدة محليًا. هذا مفيد عند الجمع بين خيار وقت التشغيل Firmware= المضبوط على custom بحيث يُدرج مفتاح التوقيع المحلي في قاعدة بيانات UEFI db.

UnifiedKernelImageFormat=, --unified-kernel-image-format=
    يأخذ اسم ملف دون أي مكونات مسار لتحديد التنسيق الذي يجب تثبيت صور النواة الموحدة به. قد يشمل ذلك كلاً من المحددات العادية (انظر المحددات) والمحددات المؤجلة الخاصة، التي يتم توسيعها أثناء تثبيت الملفات، والموصوفة أدناه. التنسيق المبدئي لهذا المعامل هو &e-&k مع إلحاق -&h إذا وُجد roothash= أو usrhash= في سطر أوامر النواة و +&c إذا وُجد /etc/kernel/tries في الصورة.

    يمكن استخدام المحددات التالية:

    المحدد | القيمة
    && | محرف &
    &e | رمز المدخل
    &k | إصدار النواة
    &h | قيمة وسيط النواة roothash= أو usrhash=

UnifiedKernelImageProfiles=, --uki-profile=
    بناء تشكيلات UKI إضافية. يأخذ قائمة مفصولة بفواصل من المسارات لملفات تهيئة تشكيلات UKI. يمكن استخدام هذا الخيار عدة مرات حيث تُبنى كل تهيئة في تشكيلة UKI مقابلة. يتم جلب ملفات التهيئة في دليل mkosi.uki-profiles/ آليًا. وتُضاف كافة تشكيلات UKI المهيأة كتشكيلات UKI إضافية لكل UKI يبنيه mkosi.

    انظر توثيق قسم UKIProfile لمعلومات حول الإعدادات التي يمكن ضبطها في ملفات تهيئة تشكيلات UKI.

Initrds=, --initrd=
    استخدام ملفات initrd التي يوفرها المستخدم. يأخذ قائمة مفصولة بفواصل من المسارات لملفات initrd. يمكن استخدام هذا الخيار عدة مرات وفي هذه الحالة تُدمج قوائم initrd. إذا لم تُحدد أي ملفات initrd وطُلبت صورة قابلة للإقلاع، سيقوم mkosi آليًا ببناء initrd مبدئي.

    سيبحث mkosi أيضًا عن ملفات initrd في الدليل الفرعي io.mkosi.initrd التابع لدليل النتائج (انظر $ARTIFACTDIR في قسم ENVIRONMENT VARIABLES). تُلحق أي ملفات initrd توجد هناك بملفات initrd التي وفرها المستخدم وأي initrd مبدئي بناه mkosi.

InitrdProfiles=, --initrd-profile=
    ضبط التشكيلات لتفعيلها في initrd المبدئي. يأخذ قائمة تشكيلات مفصولة بفواصل. تكون كافة التشكيلات معطلة مبدئيًا.

    تُمكّن تشكيلة lvm دعم LVM. وتُمكّن تشكيلة network دعم الشبكة عبر systemd-networkd. وتُمكّن تشكيلة nfs دعم NFS. وتتطلب وجود شبكة في initrd، باستخدام تشكيلة network، أو طريقة مخصصة أخرى. وتُمكّن تشكيلة pkcs11 دعم PKCS#11. وتوفر تشكيلة plymouth واجهة رسومية عند الإقلاع (رسوم متحركة ومحث كلمة مرور). وتُمكّن تشكيلة raid دعم مصفوفات RAID.

InitrdPackages=, --initrd-package=
    حزم إضافية لتثبيتها في initrd المبدئي. يأخذ قائمة مفصولة بفواصل لمواصفات الحزم. يمكن استخدام هذا الخيار عدة مرات وفي هذه الحالة تُدمج قوائم الحزم المحددة.

InitrdVolatilePackages=, --initrd-volatile-package=
    مشابه لـ VolatilePackages=، فيما عدا أنه ينطبق على initrd المبدئي.

Devicetrees=, --devicetrees=
    قائمة مفصولة بفواصل لأنماط شجرة الأجهزة (devicetree) للاختيار الآلي بناءً على العتاد. الأنماط هي تعبيرات نمطية (glob). يبحث mkosi عن ملفات شجرة الأجهزة في المواقع القياسية بالنسبة إلى /usr/lib/modules/<kver>/dtb/، و /usr/lib/firmware/<kver>/device-tree/، و /usr/lib/linux-image-<kver>/.

    بالنسبة لبناء UKI، تُفعّل التطابقات المتعددة الاختيار الآلي بناءً على العتاد باستخدام أقسام .dtbauto. تتطلب مداخل إقلاع النوع 1 تطابقًا واحدًا بالضبط.

    مثال: Devicetrees=rockchip/*,imx.* سيشمل جميع أشجار أجهزة Rockchip وأي أشجار أجهزة IMX.

Splash=, --splash=
    عند ضبطه، سيتم جلب شاشة البداية (boot splash) لأي صورة نواة موحدة يبنيها mkosi من المسار المعطى داخل الصورة.

MicrocodeHost=, --microcode-host=
    عند ضبطه على صواب (true) يتم فقط تضمين الكود الدقيق (microcode) لوحدة المعالجة المركزية للمضيف في الصورة.

KernelCommandLine=, --kernel-command-line=
    استخدام سطر أوامر النواة المحدد عند بناء الصور.

    إذا أُنشئ قسم الجذر (root) أو قسم /usr مع تفعيل verity، يُضاف roothash= أو usrhash= على التوالي آليًا إلى سطر أوامر النواة ويجب عدم إضافة root= أو mount.usr=. بخلاف ذلك، إذا احتوت قيمة هذا الإعداد على الثوابت الحرفية root=PARTUUID أو mount.usr=PARTUUID، تُستبدل هذه بالمعرف الفريد العالمي (UUID) للقسم الخاص بالجذر أو /usr على التوالي. على سبيل المثال، سيُستبدل root=PARTUUID بـ root=PARTUUID=58c7d0b2-d224-4834-a16f-e036322e88f7 حيث أن 58c7d0b2-d224-4834-a16f-e036322e88f7 هو UUID لقسم الجذر.

KernelModules=, --kernel-modules=
    يأخذ قائمة من أنماط glob التي تحدد أي وحدات النواة يجب تضمينها في الصورة. يمكن بادئة كل وسيط بشرطة (-) لـ استبعاد الوحدات المطابقة. تُقيّم الوسائط بالترتيب، ويحدد آخر نمط مطابق (سواء كان إيجابيًا أو سلبيًا) النتيجة. تُضمن الوحدات التي تطابقت آخِرًا مع نمط إيجابي في الصورة، بالإضافة إلى تبعيات الوحدة والبرمجيات الثابتة الخاصة بها.

    يتم تجاهل اللاحقة .ko ولاحقة الضغط أثناء المطابقة.

    تُطابق الأنماط مع مسارات الوحدات بالنسبة إلى /usr/lib/module/<kver>، على سبيل المثال، الوحدة الموجودة في /usr/lib/module/<kver>/kernel/foo/bar.ko.xz تصبح kernel/foo/bar لأغراض المطابقة.

    تُعامل الأنماط التي تبدأ بـ "/" معاملة خاصة. يُطابق النمط أولاً مع مسار بالنسبة لـ /usr/lib/module/<kver>/kernel، وبعد ذلك فقط مع /usr/lib/module/<kver>/. هذا لتسهيل الأمر، حيث أن الاهتمام ينصب عادةً على الوحدات المدمجة تحت kernel/.

    على سبيل المثال، الوحدة الموجودة في /usr/lib/module/<kver>/kernel/foo/bar.ko.xz يمكن مطابقتها بـ /foo/bar أو /kernel/foo/bar.

    قد تتضمن أنماط glob الاسم الأساسي فقط (مثل loop)، والذي يجب أن يطابق الاسم الأساسي للوحدة، أو المسار النسبي (مثل block/loop)، والذي يجب أن يطابق المكونات النهائية لمسار الوحدة حتى الاسم الأساسي، أو مسارًا مطلقًا (مثل /drivers/block/loop)، والذي يجب أن يطابق المسار الكامل للوحدة.

    عند إلحاق /، سيطابق النمط جميع الوحدات الموجودة تحت ذلك الدليل.

    قد تتضمن الأنماط تعبيرات glob بنمط الصدفة (*، ?، [...-...]).

    إذا استُخدمت القيمة الخاصة default، تُضمن وحدات النواة المبدئية المحددة في تهيئة mkosi-initrd أيضًا.

    إذا استُخدمت القيمة الخاصة host، تُضمن الوحدات المحملة حاليًا على نظام المضيف أيضًا.

KernelModulesInitrd=, --kernel-modules-initrd=
    قيمة منطقية، مفعلة (true) مبدئيًا. إذا فُعلت، سيقوم mkosi عند بناء صورة قابلة للإقلاع بتوليد initrd إضافي لكل صورة نواة موحدة يجمعها. يحتوي هذا الـ initrd فقط على الوحدات وربما البرمجيات الثابتة، ثم يُلحق بـ initrd الأساسي لتشكيل ملف initrd النهائي. يحافظ هذا على استقلالية initrd الأساسي عن النواة، ويقوم فقط بتعزيزه بالوحدات اللازمة والخاصة بإصدار النواة عند تجميع صورة النواة الموحدة (UKI).

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

KernelInitrdModules=, --kernel-modules-initrd-include=
    مثل KernelModules=، ولكنه يحدد وحدات النواة التي سيتم تضمينها في initrd.

FirmwareFiles=, --firmware-files=
    يأخذ قائمة من أنماط glob التي تحدد ملفات البرمجيات الثابتة التي يجب تضمينها في الصورة. تُفسر الأنماط بنفس طريقة إعدادات KernelModules=، إلا أن المسارات تكون نسبية لـ /usr/lib/firmware/<subdir>. يتم تجاهل لاحقة الضغط ويجب عدم تضمينها في النمط.

    يتم تضمين تبعيات البرمجيات الثابتة لوحدات النواة المثبتة في الصورة آليًا.

    مثال: FirmwareFiles=cxgb4/bcm8483.bin أو FirmwareFiles=bcm8483.* سيؤدي كلاهما إلى تضمين /usr/lib/firmware/cxgb4/bcm8483.bin.xz، حتى لو لم تدرجها وحدة.

Locale=, --locale=, LocaleMessages=, --locale-messages=, Keymap=, --keymap=, Timezone=, --timezone=, Hostname=, --hostname=, RootShell=, --root-shell=
    الإعدادات Locale=، و --locale=، و LocaleMessages=، و --locale-messages=، و Keymap=، و --keymap=، و Timezone=، و --timezone=، و Hostname=، و --hostname=، و RootShell=، و --root-shell= تقابل خيارات systemd-firstboot التي تحمل نفس الاسم. انظر systemd-firstboot(1) لمزيد من المعلومات. بالإضافة إلى ذلك، وحيثما أمكن، تُكتب وثائق استيثاق systemd المقابلة لهذه الإعدادات في /usr/lib/credstore، لكي تنطبق حتى لو تم شحن /usr فقط في الصورة.

RootPassword=, --root-password=,
    تعيين كلمة مرور الجذر للنظام. إذا لم يُستخدم هذا الخيار، ولكن وُجد ملف mkosi.rootpw في الدليل المحلي، تُقرأ كلمة المرور منه آليًا أو إذا كان الملف قابلاً للتنفيذ يُشغل كبرنامج نصي ويُقرأ خرجه القياسي بدلاً من ذلك (انظر قسم SCRIPTS أدناه). إذا بدأت كلمة المرور بـ hashed:، تُعامل ككلمة مرور جذر مُموهة (hashed) بالفعل. تُخزن كلمة مرور الجذر أيضًا في /usr/lib/credstore تحت وثيقة استيثاق systemd المناسبة لكي تنطبق حتى لو تم شحن /usr فقط في الصورة. لإنشاء حساب مفتوح بدون أي كلمة مرور استخدم hashed: بدون أي قيمة مموهة.

Autologin=, --autologin=, -a
    تفعيل الولوج الآلي لمستخدم الجذر (root) على /dev/pts/0 (nspawn)، و /dev/tty1 و /dev/hvc0.

MakeInitrd=, --make-initrd=
    إضافة /etc/initrd-release و /init إلى الصورة لكي يمكن استخدامها كـ initramfs.

Ssh=, --ssh=
    يحدد ما إذا كان سيتم تثبيت وحدة مقبس sshd والخدمة المقابلة لها في الصورة النهائية. يأخذ أحد القيم: always، أو never، أو auto، أو runtime. القيمة المبدئية هي auto.

    إذا ضُبط على auto وكان sshd موجودًا في الصورة وثنائي المولد systemd-ssh-generator غير موجود، أو إذا ضُبط على always، سيقوم mkosi بتثبيت وحدات sshd في الصورة النهائية التي تعرض SSH عبر VSock. إذا ضُبط على never، لن يثبت mkosi هذه الوحدات. إذا استُخدمت القيمة runtime، فلن يثبت mkosi أي وحدات أيضًا ولكنه سيجهض بدء mkosi vm إذا لم تكن وثائق استيثاق SSH مهيأة. عند البناء بهذا الخيار وتشغيل الصورة باستخدام mkosi vm، يمكن استخدام أمر mkosi ssh للاتصال بالحاوية/الآلة الافتراضية عبر SSH. لاحظ أنه لا يزال يتعين عليك التأكد من تثبيت openssh في الصورة لكي يعمل mkosi ssh بشكل صحيح. شغّل mkosi genkey لتوليد شهادة X.509 ومفتاح خاص آليًا ليستخدمهما mkosi لتمكين وصول SSH إلى أي آلات افتراضية عبر mkosi ssh. للوصول إلى الصور التي تم إقلاعها باستخدام mkosi boot، استخدم machinectl.

    بدءًا من الإصدار v256 لـ systemd، سيقوم systemd-ssh-generator(8) بتوفير sshd عبر VSock آليًا عند التشغيل داخل آلة افتراضية. لذا إذا كنت تستخدم إصدارًا حديثًا من systemd داخل آلة افتراضية، فإن هذا الخيار لا يُستخدم عمومًا. لا تزال بحاجة إلى تثبيت openssh في الصورة، والإعداد المبدئي لـ --vsock=auto كافٍ لضمان توفر VSock داخل الآلة الافتراضية.

    ملاحظة: إذا كانت توزيعة الصورة تستخدم SELinux، سيُمنع وصول خدمة sshd الخاصة بـ mkosi إلى VSock، مما يؤدي إلى فشل الاتصال بها من المضيف. ستحتاج إما إلى تعطيل فرض SELinux، أو إنشاء وحدة سياسة مخصصة (على سبيل المثال باستخدام audit2allow).

SELinuxRelabel=, --selinux-relabel=
    يحدد ما إذا كان سيتم إعادة وسم الملفات لتطابق سياسة SELinux الخاصة بالصورة. يأخذ قيمة منطقية أو auto. القيمة المبدئية هي auto. في حال التعطيل، لن تُعاد وسم الملفات. وفي حال التفعيل، يجب تثبيت سياسة SELinux في الصورة ويجب أن يكون setfiles متاحًا لإعادة وسم الملفات. إذا حدثت أي أخطاء أثناء setfiles، سيفشل البناء. إذا ضُبط على auto، ستُعاد وسم الملفات إذا لم يكن mkosi يبني صورة دليل، وكانت سياسة SELinux مثبتة في الصورة وكان setfiles متاحًا. سيتم تجاهل أي أخطاء تحدث أثناء setfiles.

    لاحظ أنه عند التشغيل بدون امتيازات، سيفشل setfiles في تعيين أي لصائق ليست في سياسة SELinux الخاصة بالمضيف. لضمان نجاح setfiles بدون أخطاء، تأكد من تشغيل mkosi كجذر (root) أو البناء من نظام مضيف له نفس سياسة SELinux كالصورة التي تبنيها.

MachineId=, --machine-id=
    يأخذ UUID أو القيمة الخاصة random. يضبط معرف الآلة (machine ID) للصورة إلى الـ UUID المحدد. إذا ضُبط على random، سيُكتب UUID عشوائي في /etc/machine-id. إذا لم يُحدد صراحةً ووُجد الملف mkosi.machine-id في الدليل المحلي، يُقرأ الـ UUID المراد استخدامه منه؛ وإلا سيُكتب uninitialized في /etc/machine-id.

  قسم [التحقق]

SecureBoot=, --secure-boot=
    توقيع systemd-boot (إذا لم يكن موقعًا بعد) وأي صور نواة موحدة مولدة لـ UEFI SecureBoot (الإقلاع الآمن).

SecureBootAutoEnroll=, --secure-boot-auto-enroll=
    إعداد الإدراج الآلي لمفاتيح الإقلاع الآمن في الآلات الافتراضية كما هو موثق في systemd-boot(7) إذا استُخدم SecureBoot=. لاحظ أن systemd-boot سيقوم فقط بالإدراج الآلي لمفاتيح الإقلاع الآمن في الآلات الافتراضية بدءًا من systemd v253. للقيام بالإدراج الآلي على systemd v252 أو على الأجهزة الحقيقية، اكتب ملف تهيئة systemd-boot إلى /efi/loader/loader.conf باستخدام شجرة إضافية تحتوي على secure-boot-enroll force أو secure-boot-enroll manual. الإدراج الآلي غير مدعوم في إصدارات systemd الأقدم من v252. القيمة المبدئية هي yes.

SecureBootKey=, --secure-boot-key=
    المسار إلى ملف PEM الذي يحتوي على المفتاح السري لتوقيع صورة نواة UEFI إذا استُخدم SecureBoot= وتوقيعات PCR عندما يُستخدم SignExpectedPcr= أيضًا. عندما يُحدد SecureBootKeySource=، يعتمد نوع المدخل على المصدر.

SecureBootCertificate=, --secure-boot-certificate=
    المسار إلى ملف X.509 الذي يحتوي على الشهادة لصورة نواة UEFI الموقعة، في حال استخدام SecureBoot=.

SecureBootSignTool=, --secure-boot-sign-tool=
    الأداة المراد استخدامها لتوقيع ثنائيات PE الخاصة بالإقلاع الآمن. يأخذ أحد القيم: systemd-sbsign، أو sbsign، أو auto. القيمة المبدئية هي auto. إذا ضُبط على auto، تُستخدم إما systemd-sbsign أو sbsign إذا توفرتا، مع تفضيل systemd-sbsign.

Verity=, --verity=
    ما إذا كان سيتم فرض أو تعطيل verity لصور الامتداد. يأخذ أحد القيم: signed، أو hash، أو defer، أو auto أو قيمة منطقية. إذا ضُبط على signed، يجب وجود مفتاح وشهادة verity وسيفشل البناء إذا لم نكتشف أي أقسام verity في صورة القرص التي أنتجها systemd-repart. في حال التعطيل، ستُستبعد أقسام verity من صور الامتداد التي أنتجها systemd-repart. إذا ضُبط على hash، يهيئ mkosi أداة systemd-repart لإنشاء قسم hash لـ verity، ولكن بدون قسم توقيع. إذا ضُبط على defer، سيُخصص مساحة لقسم توقيع verity ولكن لن يتم ملؤه بعد. إذا ضُبط على auto ووُجد مفتاح وشهادة verity، سيمررهما mkosi إلى systemd-repart ويتوقع أن تحتوي صورة القرص المولدة على أقسام verity، لكن البناء لن يفشل إذا لم يُعثر على أقسام verity في صورة القرص التي أنتجها systemd-repart.

    لاحظ أن التعطيل الصريح لتوقيع و/أو hash الخاص بـ verity لم يُنفذ بعد لـ مخرج القرص (disk) ويعمل فقط لصور الامتداد في الوقت الحالي.

VerityKey=, --verity-key=
    المسار إلى ملف PEM الذي يحتوي على المفتاح السري لتوقيع توقيع verity، إذا أُضيف قسم توقيع verity باستخدام systemd-repart. عندما يُحدد VerityKeySource=، يعتمد نوع المدخل على المصدر.

VerityCertificate=, --verity-certificate=
    المسار إلى ملف X.509 الذي يحتوي على الشهادة لتوقيع توقيع verity، إذا أُضيف قسم توقيع verity باستخدام systemd-repart.

SignExpectedPcr=, --sign-expected-pcr=
    قياس مكونات صورة النواة الموحدة (UKI) باستخدام systemd-measure وتضمين توقيع PCR في صورة النواة الموحدة. يأخذ هذا الخيار قيمة منطقية أو القيمة الخاصة auto، وهي القيمة المبدئية، والتي تعادل قيمة صواب إذا كان ثنائي systemd-measure موجودًا في المسار PATH. يعتمد هذا على تفعيل SecureBoot= والمفتاح من SecureBootKey=.

SignExpectedPcrKey=, --sign-expected-pcr-key=
    المسار إلى ملف PEM الذي يحتوي على المفتاح السري لتوقيع توقيعات PCR المتوقعة. عندما يُحدد SignExpectedPcrKeySource=، يعتمد نوع المدخل على المصدر.

SignExpectedPcrCertificate=, --sign-expected-pcr-certificate=
    المسار إلى ملف X.509 الذي يحتوي على الشهادة لتوقيع توقيعات PCR المتوقعة.

SecureBootKeySource=, --secure-boot-key-source=, VerityKeySource=, --verity-key-source=, SignExpectedPcrKeySource=, --sign-expected-key-source=
    مصدر المفتاح الخاص المقابل، لدعم محركات ومزودات OpenSSL، على سبيل المثال --secure-boot-key-source=engine:pkcs11 أو --secure-boot-key-source=provider:pkcs11.

SecureBootCertificateSource=, --secure-boot-certificate-source=, VerityCertificateSource=, --verity-certificate-source=, SignExpectedPcrCertificateSource=, --sign-expected-certificate-source=
    مصدر الشهادة المقابلة، لدعم مزودي OpenSSL، على سبيل المثال --secure-boot-certificate-source=provider:pkcs11. لاحظ أن المحركات غير مدعومة.

Passphrase=, --passphrase=
    تحديد المسار إلى ملف يحتوي على عبارة المرور لاستخدامها في تعمية LUKS. يجب أن يحتوي الملف على عبارة المرور حرفيًا، وألا ينتهي بمحرف سطر جديد (أي بنفس التنسيق الذي تتوقعه أدوات cryptsetup و /etc/crypttab لملفات عبارة المرور). يجب أن يكون للملف وضع وصول 0600 أو أقل.

    لاحظ أن هذا الإعداد بمفرده لا يفعل أي تعمية. يجب عليك أيضًا إضافة ملف تعريف قسم واحد أو أكثر إلى mkosi.repart/ مع Encrypt=key-file لإضافة أقسام معماة إلى الصورة.

Checksum=, --checksum=
    توليد ملف <output>.SHA256SUMS لكافة النتائج المولدة بعد اكتمال البناء.

Sign=, --sign=
    توقيع ملف SHA256SUMS المولد باستخدام gpg بعد الاكتمال.

OpenPGPTool=, --openpgp-tool=
    تطبيق OpenPGP المراد استخدامه للتوقيع. الأداة gpg هي المبدئية. سيؤدي اختيار قيمة مختلفة عن القيمة المبدئية إلى استخدام أداة Stateless OpenPGP (SOP) المعطاة لتوقيع ملف SHA256SUMS.

    من الأمثلة على الخيارات sqop و rsop، ولكن أي تطبيق من https://www.openpgp.org/about/sop/ يمكن تثبيته محليًا سيعمل.

Key=, --key=
    اختر مفتاح gpg لاستخدامه في توقيع SHA256SUMS. يجب أن يكون هذا المفتاح موجودًا بالفعل في حلقة مفاتيح gpg.

  قسم [البناء]

ToolsTree=, --tools-tree=
    إذا حُدد، سيُبحث عن البرامج التي يشغلها mkosi لبناء وإقلاع صورة داخل الشجرة المعطاة بدلاً من نظام المضيف. استخدم هذا الخيار لجعل عمليات بناء الصور أكثر قابلية للتكرار عن طريق استخدام نفس إصدارات البرامج دائمًا لبناء الصورة النهائية بدلاً من أي إصدار مثبت على نظام المضيف. إذا لم يُستخدم هذا الخيار، ووُجد الدليل mkosi.tools/ في الدليل المحلي، سيُستخدم آليًا لهذا الغرض مع اعتبار الدليل الجذر كهدف.

    يُحتفظ بدليل شجرة الأدوات بين عمليات بناء الصور المتكررة ما لم يُنظف عن طريق استدعاء mkosi clean -f.

    لاحظ أن الثنائيات الموجودة في أي من المسارات المهيأة باستخدام ExtraSearchPaths= ستُنفذ باستخدام /usr/ من شجرة الأدوات بدلاً من المضيف. إذا كانت توزيعة أو إصدار المضيف لا يطابق توزيعة أو إصدار شجرة الأدوات على التوالي، فقد يؤدي ذلك إلى حالات فشل عند محاولة تنفيذ الثنائيات من أي من مسارات البحث الإضافية.

    إذا ضُبط على yes، سيقوم mkosi آليًا بإضافة صورة شجرة أدوات إضافية واستخدامها كشجرة أدوات. يمكن تهيئة هذه الصورة بشكل أكبر باستخدام الإعدادات أدناه أو باستخدام mkosi.tools.conf الذي يمكن أن يكون ملفًا أو دليلاً يحتوي على تهيئة إضافية لشجرة الأدوات المبدئية.

    انظر قسم TOOLS TREE لمزيد من التفاصيل.

ToolsTreeDistribution=, --tools-tree-distribution=
    ضبط التوزيعة المراد استخدامها لشجرة الأدوات المبدئية. القيمة المبدئية هي توزيعة المضيف باستثناء أوبونتو (Ubuntu)، التي يكون مبدؤها دبيان (Debian)، و RHEL و CentOS و Alma و Rocky، التي يكون مبدؤها فيدورا (Fedora)، أو custom إذا لم تكن توزيعة المضيف توزيعة مدعومة.

ToolsTreeRelease=, --tools-tree-release=
    اضبط إصدارة التوزيعة لاستخدامها في شجرة الأدوات المبدئية. مبدئيًا، تُستخدم الإصدارة المبدئية المضمنة في mkosi للتوزيعة.

ToolsTreeProfiles=, --tools-tree-profile=
    اضبط التشكيلات المراد تفعيلها لشجرة الأدوات المبدئية. تأخذ قائمة مفصولة بفاصلة تتكون من devel، وmisc، وpackage-manager وruntime. مبدئيًا، تُفعل كل التشكيلات عدا devel.

    تحتوي تشكيلة devel على الأدوات المطلوبة لبناء مشاريع (C/C++). وتحتوي تشكيلة misc على أدوات مفيدة متنوعة يسهل توفرها في البرامج النصية. تحتوي تشكيلة مدير الحزم على مديري الحزم والأدوات المتعلقة بها بخلاف تلك الأصيلة في توزيعة شجرة الأدوات. تحتوي تشكيلة runtime على الأدوات المطلوبة لإقلاع الصور في حاوية systemd-nspawn أو في آلة افتراضية.

ToolsTreeMirror=, --tools-tree-mirror=
    اضبط المرآة لاستخدامها في شجرة الأدوات المبدئية. مبدئيًا، تُستخدم المرآة المبدئية لتوزيعة شجرة الأدوات.

ToolsTreeRepositories=, --tools-tree-repository=
    نفس Repositories= ولكن لشجرة الأدوات المبدئية.

ToolsTreeSandboxTrees=, --tools-tree-sandbox-tree=
    نفس SandboxTrees= ولكن لشجرة الأدوات المبدئية.

ToolsTreePackages=, --tools-tree-package=
    حزم إضافية لتثبيتها في شجرة الأدوات المبدئية. تأخذ قائمة مفصولة بفاصلة من مواصفات الحزم. يمكن استخدام هذا الخيار عدة مرات وفي هذه الحالة تُدمج قوائم الحزم المحددة.

ToolsTreePackageDirectories=, --tools-tree-package-directory=
    نفس PackageDirectories=، ولكن لشجرة الأدوات المبدئية.

ToolsTreeCertificates=, --tools-tree-certificates=
    حدد ما إذا كنت تريد استخدام الشهادات والمفاتيح من شجرة الأدوات. مُفعل مبدئيًا. في حالة التفعيل، تُستخدم /etc/pki/ca-trust، و/etc/pki/tls، و/etc/ssl، و/etc/ca-certificates، و/var/lib/ca-certificates من شجرة الأدوات. بخلاف ذلك، تُؤخذ هذه الأدلة من المضيف.

ExtraSearchPaths=, --extra-search-path=
    قائمة بالمسارات المفصولة بنقطتين للبحث عن الأدوات فيها، قبل استخدام مسار البحث $PATH العادي.

Incremental=, --incremental=, -i
    يأخذ إما strict أو قيمة منطقية كمعامل له. يُفعل وضع البناء المتزايد. في هذا الوضع، تُنشأ نسخة من صورة نظام التشغيل فور تثبيت جميع حزم نظام التشغيل وتنفيذ برامج الإعداد النصية ولكن قبل استدعاء برامج mkosi.build النصية (أو أي شيء يحدث بعدها). في الاستدعاءات اللاحقة لـ mkosi مع مفتاح -i، قد تُستخدم هذه الصورة المخبوءة في الخبيئة لتخطي تثبيت حزم نظام التشغيل، مما يسرع أوقات البناء المتكررة بشكل كبير. لاحظ أنه على الرغم من وجود إبطال بدائي للخبيئة، إلا أنه ليس مثاليًا بالتأكيد. لإجبار إعادة بناء الصورة المخبوءة، ادمج -i مع -ff لضمان إزالة الصورة المخبوءة أولاً ثم إعادة إنشائها.

    إذا ضُبط على strict، سيفشل البناء إذا لم تكن الصورة المخبوءة المبنية مسبقًا موجودة.

CacheOnly=, --cache-only=
    يأخذ أحد القيم auto أو metadata أو always أو never. القيمة المبدئية هي auto. إذا ضُبط على always، يُوجه مدير الحزم بعدم التراسل مع الشبكة. يوفر هذا مستوى أدنى من قابلية إعادة الإنتاج، طالما أن خبيئة الحزم ممتلئة بالكامل بالفعل. إذا ضُبط على metadata، لا يزال بإمكان مدير الحزم تنزيل الحزم، لكننا لن نمزامن البيانات الوصفية للمستودع. إذا ضُبط على auto، تُزامن البيانات الوصفية للمستودع ما لم تكن لدينا صورة مخبوءة (انظر Incremental=) ويمكن تنزيل الحزم أثناء البناء. إذا ضُبط على never، تُزامن البيانات الوصفية للمستودع دائمًا ويمكن تنزيل الحزم أثناء البناء.

SandboxTrees=, --sandbox-tree=
    يأخذ قائمة مفصولة بفاصلة من أزواج مسارات مفصولة بنقطتين. يشير المسار الأول لكل زوج إلى دليل لنسخه إلى معزل (sandbox) mkosi قبل تنفيذ أداة ما. يشير المسار الثاني لكل زوج إلى الدليل المستهدف داخل المعزل. إذا لم يُوفر المسار الثاني، يُنسخ الدليل فوق الدليل الرئيس للمعزل. يُفسر المسار الثاني دائمًا كمسار مطلق. إذا وُجد دليل mkosi.sandbox/ في الدليل المحلي، فسيُستخدم لهذا الغرض مع اعتبار الدليل الرئيس هو الهدف (انظر أيضًا قسم FILES أدناه).

    سيبحث mkosi عن ضبط مدير الحزم والملفات المتعلقة به في أشجار المعزل المضبوطة. ما لم يُحدد خلاف ذلك، سيستخدم ملفات الضبط من مواقعها المتعارف عليها في /usr أو /etc في أشجار المعزل. على سبيل المثال، سيبحث عن /etc/dnf/dnf.conf في أشجار المعزل إذا وُظف dnf لتثبيت الحزم.

WorkspaceDirectory=, --workspace-directory=
    مسار الدليل المخصص لتخزين البيانات المطلوبة مؤقتًا أثناء بناء الصورة. يجب أن يتوفر في هذا الدليل مساحة كافية لتخزين صورة نظام التشغيل كاملة، رغم أن المساحة المستخدمة فعليًا في معظم الأوضاع تكون أصغر. إذا لم يُحدد، يُستخدم دليل فرعي من $XDG_CACHE_HOME (إن وُجد)، أو $CACHE_DIRECTORY (إن وُجد)، أو $HOME/.cache (إن وُجد) أو /var/tmp.

    تُزال البيانات الموجودة في هذا الدليل آليًا بعد كل عملية بناء. من الآمن إزالة محتويات هذا الدليل يدويًا في حالة إيقاف استدعاء mkosi بشكل غير طبيعي (على سبيل المثال، بسبب إعادة التشغيل/انقطاع الطاقة).

CacheDirectory=, --cache-directory=
    يأخذ مسارًا لدليل يُستخدم كدليل خبيئة متزايد للصور المتزايدة المنتجة عند تفعيل خيار Incremental=. إذا لم يُستخدم هذا الخيار، ولكن وُجد دليل mkosi.cache/ في الدليل المحلي، فسيُستخدم آليًا لهذا الغرض.

CacheKey=, --cache-key=
    يحدد الدليل الفرعي داخل دليل الخبيئة حيث تُخزن الصورة المخبوءة. قد يشمل ذلك كلاً من المحددات العادية (انظر Specifiers) والمحددات المؤجلة الخاصة، التي تُوسع بعد انتهاء تحليل الضبط، بدلاً من أثنائه، والموصوفة أدناه. التنسيق المبدئي لهذا المعامل هو &d~&r~&a~&I.

    يمكن استخدام المحددات التالية:

    المحدد | القيمة
    && | محرف &
    &d | Distribution=
    &r | Release=
    &a | Architecture=
    &i | ImageId=
    &v | ImageVersion=
    &I | اسم الصورة الفرعية داخل mkosi.images/ أو main

    لاحظ أن جميع الصور ضمن البناء يجب أن تمتلك مفتاح خبيئة فريد.

PackageCacheDirectory=, --package-cache-dir=
    يأخذ مسارًا لدليل يُستخدم كدليل خبيئة للحزم لمدير حزم التوزيعة المستخدم. إذا لم يُضبط، ولكن وُجد دليل mkosi.pkgcache/ في الدليل المحلي، فسيُستخدم آليًا لهذا الغرض، وإلا سيُستخدم دليل مناسب في دليل المنزل للمستخدم أو النظام.

BuildDirectory=, --build-directory=
    يأخذ مسارًا لدليل يُستخدم كدليل بناء لأنظمة البناء التي تدعم البناء خارج الشجرة (مثل Meson). الدليل المستخدم بهذه الطريقة يُشارك بين عمليات البناء المتكررة، ويسمح لنظام البناء بإعادة استخدام النواتج (مثل ملفات الكائنات، والملفات التنفيذية، ...) المولدة في الاستدعاءات السابقة. يمكن لبرامج البناء النصية العثور على مسار هذا الدليل في متغير البيئة $BUILDDIR. يُوصل هذا الدليل في الدليل الرئيس للصورة عند استدعاء mkosi-chroot أثناء تنفيذ برامج البناء النصية. إذا لم يُحدد هذا الخيار، ولكن وُجد دليل mkosi.builddir/ في الدليل المحلي، فسيُستخدم آليًا لهذا الغرض (انظر أيضًا قسم FILES أدناه).

BuildKey=, --build-key=
    يحدد الدليل الفرعي داخل دليل البناء حيث تُخزن نواتج البناء المتزايد. قد يشمل ذلك كلاً من المحددات العادية (انظر Specifiers) والمحددات المؤجلة الخاصة، التي تُوسع بعد انتهاء تحليل الضبط، بدلاً من أثنائه، وهي نفس المحددات المؤجلة التي يدعمها CacheKey=. التنسيق المبدئي لهذا المعامل هو &d~&r~&a.

    لتعطيل استخدام دليل بناء فرعي تمامًا، خصص العلامة - حرفيًا لهذا الضبط.

UseSubvolumes=, --use-subvolumes=
    يأخذ قيمة منطقية أو auto. يُفعل أو يُعطل استخدام أحجام btrfs الفرعية لمخرجات شجرة الدليل. في حالة التفعيل، سيُنشئ mkosi الدليل الرئيس كحجم btrfs فرعي ويستخدم لقطات حجم btrfs الفرعي حيثما أمكن لنسخ الأشجار الأساسية أو المخبوءة وهو أسرع بكثير من إجراء نسخ تكراري. إذا فُعل صراحةً وكان btrfs غير مثبت أو تعذر إنشاء أحجام فرعية، يُرفع خطأ. إذا ضُبط على auto، يُتجاهل غياب btrfs أو الفشل في إنشاء أحجام فرعية.

RepartOffline=, --repart-offline=
    يحدد ما إذا كان سيتم بناء صور القرص باستخدام أجهزة الحلقة (loopback). مُفعل مبدئيًا. عند التفعيل، لن يستخدم systemd-repart أجهزة الحلقة لبناء صور القرص. عند التعطيل، سيستخدم systemd-repart دائمًا أجهزة الحلقة لبناء صور القرص.

    لاحظ أنه عند استخدام RepartOffline=no، لا يمكن لـ mkosi العمل بدون صلاحيات ويجب إجراء بناء الصورة كمستخدم جذر (root) خارج أي حاويات ومع توفر أجهزة الحلقة على نظام المضيف.

    يوجد حاليًا سيناريوهان معروفان حيث يجب استخدام RepartOffline=no. الأول هو عند استخدام Subvolumes= في ملف تعريف قسم repart، حيث لا يمكن إنشاء أحجام فرعية بدون استخدام أجهزة الحلقة. الثاني هو عند إنشاء نظام باستخدام SELinux وقسم رئيس بتنسيق XFS. نظرًا لأن mkfs.xfs لا يدعم ملء نظام ملفات XFS بسمات ممتدة، يجب استخدام أجهزة الحلقة لضمان وصول سمات SELinux الممتدة إلى نظام ملفات XFS المولد.

History=, --history=
    يأخذ قيمة منطقية. في حالة التفعيل، سيكتب mkosi الضبط المقدم عبر واجهة سطر الأوامر لآخر بناء في الدليل الفرعي .mkosi-private في الدليل الذي استُدعي منه. تُعاد استخدام هذه المعاملات طالما لم تُعد بناء الصورة لتجنب الاضطرار إلى تحديدها مرارًا وتكرارًا.

    لإعطاء مثال على سبب فائدة ذلك، إذا نفذت mkosi -O my-custom-output-dir -f متبوعًا بـ mkosi vm، سيفشل mkosi قائلاً إن الصورة لم تُبنَ بعد. إذا نفذت mkosi -O my-custom-output-dir --history=yes -f متبوعًا بـ mkosi vm، فسيقوم بإقلاع الصورة المبنية في الخطوة السابقة كما هو متوقع.

BuildSources=, --build-sources=
    يأخذ قائمة مفصولة بفاصلة من أزواج مسارات مفصولة بنقطتين. يشير المسار الأول لكل زوج إلى دليل لوصله من المضيف. يشير المسار الثاني لكل زوج إلى الدليل حيث يجب وصل دليل المصدر عند تشغيل البرامج النصية. كل مسار مستهدف يُسبق بـ /work/src وتُرتب جميع مصادر البناء أبجديًا حسب أهدافها قبل الوصل، بحيث تُوصل مسارات المستوى الأعلى أولاً. إذا لم تُضبط صراحةً، يُوصل دليل العمل الحالي في /work/src.

BuildSourcesEphemeral=, --build-sources-ephemeral=
    يأخذ قيمة منطقية أو القيمة الخاصة buildcache. مُعطل مبدئيًا. يضبط ما إذا كانت التغييرات على أدلة المصدر، ودليل العمل والمضبوطة باستخدام BuildSources=، ستستمر. في حالة التفعيل، ستُصفر جميع أدلة المصدر إلى حالتها الأصلية في كل مرة بعد تشغيل جميع البرامج النصية من نوع معين (باستثناء برامج المزامنة النصية).

    💥💣💥 إذا ضُبط إلى buildcache فلن تُهمش الطبقة الفوقية (overlay) عند تشغيل كراسات البناء، بل تُحفظ في دليل البناء، المضبط عبر BuildDirectory=، وستُستخدم مجددًا في التشغيلات اللاحقة. تظل الطبقة الفوقية مُهمشة لكل الكراسات الأخرى. يمكن استخدام هذا الخيار لتنفيذ خبأ متقدم للبناء، لكنه قد يؤدي إلى حالات غير متوقعة لدليل المصدر. عند استخدام هذا الخيار، يجب ضبط دليل بناء. 💥💣💥

Environment=, --environment=
    يضيف متغيرات إلى البيئة التي يتم تنفيذ مديري الحزم وبرامج الإعداد/البناء/ما بعد التثبيت/الإنهاء النصية بها. يأخذ قائمة مفصولة بمسافات من تعيينات المتغيرات أو مجرد أسماء المتغيرات. في الحالة الأخيرة، ستُمرر قيم تلك المتغيرات من البيئة التي استُدعي فيها mkosi. قد يُحدد هذا الخيار أكثر من مرة، وفي هذه الحالة ستُضبط جميع المتغيرات المدرجة. إذا ضُبط نفس المتغير مرتين، فإن الضبط الأخير يتجاوز السابق.

EnvironmentFiles=, --env-file=
    يأخذ قائمة مفصولة بفاصلة من المسارات إلى ملفات تحتوي على تعريفات متغيرات البيئة لإضافتها إلى بيئة البرمجة النصية. يستخدم mkosi.env إذا وُجد في الدليل المحلي. تُقرأ المتغيرات أولاً من mkosi.env إن وُجد، ثم من قائمة الملفات المعطاة ثم من ضبط Environment=.

WithTests=, --with-tests=, -T
    إذا ضُبط على خطأ (أو عند استخدام خيار سطر الأوامر)، يُضبط متغير البيئة $WITH_TESTS على 0 عند استدعاء برامج mkosi.build النصية. يُفترض أن يُستخدم هذا بواسطة برامج البناء النصية لتجاوز أي اختبارات وحدات أو اختبارات تكامل تُشغل عادةً أثناء عملية بناء المصدر. لاحظ أن هذا الخيار ليس له أي تأثير ما لم تلتزم به برامج بناء mkosi.build.

WithNetwork=, --with-network=
    عندما تكون القيمة صوابًا، يُمكّن الاتصال بالشبكة أثناء استدعاء برامج البناء النصية mkosi.build. مبدئيًا، تعمل برامج البناء النصية مع إيقاف الشبكة. يُمرر متغير البيئة $WITH_NETWORK إلى برامج بناء mkosi.build موضحًا ما إذا كان البناء يتم بشبكة أو بدونها.

ProxyUrl=, --proxy-url=
    اضبط وكيلاً لاستخدامه لجميع اتصالات الشبكة الصادرة. تُضبط الأدوات المتنوعة التي يستدعيها mkosi والتي يمكن ضبط الوكيل لها لاستخدام هذا الوكيل. يضبط mkosi أيضًا متغيرات بيئة معروفة متنوعة لتحديد الوكيل المراد استخدامه لأي برامج يستدعيها قد تحتاج إلى وصول للإنترنت.

ProxyExclude=, --proxy-exclude=
    اضبط أسماء المضيفين التي يجب ألا تمر طلباتها عبر الوكيل. يأخذ قائمة مفصولة بفاصلة من أسماء المضيفين.

ProxyPeerCertificate=, --proxy-peer-certificate=
    اضبط ملفًا يحتوي على شهادات تُستخدم للتحقق من الوكيل. القيمة المبدئية هي مخزن الشهادات على مستوى النظام.

    حاليًا، دعم ضبط شهادة نظير الوكيل متاح فقط عند استخدام dnf أو dnf5 لبناء الصورة.

ProxyClientCertificate=, --proxy-client-certificate=
    اضبط ملفًا يحتوي على الشهادة المستخدمة لاستيثاق العميل مع الوكيل.

    حاليًا، دعم ضبط شهادة عميل الوكيل متاح فقط عند استخدام dnf أو dnf5 لبناء الصورة.

ProxyClientKey=, --proxy-client-key=
    اضبط ملفًا يحتوي على المفتاح الخاص المستخدم لاستيثاق العميل مع الوكيل. المبدئي هو شهادة عميل الوكيل إن وُفرت.

    حاليًا، دعم ضبط مفتاح عميل الوكيل متاح فقط عند استخدام dnf أو dnf5 لبناء الصورة.

  قسم [Runtime] (المعروف سابقًا بقسم [Host])

NSpawnSettings=, --settings=
    يحدد ملف إعدادات .nspawn ليستخدمه systemd-nspawn في أفعال boot وshell، ووضعه بجانب ملف الصورة المولد. هذا مفيد لضبط بيئة systemd-nspawn عند تشغيل الصورة. إذا لم يُستخدم هذا الضبط ولكن وُجد ملف mkosi.nspawn في الدليل المحلي، فسيُستخدم آليًا لهذا الغرض.

VirtualMachineMonitor=, --vmm=
    يضبط مراقب الآلة الافتراضية المراد استخدامه. يأخذ واحدًا من qemu أو vmspawn. القيمة المبدئية هي qemu.

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

    عند ضبطه على vmspawn، يُستخدم systemd-vmspawn لإقلاع الصورة، ويدعم vmspawn فقط الصور من نوع القرص والدليل. أي معاملات تُحدد بعد الفعل تُلحق باستدعاء systemd-vmspawn وتُفسر كخيار vmspawn إضافية ومعاملات سطر أوامر نواة إضافية.

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

CPUs=, --cpus=
    يضبط عدد نوى المعالج لتخصيصها للضيف عند إقلاع آلة افتراضية. المبدئي هو 2.

    عند ضبطه على 0، سيُستخدم عدد المعالجات المتاحة لعملية mkosi.

RAM=, --ram=
    يضبط مقدار ذاكرة الوصول العشوائي المخصصة للضيف عند إقلاع آلة افتراضية. المبدئي هو 2G.

MaxMem=, --maxmem=
    يضبط أقصى مقدار من الذاكرة يمكن للضيف نشره إجمالاً (ذاكرة الوصول العشوائي + أجهزة الذاكرة القابلة للتوصيل السريع). المبدئي هو مقدار ذاكرة الوصول العشوائي المضبوطة.

KVM=, --kvm=
    يضبط ما إذا كان يجب استخدام تسريع KVM عند إقلاع آلة افتراضية. يأخذ قيمة منطقية أو auto. المبدئي هو auto.

CXL=, --cxl=
    يضبط ما إذا كانت أجهزة CXL مفعلة لآلة معينة. صالح فقط إذا كانت المعمارية تدعم cxl. يأخذ قيمة منطقية. المبدئي هو false.

VSock=, --vsock=
    يضبط ما إذا كان سيتم توفير vsock عند إقلاع آلة افتراضية. يأخذ قيمة منطقية أو auto. المبدئي هو auto.

VSockCID=, --vsock-cid=
    يضبط معرف اتصال vsock لاستخدامه عند إقلاع آلة افتراضية. يأخذ رقمًا في المدى [3, 0xFFFFFFFF) أو hash أو auto. المبدئي هو auto. عند ضبطه على hash، سيُشتق معرف الاتصال من المسار الكامل للصورة. عند ضبطه على auto، سيحاول mkosi العثور على معرف اتصال حر آليًا. بخلاف ذلك، سيُستخدم الرقم المقدم كما هو.

TPM=, --tpm=
    اضبط ما إذا كان سيتم استخدام وحدة نظام منصة موثوقة (TPM) افتراضية عند إقلاع آلة افتراضية. يأخذ قيمة منطقية أو auto. المبدئي هو auto.

Removable=, --removable=
    يضبط ما إذا كان سيتم إرفاق الصورة كجهاز قابل للإزالة عند إقلاع آلة افتراضية. يأخذ قيمة منطقية. المبدئي هو no.

Firmware=, --firmware=
    يضبط البرنامج الثابت للآلة الافتراضية المراد استخدامه. يأخذ واحدًا من uefi أو uefi-secure-boot أو bios أو linux أو linux-noinitrd أو auto. المبدئي هو auto. عند ضبطه على uefi، يُستخدم البرنامج الثابت OVMF بدون دعم الإقلاع الآمن. عند ضبطه على uefi-secure-boot، يُستخدم البرنامج الثابت OVMF مع دعم الإقلاع الآمن. عند ضبطه على bios، يُستخدم برنامج SeaBIOS الثابت المبدئي. عند ضبطه على linux، يُستخدم إقلاع النواة المباشر. انظر خيار Linux= لمزيد من التفاصيل حول أي صورة نواة تُستخدم مع إقلاع النواة المباشر. linux-noinitrd مطابق لـ linux باستثناء عدم استخدام initrd. عند ضبطه على auto، يُستخدم uefi-secure-boot إن أمكن وlinux بخلاف ذلك.

FirmwareVariables=, --firmware-variables=
    يضبط المسار إلى ملف متغيرات البرنامج الثابت للآلة الافتراضية المراد استخدامه. حاليًا، يُؤخذ هذا الخيار في الاعتبار فقط عند استخدام البرنامج الثابت uefi أو uefi-secure-boot. إذا لم يُحدد، سيبحث mkosi عن ملف المتغيرات المبدئي ويستخدمه بدلاً من ذلك.

    عند ضبطه على microsoft، سيُستخدم ملف متغيرات برنامج ثابت بداخلة شهادات الإقلاع الآمن من Microsoft مسجلة بالفعل.

    عند ضبطه على microsoft-mok، سيُوسع ملف متغيرات البرنامج الثابت الذي يحتوي بالفعل على شهادات الإقلاع الآمن من Microsoft بمتغير MokList يحتوي على شهادة الإقلاع الآمن من SecureBootCertificate=. هذا مخصص للاستخدام مع ثنائيات shim الموقعة من التوزيعة وثنائيات EFI الموقعة محليًا.

    عند ضبطه على custom، ستُسجل شهادة الإقلاع الآمن من SecureBootCertificate= في ملف متغيرات البرنامج الثابت المبدئي.

    يمكن استخدام virt-fw-vars من مشروع virt-firmware (https://gitlab.com/kraxel/virt-firmware) لتخصيص ملفات متغيرات OVMF.

Linux=, --linux=
    اضبط صورة النواة لاستخدامها في إقلاع النواة المباشر لـ qemu. إذا لم تُحدد، سيستخدم mkosi النواة المقدمة عبر سطر الأوامر (خيار -kernel) أو أحدث نواة وُجدت مثبتة في الصورة (أو سيفشل إذا لم تُثبت أي نواة في الصورة).

    لاحظ أنه عند استخدام تنسيق المخرجات cpio، يُستخدم إقلاع النواة المباشر بغض النظر عن البرنامج الثابت المضبوط. اعتمادًا على البرنامج الثابت المضبوط، قد يقوم qemu بإقلاع النواة بنفسه أو باستخدام البرنامج الثابت المضبوط.

    قد يشمل هذا الضبط كلاً من المحددات العادية (انظر Specifiers) والمحددات المؤجلة الخاصة، التي تُوسع بعد انتهاء تحليل الضبط، بدلاً من أثنائه، والموصوفة أدناه.

    يمكن استخدام المحددات التالية:

    المحدد | القيمة
    && | محرف &
    &b | دليل البناء النهائي (بما في ذلك الدليل الفرعي)

Drives=, --drive=
    أضف محرك أقراص. يأخذ سلسلة مفصولة بنقطتين بتنسيق <id>:<size>[:<directory>[:<options>[:<file-id>[:<flags>]]]]. يحدد id المعرف المخصص للمحرك. يمكن استخدام هذا كخاصية drive= في أجهزة qemu المتنوعة. يحدد size حجم المحرك. يأخذ هذا الحجم بالبايت. بالإضافة إلى ذلك، يمكن استخدام اللواحق K وM وG لتحديد الحجم بالكيلوبايت والميجابايت والجيجابايت على التوالي. يحدد directory اختياريًا الدليل الذي سيتم إنشاء الملف الذي يدعم المحرك فيه. إذا لم يُضبط، فسيتم إنشاء الملف تحت /var/tmp. تحدد options اختياريًا خصائص إضافية مفصولة بفاصلة تُمرر حرفيًا إلى خيار -blockdev الخاص بـ qemu. يحدد file-id معرف الملف الذي يدعم المحرك. إذا لم يُضبط، فسيأخذ معرف المحرك مبدئيًا. ستتشارك المحركات التي لها نفس معرف الملف في الملف الداعم. سيتم تحديد دليل الملف وحجمه من المحرك الأول الذي يحمل معرف ملف معينًا. تأخذ flags قائمة مفصولة بفاصلة من أعلام المحرك التي تدعم حاليًا persist فقط. يحدد persist ما إذا كان المحرك سيستمر عبر استدعاءات qemu. سيتم إنشاء الملفات التي تدعم المحركات وفقًا للمخطط /<directory>/mkosi-drive-<machine-or-image-name>-<file-id>. يمكنك تخطي القيم بضبطها على سلسلة فارغة، فتحديد myfs:1G::::persist مثلاً سينشئ محرك أقراص مستمرًا تحت /var/tmp/mkosi-drive-main-myfs.

    مثال على الاستخدام:

            [Runtime]
            Drives=btrfs:10G
                   ext4:20G
            QemuArgs=-device nvme,serial=btrfs,drive=btrfs
                     -device nvme,serial=ext4,drive=ext4

QemuArgs=
    قائمة مفصولة بمسافات من المعاملات الإضافية لتمريرها عند استدعاء qemu.

Ephemeral=, --ephemeral=
    عند استخدامه مع أفعال shell أو boot أو vm، يشغل هذا الخيار الفعل المحدد على لقطة مؤقتة لصورة المخرجات تُزال فور إنهاء الحاوية. أخذ اللقطة المؤقتة أكثر كفاءة في نظم الملفات التي تدعم الروابط المرجعية (reflinks) أصلاً (btrfs أو xfs) منها في نظم الملفات التقليدية التي لا تدعمها (ext4).

Credentials=, --credential=
    اضبط بيانات الاستيثاق التي سيتم تمريرها إلى systemd-nspawn أو الآلة الافتراضية على التوالي عند استخدام mkosi shell/boot أو mkosi vm. يأخذ هذا الخيار قائمة قيم مفصولة بمسافات يمكن أن تكون إما أزواج مفتاح=قيمة أو مسارات. إذا وُفر مسار، وكان ملفًا، فسيكون اسم بيانات الاستيثاق هو اسم الملف. إذا كان الملف قابلاً للتنفيذ، فستكون قيمة بيانات الاستيثاق هي ناتج تنفيذ الملف. بخلاف ذلك، ستكون قيمة بيانات الاستيثاق هي محتويات الملف. إذا كان المسار دليلاً، يُطبق نفس المنطق على كل ملف في الدليل.

    لاحظ أن القيم ستُعامل كمسارات فقط إذا لم تكن تحتوي على الفاصل (=).

KernelCommandLineExtra=, --kernel-command-line-extra=
    اضبط مدخلات سطر أوامر نواة إضافية تُلحق بسطر أوامر النواة في وقت التشغيل عند إقلاع الصورة. عند الإقلاع في حاوية، تُمرر كمعاملات إضافية إلى systemd. عند الإقلاع في آلة افتراضية، تُلحق بسطر أوامر النواة عبر سلسلة SMBIOS OEM المسماة io.systemd.stub.kernel-cmdline-extra. لن تُلتقط هذه إلا بواسطة إصدارات systemd-boot وsystemd-stub الأحدث من أو المساوية لـ v254.

RuntimeTrees=, --runtime-tree=
    يأخذ زوجًا من المسارات مفصولاً بنقطتين. يشير المسار الأول إلى دليل لوصله في أي آلة (حاوية أو آلة افتراضية) يبدأها mkosi. يشير المسار الثاني إلى الدليل المستهدف داخل الآلة. إذا لم يُوفر المسار الثاني، يُوصل الدليل في /root/src في الآلة. إذا كان المسار الثاني نسبيًا، فسيُفسر بالنسبة إلى /root/src في الآلة.

    لكل دليل موصول، تُطابق معرفات المستخدم (uid) والمجموعة (gid) للمستخدم الذي يشغل mkosi مع مستخدم الجذر (root) في الآلة. هذا يعني أن جميع الملفات والأدلة ستظهر كما لو كانت مملوكة للجذر في الآلة، وجميع الملفات والأدلة الجديدة التي ينشئها الجذر في الآلة في هذه الأدلة سيمتلكها المستخدم الذي يشغل mkosi على المضيف.

    لاحظ أنه عند استخدام mkosi vm مع هذه الميزة، يجب تثبيت إصدارة systemd v254 أو أحدث في الصورة.

RuntimeSize=, --runtime-size=
    إذا حُدد، ستُكبر صور القرص إلى الحجم المحدد عند إقلاعها باستخدام mkosi boot أو mkosi vm. يأخذ الحجم بالبايت. بالإضافة إلى ذلك، يمكن استخدام اللواحق K وM وG لتحديد الحجم بالكيلوبايت والميجابايت والجيجابايت على التوالي.

RuntimeNetwork=، --runtime-network=
    تقبل إحدى القيم user، أو interface أو none. القيمة المبدئية هي user. تحدد إعدادات الشبكة التي تُضبط عند إقلاع الصورة. تضبط القيمة user شبكة بوضع المستخدم. أما القيمة interface فتضبط اتصال شبكة افتراضي بين المضيف والصورة. يترجم هذا إلى واجهة veth للأمرين mkosi shell و mkosi boot، وواجهة tap للأمرين mkosi vm و mkosi vmspawn.

    لاحظ أنه عند استخدام interface، فإن mkosi لا يضبط واجهة المضيف آلياً. ويُتوقع وجود نسخة حديثة من systemd-networkd تعمل على المضيف لتضبط واجهة المضيف للرابط آلياً.

RuntimeBuildSources=، --runtime-build-sources=
    تُوصَل مصادر البناء المضبوطة عبر BuildSources= ودليل البناء (إن وُجد) في المواقع نفسها داخل /work التي وُصلت فيها عند تشغيل نص البناء البرمجي أثناء استخدام mkosi boot أو mkosi vm.

BindUser=، --bind-user=
    ربط دليل المنزل للمستخدم الحالي داخل الحاوية أو الآلة الافتراضية. تقبل قيمة منطقية. معطلة مبدئياً.

UnitProperties=، --unit-property=
    اضبط خصائص وحدة systemd لإضافتها إلى نطاقات systemd المخصصة عند استخدام mkosi boot أو mkosi vm. تُمرر هذه الخصائص مباشرة إلى خيارات --property= الخاصة بكل من systemd-nspawn و systemd-run على التوالي.

SshKey=، --ssh-key=
    مسار مفتاح X.509 الخاص بتنسيق PEM للاستخدام عند الاتصال بآلة افتراضية شُغلت باستخدام mkosi vm وبُنيت مع تفعيل خيار Ssh= (أو مع تثبيت systemd-ssh-generator) عبر أمر mkosi ssh. إذا لم يُضبط ووجد الملف mkosi.key في دليل العمل، فسيُستخدم آلياً لهذا الغرض. شغل mkosi genkey لتوليد مفتاح آلياً في mkosi.key.

SshCertificate=, --ssh-certificate=
    مسار شهادة X.509 بتنسيق PEM لتوفيرها بصفتها مفتاح SSH عام في الآلات الافتراضية المبدؤة بـ mkosi vm. إذا لم تُضبط ووُجد الملف mkosi.crt في دليل العمل، فسيُستخدم آليًا لهذا الغرض. شغّل mkosi genkey لتوليد شهادة آليًا في mkosi.crt.

Machine=, --machine=
    حدد اسم الآلة لاستخدامه عند إقلاع الصورة. يمكن استخدامه أيضًا للإشارة إلى صورة محددة عند الدخول عبر SSH إلى صورة (مثل: mkosi --image=myimage ssh).

    لاحظ أنه يجب تفعيل Ephemeral= لبدء جلسات متعددة من نفس الصورة.

Register=, --register=
    يأخذ قيمة منطقية أو auto. يحدد ما إذا كان يجب تسجيل الآلة الافتراضية/الحاوية مع systemd-machined. إذا فُعّل، سيفشل mkosi إذا تعذر تسجيل الآلة الافتراضية/الحاوية مع systemd-machined. إذا عُطّل، لن يسجل mkosi الآلة الافتراضية/الحاوية. إذا ضُبط إلى auto، سيسجل mkosi الآلة الافتراضية/الحاوية مع systemd-machined إذا كان متاحًا. القيمة المبدئية هي auto.

ForwardJournal=, --forward-journal=
    حدد المسار الذي يجب توجيه سجلات اليومية (journal) من الحاويات والآلات الافتراضية إليه. إذا كان للمسار الامتداد .journal، فسيُفسر على أنه ملف يجب كتابة اليومية فيه. خلاف ذلك، يُفسر المسار على أنه دليل يجب كتابة اليومية فيه.

    لاحظ أن الإصدار v256 من systemd أو أحدث مطلوب في الآلة الافتراضية ليعمل توجيه السجلات.

    لاحظ أنه إذا أُعطي مسار بامتداد .journal، فإن حجم اليومية سيكون محدودًا بـ 4G. اضبط دليل مخرجات بدلاً من ملف إذا كان عبء العمل ينتج أكثر من 4G من بيانات اليومية.

StorageTargetMode=, --storage-target-mode=
    يحدد ما إذا كان فعل serve سيشغل systemd-storagetm لخدمة صور الأقراص عبر NVME-TCP. يأخذ قيمة منطقية أو auto. إذا فُعّل، سيُشغل systemd-storagetm دائمًا وسيفشل mkosi إذا تعذر تشغيله. إذا عُطّل، لن يُشغل systemd-storagetm أبدًا. إذا ضُبط إلى auto، سيُشغل systemd-storagetm إذا كانت صورة القرص قيد البناء، ووُجدت ثنائية systemd-storagetm واستُدعي mkosi serve بصفة المستخدم الجذر.

SysupdateDirectory=، --sysupdate-directory=
    مسار لدليل يحتوي على ملفات تعريف النقل لـ systemd-sysupdate التي تُستخدم بواسطة mkosi sysupdate. إذا وجد الدليل mkosi.sysupdate/ في الدليل المحلي، فسيُستخدم لهذا الغرض أيضاً.

    لاحظ أن mkosi sysupdate يستدعي systemd-sysupdate مع ضبط --transfer-source= على دليل مخرجات mkosi. للاستفادة من هذا في ملف تعريف نقل، اضبط PathRelativeTo=explicit ليُفسر إعداد Path= لمصدر النقل بالنسبة لدليل مخرجات mkosi. عموماً، يكفي ضبط PathRelativeTo=explicit و Path=/ لمصدر النقل ليُفسر نمط المطابقة بالنسبة لدليل مخرجات mkosi.

  قسم [Match]

Profiles=
    يطابق التشكيلات المضبوطة.

Distribution=
    يطابق التوزيعة المضبوطة.

Release=
    يطابق إصدارة التوزيعة المضبوطة. إذا استُخدم هذا الشرط ولم تُضبط أي توزيعة صراحة بعد، فتُستخدم توزيعة المضيف وإصدارته.

Architecture=
    يطابق المعمارية المضبوطة. إذا استُخدم هذا الشرط ولم تُضبط أي معمارية صراحة بعد، فتُستخدم معمارية المضيف. يمكن استخدام Architecture=uefi لمطابقة أي معمارية تدعم UEFI.

Repositories=
    يطابق المستودعات المفعّلة باستخدام إعداد Repositories=. يقبل اسم مستودع واحد.

PathExists=
    يتحقق هذا الشرط إذا كان المسار المعطى موجوداً. تُفسر المسارات النسبية نسبةً إلى الدليل الأب لملف الضبط الذي قُرئ منه الشرط.

ImageId=
    يطابق معرف الصورة المضبوط، ويدعم أنماط المطابقة (globs). إذا استُخدم هذا الشرط ولم يُضبط معرف الصورة صراحة بعد، فسيفشل هذا الشرط.

ImageVersion=
    يطابق نسخة الصورة المضبوطة. يمكن أن تُسبق نسخ الصور بالعوامل ==، أو !=، أو >=، أو <=، أو <، أو > لإجراء مقارنات نسخ ثرية وفقاً لمواصفات تنسيق النسخ لمجموعة UAPI. إذا لم يُسبق بأي عامل، فيُفترض عامل التساوي مبدئياً. إذا استُخدم هذا الشرط ولم تُضبط نسخة الصورة صراحة بعد، فسيفشل هذا الشرط.

Bootable=
    يطابق القيمة المضبوطة لميزة Bootable=. يقبل قيمة منطقية أو auto.

Format=
    يطابق القيمة المضبوطة لخيار Format=. يقبل تنسيق مخرجات (راجع خيار Format=).

SystemdVersion=
    يطابق نسخة systemd على المضيف (كما يوردها الأمر systemctl --version). يمكن أن تُسبق القيم بالعوامل ==، أو !=، أو >=، أو <=، أو <، أو > لإجراء مقارنات نسخ ثرية وفقاً لمواصفات تنسيق النسخ لمجموعة UAPI. إذا لم يُسبق بأي عامل، فيُفترض عامل التساوي مبدئياً.

BuildSources=
    يقبل مساراً لوجهة مصدر البناء (راجع BuildSources=). يتحقق هذا التطابق إذا كان أي من مصادر البناء المضبوطة يستخدم مسار الوجهة هذا. على سبيل المثال، إذا كان لدينا ملف mkosi.conf يحتوي على:

            [Build]
            BuildSources=../abc/qed:kernel

    وملف تكميلي (drop-in) يحتوي على:

            [Match]
            BuildSources=kernel

    سيُضمن الملف التكميلي.

    تُفسر أي مسارات مطلقة تُمرر لهذا الإعداد نسبةً إلى دليل العمل الحالي.

HostArchitecture=
    يطابق المعمارية الأصلية للمضيف. راجع إعداد Architecture= للاطلاع على قائمة بالقيم الممكنة.

ToolsTreeDistribution=
    يطابق توزيعة شجرة الأدوات المضبوطة.

ToolsTreeRelease=
    يطابق إصدارة شجرة الأدوات المضبوطة.

Environment=
    يطابق زوج مفتاح/قيمة معيناً مضبوطاً عبر Environment=. إذا لم تُوفر قيمة، فسيُتحقق مما إذا كان المفتاح المعطى موجوداً في البيئة بغض النظر عن قيمته.

Image=
    يطابق اسم الصورة (الفرعية) الحالية. اسم الصورة الفرعية هو اسمها في mkosi.images/ (بدون لاحقة .conf). اسم الصورة من المستوى الأعلى هو main. حالة الاستخدام الرئيسة هي السماح بوجود إعدادات مشتركة يمكن تضمينها في كل من الصورة الرئيسة والصور الفرعية عبر حصر الإعدادات العامة خلف مطابقة Image=main.

يوضح هذا الجدول أي أدوات المطابقة تدعم أنماط المطابقة (globs)، والمقارنات الثرية، والقيمة المبدئية التي يُطابق معها إذا لم يُضبط أي قيمة وقت قراءة ملف الضبط:

أداة المطابقة | أنماط المطابقة (Globs) | المقارنات الثرية | المبدئي
Profiles= | لا | لا | تفشل المطابقة
Distribution= | لا | لا | يطابق توزيعة المضيف
Release= | لا | لا | يطابق إصدارة المضيف
Architecture= | لا | لا | يطابق معمارية المضيف
PathExists= | لا | لا | غير متاح
ImageId= | نعم | لا | تفشل المطابقة
ImageVersion= | لا | نعم | تفشل المطابقة
Bootable= | لا | لا | يطابق الميزة الآلية
Format= | لا | لا | يطابق التنسيق المبدئي
SystemdVersion= | لا | نعم | غير متاح
BuildSources= | لا | لا | تفشل المطابقة
HostArchitecture= | لا | لا | غير متاح
ToolsTreeDistribution= | لا | لا | يطابق توزيعة شجرة أدوات الاحتياط (راجع ToolsTreeDistribution= في [Build])
ToolsTreeRelease= | لا | لا | يطابق إصدارة شجرة الأدوات المبدئية
Environment= | لا | لا | غير متاح
Image= | لا | لا | غير متاح

  [Include]

Include=، --include=، -I
    تضمين إعدادات إضافية من الملف أو الدليل المعطى. تُضمن الإعدادات الإضافية مباشرة بعد تحليل الإعداد، إلا عند استخدامها في سطر الأوامر، ففي تلك الحالة تُضمن الإعدادات الإضافية بعد تحليل جميع وسائط سطر الأوامر.

    لاحظ أن كل مسار يحتوي على إعدادات إضافية يُحلل مرة واحدة فقط، حتى لو ضُمّن أكثر من مرة عبر Include=.

    يمكن تضمين الإعدادات المدمجة لـ initrd المبدئي الخاص بـ mkosi، وشجرة الأدوات المبدئية، وصورة الآلة الافتراضية المبدئية، وملحق UKI المبدئي عبر تضمين القيمة الحرفية mkosi-initrd، أو mkosi-tools، أو mkosi-vm، أو mkosi-addon على التوالي.

    ملاحظة: أسماء التضمين التي تبدأ بالقيمتين الحرفيتين mkosi- أو contrib- محجوزة لاستخدام mkosi نفسه.

  قسم [Config]

Profiles=، --profile=
    اختر التشكيلات المعطاة. التشكيلة هي ملف ضبط أو دليل في الدليل mkosi.profiles/. تُضمن ملفات الضبط وأدلة كل تشكيلة بعد تحليل الضبط التكميلي في mkosi.conf.d/*.conf.

Dependencies=، --dependency=
    الصور التي تعتمد عليها هذه الصورة، وتُحدد كقائمة مفصولة بفاصلة. جميع الصور المضبوطة في هذا الخيار ستُبنى قبل هذه الصورة.

    عند تحديد هذا الإعداد للصورة “الرئيسة”، فإنه يحدد الصور الفرعية التي ينبغي بناؤها. راجع قسم BUILDING MULTIPLE IMAGES لمزيد من المعلومات.

MinimumVersion=، --minimum-version=
    أدنى إصدارة من mkosi مطلوبة لبناء هذا الضبط. إذا حُددت عدة مرات، تُستخدم أعلى إصدارة محددة.

    يمكن أيضاً تحديد أدنى إصدارة كبصمة إيداع git (hash) عندما تُسبق بـ commit:، وفي هذه الحالة يجب تشغيل mkosi من مستودع git مستخرج، ويجب أن تكون بصمة إيداع git المحددة سلفاً للإيداع الحالي المستخرج في المستودع الذي يُشغل mkosi منه.

ConfigureScripts=، --configure-script=
    يقبل قائمة مفصولة بفاصلة من المسارات للملفات التنفيذية التي تُستخدم كنصوص ضبط برمجية لهذه الصورة. راجع قسم SCRIPTS لمزيد من المعلومات.

PassEnvironment=، --pass-environment=
    يقبل قائمة بأسماء متغيرات البيئة مفصولة بمسافات. عند بناء صور متعددة، تُمرر متغيرات البيئة المدرجة إلى كل صورة فرعية على حدة كما لو كانت إعدادات “عامة”. راجع قسم BUILDING MULTIPLE IMAGES لمزيد من المعلومات.

  قسم [UKIProfile]
يمكن استخدام قسم UKIProfile في ملفات ضبط تشكيلة UKI التي تُمرر لإعداد UnifiedKernelImageProfiles=. يمكن تحديد الإعدادات التالية في قسم UKIProfile:

Profile=
    محتويات قسم .profile لتشكيلة UKI. يقبل قائمة من أزواج المفاتيح والقيم مفصولة بـ =. يجب تحديد المفتاح ID=. راجع مواصفات UKI في https://uapi-group.org/specifications/specs/unified_kernel_image/#multi-profile-ukis للحصول على قائمة كاملة بالمفاتيح الممكنة.

Cmdline=
    خيارات سطر أوامر النواة الإضافية لتشكيلة UKI. يقبل قائمة من وسائط سطر أوامر النواة الإضافية مفصولة بمسافات. لاحظ أن قسم .cmdline النهائي سيكون عبارة عن دمج بين قسم .cmdline الأساسي ووسائط سطر أوامر النواة الإضافية المحددة بهذا الإعداد.

SignExpectedPcr=
    توقيع قياسات PCR المتوقعة لتشكيلة UKI هذه. يقبل قيمة منطقية. مفعّل مبدئياً.

  المحددات
يمكن الوصول إلى القيمة الحالية لمختلف الإعدادات عند تحليل ملفات الضبط باستخدام المحددات. لكتابة حرف % حرفياً في ملف الضبط دون معاملته كمحدد، استخدم %%. المحددات التالية مفهومة:

الإعداد | المحدد
Distribution= | %d
Release= | %r
Architecture= | %a
Format= | %t
Output= | %o
OutputDirectory= | %O
ImageId= | %i
ImageVersion= | %v

توجد أيضاً محددات مستقلة عن الإعدادات:

المحدد | القيمة
%C | الدليل الأب لملف الضبط الحالي
%P | دليل العمل الحالي
%D | الدليل الذي استُدعي فيه mkosi
%I | اسم الصورة الفرعية الحالية في mkosi.images

أخيراً، هناك محددات مشتقة من أحد الإعدادات:

المحدد | القيمة
%F | نظام الملفات المبدئي للتوزيعة المضبوطة

لاحظ أن دليل العمل الحالي يتغير بينما يحلل mkosi إعداداته. تحديداً، في كل مرة يحلل فيها mkosi دليلاً يحتوي على ملف mkosi.conf، فإنه يغير دليل عمله إلى ذلك الدليل.

لاحظ أن الدليل الذي استُدعي فيه mkosi يتأثر بوسيط سطر الأوامر --directory=.

يوضح الجدول التالي أمثلة لقيم محددات الأدلة المدرجة أعلاه:

 | $D/mkosi.conf | $D/mkosi.conf.d/abc/abc.conf | $D/mkosi.conf.d/abc/mkosi.conf
%C | $D | $D/mkosi.conf.d | $D/mkosi.conf.d/abc
%P | $D | $D | $D/mkosi.conf.d/abc
%D | $D | $D | $D

  التوزيعات المدعومة
يمكن إنشاء صور تحتوي على تثبيتات للتوزيعات التالية:

•   فيدورا لينكس

•   دبيان

•   كالي لينكس

•   أوبونتو

•   آرتش لينكس

•   أوبن سوزي

•   ماجيا

•   سنت أو إس

•   RHEL

•   RHEL UBI

•   OpenMandriva

•   Rocky Linux

•   Alma Linux

•   Azure Linux

•   postmarketOS

•   بلا (يتطلب من المستخدم توفير نظام ملفات جذر (rootfs) مبني مسبقًا)

نظريًا، يمكن استخدام أي توزيعة على المضيف لبناء صور تحتوي على أي توزيعة أخرى، طالما أن الأدوات اللازمة متوفرة. تحديدًا، يمكن استخدام أي توزيعة تحزم apt لبناء صور Debian أو Kali أو Ubuntu. ويمكن استخدام أي توزيعة تحزم dnf لبناء صور لأي من التوزيعات المعتمدة على RPM. ويمكن لأي توزيعة تحزم pacman أن تُستخدم لبناء صور Arch Linux. وأي توزيعة تحزم zypper يمكن استخدامها لبناء صور openSUSE. أما التوزيعات الأخرى وأدوات أتمتة البناء للأنظمة المضمنة مثل Buildroot و OpenEmbedded و Yocto Project، فيمكن استخدامها عبر اختيار التوزيعة custom، وملء نظام ملفات الجذر عبر مزيج من أشجار الأساس، وأشجار الهيكل (skeleton trees)، وسكربتات التحضير.

حاليًا، تحزم Fedora Linux جميع الأدوات ذات الصلة بدءًا من إصدارة Fedora 28.

لاحظ أنه عند عدم استخدام مرآة مخصصة، لا يمكن بناء صور RHEL إلا من نظام مضيف يمتلك اشتراك RHEL (يُنشأ باستخدام subscription-manager على سبيل المثال).

تدفق التنفيذ
تدفق التنفيذ لـ mkosi build. تظهر القيم/الاستدعاءات المبدئية بين قوسين. عند البناء باستخدام --incremental=yes، يُنشئ mkosi خبيئة لتثبيت التوزيعة إذا لم تكن موجودة بالفعل، ويستبدل تثبيت التوزيعة في التشغيلات المتتالية ببيانات من تلك المخبوءة.

1.  حلل خيارات واجهة سطر الأوامر

2.  حلل ملفات الضبط

3.  شغّل سكربتات الضبط (mkosi.configure)

4.  إذا لم نكن نعمل كجذر (root)، فافصل مساحة أسماء المستخدم وارسم نطاق subuid المضبوط في /etc/subuid و /etc/subgid داخلها.

5.  افصل مساحة أسماء الوصل

6.  أعد وصل المجلدات التالية للقراءة فقط إذا كانت موجودة:

    •   /usr

    •   /etc

    •   /opt

    •   /srv

    •   /boot

    •   /efi

    •   /media

    •   /mnt

ثم، لكل صورة، ننفذ الخطوات التالية:

1.  انسخ أشجار المعزل (sandbox) إلى مساحة العمل

2.  زامن البيانات الوصفية لمستودع مدير الحزم

3.  شغّل سكربتات المزامنة (mkosi.sync)

4.  انسخ أشجار الأساس (--base-tree=) إلى الصورة

5.  أعد استخدام صورة مخبوءة إذا توفرت

6.  انسخ لقطة من البيانات الوصفية لمستودع مدير الحزم إلى الصورة

7.  انسخ أشجار الهيكل (mkosi.skeleton) إلى الصورة

8.  ثبّت التوزيعة والحزم داخل الصورة

9.  شغّل سكربتات التحضير على الصورة مع المعطى final (mkosi.prepare)

10. ثبّت حزم البناء في الطبقة الفوقية (overlay) إذا ضُبطت أي سكربتات بناء

11. شغّل سكربتات التحضير على الطبقة الفوقية مع المعطى build إذا ضُبطت أي سكربتات بناء (mkosi.prepare)

12. اخزن الصورة في الخبيئة إذا ضُبط ذلك (--incremental=yes)

13. شغّل سكربتات البناء على الصورة + الطبقة الفوقية إذا ضُبطت أي سكربتات بناء (mkosi.build)

14. أنهِ البناء إذا ضُبطت صيغة المخرجات على none

15. انسخ مخرجات سكربتات البناء إلى داخل الصورة

16. انسخ الأشجار الإضافية إلى داخل الصورة (mkosi.extra)

17. شغّل سكربتات ما بعد التثبيت (mkosi.postinst)

18. اكتب ملفات الضبط المطلوبة لكل من Ssh= و Autologin= و MakeInitrd=

19. ثبّت systemd-boot واضبط الإقلاع الآمن إذا ضُبط ذلك (--secure-boot=yes)

20. شغّل systemd-sysusers

21. شغّل systemd-tmpfiles

22. شغّل systemctl preset-all

23. شغّل depmod

24. شغّل systemd-firstboot

25. شغّل systemd-hwdb

26. أزل الحزم والملفات (RemovePackages=، RemoveFiles=)

27. شغّل إعادة وسم SELinux إذا كانت سياسة SELinux مثبتة

28. شغّل سكربتات الإنهاء (mkosi.finalize)

29. ولّد صورة نواة موحدة إذا ضُبط ذلك

30. ولّد صيغة المخرجات النهائية

31. شغّل سكربتات ما بعد المخرجات (mkosi.postoutput)

سكربتات
للسماح بتخصيص الصور الذي لا يمكن تنفيذه باستخدام ميزات mkosi المدمجة، يدعم mkosi تشغيل سكربتات في نقاط مختلفة أثناء عملية بناء الصورة لتخصيصها حسب الحاجة. تُنفذ السكربتات على نظام المضيف كجذر (إما الجذر الحقيقي أو الجذر داخل مساحة أسماء المستخدم التي أنشأها mkosi عند التشغيل بدون امتيازات) مع بيئة مخصصة لتبسيط تعديل الصورة. لكل سكربت، تُوصل مصادر البناء المضبوطة (BuildSources=) داخل مجلد العمل الحالي قبل تشغيل السكربت فيه. يُضبط $SRCDIR ليشير إلى مجلد العمل الحالي. السكربتات التالية مدعومة:

•   إذا وُجد mkosi.configure (ConfigureScripts=)، فيُنفذ قبل بناء الصورة. يمكن استخدام هذا السكربت لتعديل الضبط ديناميكيًا. يتلقى الضبط متسلسلاً بصيغة JSON عبر المدخل القياسي (stdin) ويجب أن يُخرج الضبط المعدل بصيغة JSON عبر المخرج القياسي (stdout). لاحظ أن هذا السكربت يعمل فقط عند بناء أو إقلاع الصورة (أفعال build و vm و boot و shell). إذا ضُبطت شجرة أدوات مبدئية، فستُبنى قبل تشغيل سكربتات الضبط، وستعمل سكربتات الضبط مع توفر شجرة الأدوات. هذا يعني أيضًا أن التعديلات التي تجريها سكربتات الضبط لن تكون مرئية في مخرجات الملخص summary.

•   إذا وُجد mkosi.sync (SyncScripts=)، فيُنفذ قبل بناء الصورة. يمكن استخدام هذا السكربت لتحديث المصادر المختلفة المستخدمة لبناء الصورة. إحدى حالات الاستخدام هي تشغيل git pull على مستودعات المصادر المختلفة قبل بناء الصورة. تحديدًا، لا ينطبق إعداد BuildSourcesEphemeral= على سكربتات المزامنة، مما يعني إمكانية استخدامها لتحديث مصادر البناء حتى لو كان هذا الإعداد مفعلاً.

•   إذا وُجد mkosi.prepare (PrepareScripts=)، فيُستدعى أولاً مع المعطى final فور تثبيت حزم البرمجيات. ثم يُستدعى مرة ثانية مع بارامتر سطر الأوامر build فور تثبيت حزم البناء ووصل طبقة البناء الفوقية أعلى مجلد جذر الصورة. يمتلك هذا السكربت صلاحية الوصول إلى الشبكة ويمكن استخدامه لتثبيت حزم من مصادر أخرى غير مدير حزم التوزيعة (مثل pip، npm، ...)، بعد تثبيت جميع حزم البرمجيات وقبل وضع الصورة في الخبيئة (إذا كان الوضع التزايدي مفعلاً). وعلى عكس التثبيت عام الأغراض، من الآمن تثبيت الحزم على النظام (pip install، npm install -g) بدلاً من $SRCDIR نفسه لأن صورة البناء تُستخدم لمشروع واحد فقط ويمكن التخلص منها وإعادة بنائها بسهولة، فلا خطر من تعارض الاعتماديات ولا خطر من تلويث نظام المضيف.

•   إذا وُجد mkosi.build (BuildScripts=)، فيُنفذ بينما طبقة البناء الفوقية موصولة أعلى مجلد جذر الصورة. عند تشغيل سكربت البناء، يشير $DESTDIR إلى مجلد يجب على السكربت أن يضع فيه أي ملفات مولدة يرغب في أن تنتهي داخل الصورة. لاحظ أن أنظمة البناء المعتمدة على make و automake و meson تحترم عادةً $DESTDIR، مما يجعل بناء أشجار المصدر من سكربت البناء أمرًا طبيعيًا جدًا. بعد تشغيل سكربت البناء، تُنسخ محتويات $DESTDIR إلى الصورة.

•   إذا وُجد mkosi.postinst (PostInstallationScripts=)، فيُنفذ بعد تثبيت شجرة البناء (الاختيارية) والأشجار الإضافية. يمكن استخدام هذا السكربت لتغيير الصور دون أي قيود، بعد تثبيت جميع حزم البرمجيات والمصادر المبنية.

•   إذا وُجد mkosi.finalize (FinalizeScripts=)، فيُنفذ كآخر خطوة في تحضير الصورة.

•   إذا وُجد mkosi.postoutput (PostOutputScripts=)، فيُنفذ فور توليد جميع ملفات المخرجات، وقبل نقلها نهائيًا إلى مجلد المخرجات. يمكن استخدامه لتوليد مخرجات إضافية أو بديلة، مثل SHA256FILES أو بيان SBOM.

•   إذا وُجد mkosi.clean (CleanScripts=)، فيُنفذ فور تنظيف مخرجات عملية بناء سابقة. يمكن لسكربت التنظيف تنظيف أي مخرجات لا يعرفها mkosi (مثل النواتج من SplitArtifacts=partitions أو حزم RPM المبنية في سكربت بناء). لاحظ أن هذا السكربت لا يستخدم شجرة الأدوات حتى لو كانت مضبوطة.

•   إذا وُجد mkosi.version وكان قابلاً للتنفيذ، فيُشغل أثناء تحليل الضبط ويملأ ImageVersion= بالمخرجات الظاهرة على المخرج القياسي. يمكن استخدامه لتتبع الإصدارات خارجيًا، مثلاً عبر git describe أو date '+%Y-%m-%d'. لاحظ أن هذا السكربت يُنفذ على نظام المضيف دون أي عزل (sandboxing).

•   إذا وُجد mkosi.rootpw وكان قابلاً للتنفيذ، فيُشغل أثناء تحليل الضبط ويملأ RootPassword= بالمخرجات الظاهرة على المخرج القياسي. يمكن استخدامه لتوليد كلمة سر عشوائية ويمكن تذكرها عبر إخراجها إلى الخطأ القياسي (stderr) أو عبر قراءة $MKOSI_CONFIG في سكربت آخر (مثلاً mkosi.postoutput). لاحظ أن هذا السكربت يُنفذ على نظام المضيف دون أي عزل.

إذا استخدم السكربت الملحق .chroot، فسيقوم mkosi بتغيير الجذر (chroot) إلى داخل الصورة باستخدام mkosi-chroot (انظر أدناه) قبل تنفيذ السكربت. على سبيل المثال، إذا وُجد mkosi.postinst.chroot، فسيغير mkosi الجذر إلى الصورة وينفذه كسكربت ما بعد التثبيت.

بدلاً من سكربت بملف واحد، سيقرأ mkosi أيضًا جميع الملفات بترتيب معجمي من مجلدات تنتهي بـ .d ذات أسماء مناسبة، فمثلاً تُستخدم جميع الملفات في mkosi.build.d كسكربتات بناء. هذا مدعوم في:

•   mkosi.sync.d،

•   mkosi.prepare.d،

•   mkosi.build.d،

•   mkosi.postinst.d،

•   mkosi.finalize.d،

•   mkosi.postoutput.d، و

•   mkosi.clean.d.

يمكن دمج ذلك مع ملحق .chroot، فمثلاً سيعمل mkosi.build.d/01-foo.sh دون تغيير الجذر إلى داخل الصورة، وسيعمل mkosi.build.d/02-bar.sh.chroot بعد تغيير الجذر إلى داخلها أولاً.

تتلقى السكربتات التي ينفذها mkosi متغيرات البيئة التالية:

•   يحتوي $ARCHITECTURE على المعمارية من إعداد Architecture=. إذا لم يُضبط، فسيحتوي على المعمارية الأصلية لجهاز المضيف. راجع وثائق Architecture= للقيم الممكنة لهذا المتغير.

•   يحتوي $QEMU_ARCHITECTURE على المعمارية من $ARCHITECTURE بالصيغة التي يستخدمها qemu. يفيد ذلك في العثور على ملف qemu الثنائي (qemu-system-$QEMU_ARCHITECTURE).

•   يحتوي $EFI_ARCHITECTURE على المعمارية من $ARCHITECTURE بالصيغة التي يستخدمها UEFI. يكون غير مضبوط في المعماريات التي لا تدعم UEFI.

•   يحتوي $DISTRIBUTION على التوزيعة من إعداد Distribution=.

•   يحتوي $RELEASE على الإصدارة من إعداد Release=.

•   يحتوي $DISTRIBUTION_ARCHITECTURE على المعمارية من $ARCHITECTURE بالصيغة التي تستخدمها التوزيعة المضبوطة.

•   يحتوي $PROFILES على التشكيلات من إعداد Profiles= كسلسلة نصية مفصولة بفاصلات.

•   يُضبط $CACHED على 1 إذا توفرت صورة مخبوءة، وإلا فيُضبط على 0.

•   يحتوي $CHROOT_SCRIPT على المسار إلى السكربت الذي يعمل حاليًا نسبةً إلى مجلد جذر الصورة. حالة الاستخدام الرئيسة لهذا المتغير هي بالاقتران مع سكربت mkosi-chroot. انظر وصف mkosi-chroot أدناه لمزيد من المعلومات.

•   يحتوي $SRCDIR على المسار إلى المجلد الذي استُدعي منه mkosi، مع وصل أي مصادر بناء مضبوطة أعلاه. يحتوي $CHROOT_SRCDIR على القيمة التي سيمتلكها $SRCDIR بعد استدعاء mkosi-chroot.

•   يُعرف $BUILDDIR فقط إذا وُجد mkosi.builddir وكان يشير إلى مجلد البناء المراد استخدامه. يفيد ذلك جميع أنظمة البناء التي تدعم البناء خارج شجرة المصدر لإعادة استخدام النواتج المبنية بالفعل من تشغيلات سابقة. يحتوي $CHROOT_BUILDDIR على القيمة التي سيمتلكها $BUILDDIR بعد استدعاء mkosi-chroot.

•   $DESTDIR هو مجلد يمكن وضع أي برمجيات مثبتة ومولدة بواسطة سكربت بناء فيه. يُضبط هذا المتغير فقط عند تنفيذ سكربت بناء. يحتوي $CHROOT_DESTDIR على القيمة التي سيمتلكها $DESTDIR بعد استدعاء mkosi-chroot.

•   يشير $OUTPUTDIR إلى مجلد التحضير المستخدم لتخزين نواتج البناء المولدة أثناء العملية. يحتوي $CHROOT_OUTPUTDIR على القيمة التي سيمتلكها $OUTPUTDIR بعد استدعاء mkosi-chroot.

•   يشير $PACKAGEDIR إلى المجلد الذي يحتوي على مستودع الحزم المحلي. يمكن لسكربتات البناء إضافة مزيد من الحزم للمستودع المحلي عبر كتابة الحزم في $PACKAGEDIR.

•   يشير $ARTIFACTDIR إلى المجلد المستخدم لتداول نواتج البناء المولدة أثناء العملية وجعلها متاحة لاستخدام mkosi. هذا يشبه PACKAGEDIR، ولكنه مخصص للنواتج التي قد لا تكون حزمًا يفهمها مدير الحزم، مثل ملفات initrd المنشأة بمولدات أخرى غير mkosi. يمكن لسكربتات البناء إضافة مزيد من النواتج إلى المجلد بوضعها في $ARTIFACTDIR. الملفات في هذا المجلد متاحة فقط للبناء الحالي ولا تُنسخ للخارج مثل محتويات $OUTPUTDIR.

    سيستخدم mkosi أيضًا مجلدات فرعية معينة من مجلد النواتج لاستخدام محتوياتها آليًا في خطوات معينة. حاليًا، يُستخدم المجلدان الفرعيان التاليان في مجلد النواتج بواسطة mkosi:

    •   io.mkosi.microcode: تُستخدم جميع الملفات في هذا المجلد كملفات كود دقيق (microcode)، أي أنها تُلحق ببدابة ملفات initrd بترتيب معجمي.

    •   io.mkosi.initrd: تُستخدم جميع الملفات في هذا المجلد كملفات initrd وتُضم معًا بترتيب معجمي.

    يُنصح مستخدمو $ARTIFACTDIR بوضع الأشياء الخاصة بهم في مجلد ذو مساحة أسماء مشابهة، مثلاً local.my.namespace.

•   $BUILDROOT هو المجلد الجذر للصورة التي تُبنى، مع إمكانية وصل طبقة البناء الفوقية أعلاه حسب السكربت الذي يُنفذ.

•   يكون $WITH_DOCS إما 0 أو 1 اعتمادًا على ما إذا كان قد طُلب البناء مع تثبيت الوثائق أو بدونها (WithDocs=yes). يجب على سكربت البناء كبت تثبيت أي وثائق للحزم في $DESTDIR في حال ضُبط $WITH_DOCS على 0.

•   يكون $WITH_TESTS إما 0 أو 1 اعتمادًا على ما إذا كان قد طُلب البناء مع تشغيل طقم الاختبارات أو بدونه (WithTests=no). يجب على سكربت البناء تجنب تشغيل أي اختبارات وحدة أو تكامل في حال ضُبط $WITH_TESTS على 0.

•   يكون $WITH_NETWORK إما 0 أو 1 اعتمادًا على ما إذا كان البناء يُنفذ مع شبكة أو بدونها (WithNetwork=no). يجب على سكربت البناء تجنب أي اتصال بالشبكة في حال ضُبط $WITH_NETWORK على 0.

•   يُعرف $SOURCE_DATE_EPOCH إذا طُلب ذلك (SourceDateEpoch=TIMESTAMP أو Environment=SOURCE_DATE_EPOCH=TIMESTAMP أو متغير بيئة المضيف $SOURCE_DATE_EPOCH). يفيد هذا في جعل عمليات البناء قابلة لإعادة الإنتاج. انظر SOURCE_DATE_EPOCH (https://reproducible-builds.org/specs/source-date-epoch/) لمزيد من المعلومات.

•   $MKOSI_UID و $MKOSI_GID هما على التوالي معرف المستخدم ومعرف المجموعة للمستخدم الذي استدعى mkosi.

•   $MKOSI_CONFIG هو ملف يحتوي على ملخص بصيغة json لإعدادات الصورة الحالية. يمكن تحليل هذا الملف داخل السكربتات للوصول إلى جميع إعدادات الصورة الحالية.

•   يحتوي $IMAGE_ID على المعرف من إعداد ImageId= أو خيار --image-id=.

•   يحتوي $IMAGE_VERSION على الإصدارة من إعداد ImageVersion= أو خيار --image-version=.

•   يكون $MKOSI_DEBUG إما 0 أو 1 اعتمادًا على ما إذا كانت مخرجات التنقيح مفعلة.

راجع هذا الجدول لمعرفة أي السكربتات تتلقى أي متغيرات بيئة:

المتغير | اضبط | مزامنة | تحضير | build | postinst | إنهاء | postoutput | clean
البنية | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
ARTIFACTDIR |  |  | ✓ | ✓ | ✓ | ✓ |  |
BUILDDIR |  |  |  | ✓ | ✓ | ✓ |  |
BUILDROOT |  |  | ✓ | ✓ | ✓ | ✓ |  |
مخبوء |  | ✓ |  |  |  |  |  |
CHROOT_BUILDDIR |  |  |  | ✓ |  |  |  |
CHROOT_DESTDIR |  |  |  | ✓ |  |  |  |
CHROOT_OUTPUTDIR |  |  |  |  | ✓ | ✓ |  |
CHROOT_SCRIPT |  |  | ✓ | ✓ | ✓ | ✓ |  |
CHROOT_SRCDIR |  |  | ✓ | ✓ | ✓ | ✓ |  |
MKOSI_DEBUG | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
DESTDIR |  |  |  | ✓ |  |  |  |
التوزيعة | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
بنية_التوزيعة | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
بنية_EFI | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
معرف_الصورة | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
إصدار_الصورة | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
MKOSI_CONFIG |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
MKOSI_GID | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
MKOSI_UID | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
OUTPUTDIR |  |  |  |  | ✓ | ✓ | ✓ | ✓
PACKAGEDIR |  |  | ✓ | ✓ | ✓ | ✓ |  |
تشكيلات | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |  | ✓
بنية_QEMU | ✓ |  |  |  |  |  |  |
الإصدارة | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
SOURCE_DATE_EPOCH |  |  | ✓ | ✓ | ✓ | ✓ |  | ✓
SRCDIR | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
مع_التوثيقات |  |  | ✓ | ✓ |  |  |  |
مع_الشبكة |  |  | ✓ | ✓ | ✓ | ✓ |  |
مع_الاختبارات |  |  | ✓ | ✓ |  |  |  |

بالإضافة إلى ذلك، عند تنفيذ أي سكايب، تُوفر بضعة سكريبتات عبر $PATH لتبسيط حالات الاستخدام الشائعة.

•   mkosi-chroot: سيقوم هذا السكريبت بتغيير الجذر (chroot) إلى داخل الصورة وتنفيذ الأمر المعطى. وبالإضافة إلى تغيير الجذر، سيقوم أيضاً بوصل (mount) ملفات وأدلة متنوعة ($SRCDIR، و$DESTDIR، و$BUILDDIR، و$OUTPUTDIR، و$CHROOT_SCRIPT) داخل الصورة وتعديل متغيرات البيئة المقابلة لتشير إلى المواقع داخل الصورة. كما سيقوم بوصل أنظمة ملفات APIVFS (/proc، و/dev، و...) للتأكد من أن السكريبتات والأدوات المنفذة داخل بيئة chroot تعمل بشكل سليم. كما ينقل /etc/resolv.conf من المضيف إلى داخل بيئة chroot إذا طُلب ذلك لضمان عمل دقة أسماء النطاقات (DNS). بعد خروج أمر mkosi-chroot، تُنظف نقاط الوصل المختلفة.

    على سبيل المثال، لاستدعاء ls داخل الصورة، استخدم ما يلي:

            mkosi-chroot ls ...

    لتنفيذ السكريبت بالكامل داخل الصورة، أضف اللاحقة .chroot إلى الاسم (mkosi.build.chroot بدلاً من mkosi.build، وما إلى ذلك).

•   بالنسبة لجميع مديري الحزم المدعومين (dnf، وrpm، وapt، وdpkg، وpacman، وzypper)، توضع سكريبتات بنفس الاسم في $PATH تضمن عمل هذه الأوامر على الدليل الجذر للصورة مع الإعدادات التي قدمها المستخدم بدلاً من العمل على نظام المضيف. هذا يعني أنه من داخل سكريبت، يمكنك تنفيذ dnf install vim مثلاً لتثبيت vim داخل الصورة.

    بالإضافة إلى ذلك، ستقوم أوامر mkosi-install، وmkosi-reinstall، وmkosi-upgrade، وmkosi-remove باستدعاء العملية المقابلة لمدير الحزم المستخدم لبناء الصورة.

•   يُستدعى git آلياً مع الخيار safe.directory=* لتجنب أخطاء الأذونات عند التشغيل كالمستخدم الجذر (root) في فضاء أسماء مستخدم.

•   يُستدعى useradd وgroupadd آلياً مع الخيار --root=$BUILDROOT عند التنفيذ خارج الصورة.

عند تنفيذ السكريبتات، تُجعل أي أدلة لا تزال قابلة للكتابة للقراءة فقط (/home، و/var، و/root، و...) وتبقى فقط المجموعة الدنيا من الأدلة التي تحتاج للكتابة قابلة للكتابة. يتم ذلك لضمان عدم عبث السكريبتات بنظام المضيف عندما يعمل mkosi بصلاحيات الجذر.

لاحظ أنه عند تنفيذ السكريبتات، تُجعل جميع أدلة المصدر زائلة، مما يعني أن جميع التغييرات التي أُجريت على أدلة المصدر أثناء تشغيل السكريبتات تُهمل بعد انتهاء تنفيذها. استخدم أدلة المخرجات أو البناء أو الخبيئة إذا كنت بحاجة لاستمرار البيانات بين عمليات البناء.

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

•   يمكن استخدام الدليل mkosi.skeleton/ أو أرشيف mkosi.skeleton.tar لإدراج ملفات داخل الصورة. تُنسخ الملفات قبل تثبيت حزم التوزيعة في الصورة. يسمح هذا بإنشاء الملفات التي يجب توفيرها مبكراً، على سبيل المثال لضبط مدير الحزم أو ضبط مسبقات (presets) نظام systemd.

    عند استخدام الدليل، لا تُحفظ ملكية الملفات: جميع الملفات المنسوخة ستكون مملوكة للمستخدم الجذر. للحفاظ على الملكية، استخدم أرشيف tar.

•   يمكن استخدام الدليل mkosi.extra/ أو أرشيف mkosi.extra.tar لإدراج ملفات إضافية في الصورة، بالإضافة إلى ما تتضمنه التوزيعة في حزمها. وهي تشبه mkosi.skeleton/ وmkosi.skeleton.tar، لكن الملفات تُنسخ إلى شجرة أدلة الصورة بعد تثبيت نظام التشغيل.

    عند استخدام الدليل، لا تُحفظ ملكية الملفات: جميع الملفات المنسوخة ستكون مملوكة للمستخدم الجذر. للحفاظ على الملكية، استخدم أرشيف tar.

•   يمكن استخدام الدليل mkosi.sandbox/ أو أرشيف mkosi.sandbox.tar لضبط مدير الحزم دون إدراج هذه الملفات داخل الصورة. إذا كان يجب تضمين الملفات في الصورة، يجب استخدام mkosi.skeleton/ وmkosi.skeleton.tar بدلاً من ذلك.

    عند استخدام الدليل، لا تُحفظ ملكية الملفات: جميع الملفات المنسوخة ستكون مملوكة للمستخدم الجذر. للحفاظ على الملكية، استخدم أرشيف tar.

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

•   الدليل mkosi.cache/، إذا وُجد، يُستخدم آلياً كخبيئة لتنزيل الحزم، من أجل تسريع عمليات التشغيل المتكررة للأداة.

•   الدليل mkosi.builddir/، إذا وُجد، يُستخدم آلياً كدليل بناء خارج الشجرة (out-of-tree)، إذا كانت أوامر البناء في سكريبتات mkosi.build تدعم ذلك. تحديداً، سيُوصل هذا الدليل داخل حاوية البناء، وسيُضبط متغير البيئة $BUILDDIR ليشير إليه عند استدعاء سكريبتات البناء. يمكن لسكريبت البناء حينها استخدام هذا الدليل كدليل بناء، لعمليات البناء خارج الشجرة بنمط automake أو ninja. يسرع هذا عمليات البناء بشكل ملحوظ، خاصة عند استخدام mkosi في الوضع المتزايد (-i): حيث لا تقتصر إعادة الاستخدام على الصورة وطبقة البناء فحسب، بل تشمل شجرة البناء أيضاً بين الاستدعاءات المتتالية. لاحظ أنه إذا لم يكن هذا الدليل موجوداً، فلن يُضبط متغير البيئة $BUILDDIR، ويُترك لسكريبتات البناء قرار إجراء بناء داخل الشجرة أو خارجها، وأي دليل بناء ستستخدم.

•   يمكن استخدام ملف mkosi.rootpw لتوفير كلمة مرور للمستخدم الجذر (root) في الصورة. إذا سُبقت كلمة المرور بـ hashed: تُعامل ككلمة مرور جذر مجزأة (hashed) بالفعل. يمكن اختيارياً إتباع كلمة المرور بمحرف سطر جديد يُزال ضمناً. يجب أن يكون نمط الوصول للملف 0600 أو أقل. إذا لم يكن هذا الملف موجوداً، تُضبط كلمة مرور الجذر المبدئية للتوزيعة (وهو ما يعني عادةً أن الوصول للمستخدم الجذر محظور).

•   يوفر ملف mkosi.passphrase عبارة المرور لاستخدامها عند اختيار تعمية LUKS. يجب أن يحتوي على عبارة المرور حرفياً، وألا ينتهي بمحرف سطر جديد (أي بنفس التنسيق الذي تتوقعه cryptsetup و/etc/crypttab لملفات عبارة المرور). يجب أن يكون نمط الوصول للملف 0600 أو أقل.

•   يحتوي الملفان mkosi.crt وmkosi.key على شهادة X.509 ومفتاح PEM خاص لاستخدامهما عندما يكون التوقيع مطلوباً (إقلاع UEFI الآمن، verity، ...).

•   يُستخدم الدليل mkosi.output/ لتخزين جميع نواتج البناء.

•   يُستخدم الدليل mkosi.credentials/ كمصدر لبيانات اعتماد إضافية مشابه لخيار Credentials=. لكل ملف في الدليل، سيُستخدم اسم الملف كاسم لبيانات الاعتماد وتصبح محتويات الملف هي قيمة بيانات الاعتماد، أو إذا كان الملف قابلاً للتنفيذ، سيقوم mkosi بتنفيذ الملف ويُستخدم خرج الأمر إلى stdout كقيمة لبيانات الاعتماد. سيُتجاهل الخرج إلى stderr. بيانات الاعتماد التي ضُبطت باستخدام Credentials= لها الأولوية على الملفات الموجودة في mkosi.credentials.

•   يُستخدم الدليل mkosi.repart/ كمصدر لملفات تعريف أقسام systemd-repart التي تُمرر إلى systemd-repart عند بناء صورة قرص. إذا لم يكن موجوداً ولم يُضبط إعداد RepartDirectories=، سيلجأ mkosi مبدئياً إلى ملفات تعريف الأقسام التالية:

    00-esp.conf (إذا كنا نبني صورة قابلة للإقلاع):

            [Partition]
            Type=esp
            Format=vfat
            CopyFiles=/boot:/
            CopyFiles=/efi:/
            SizeMinBytes=512M
            SizeMaxBytes=512M

    05-bios.conf (إذا كنا نبني صورة قابلة للإقلاع بنظام BIOS):

            [Partition]
            # UUID لقسم إقلاع BIOS الخاص بـ grub والذي يحتاجه grub على GPT
            # ليغرس نفسه بداخله.
            Type=21686148-6449-6e6f-744e-656564454649
            SizeMinBytes=1M
            SizeMaxBytes=1M

    10-root.conf

            [Partition]
            Type=root
            Format=<distribution-default-filesystem>
            CopyFiles=/
            Minimize=guess

    لاحظ أنه إذا وُجد mkosi.repart/ أو استُخدم RepartDirectories=، فلن نستخدم أي من تعريفات الأقسام المبدئية.

جميع هذه الملفات اختيارية.

لاحظ أن موقع كل هذه الملفات يمكن ضبطه أيضاً أثناء الاستدعاء عبر مفاتيح سطر الأوامر، وكإعدادات في mkosi.conf، في حال كانت الإعدادات المبدئية غير مقبولة لمشروع ما.

الخزن في الخبيئة
يدعم mkosi ثلاث خبيئات مختلفة لتسريع عمليات إعادة بناء الصور المتكررة. وتحديداً:

1.  يمكن خزن خبيئة الحزم الخاصة بمدير حزم التوزيعة بين عمليات البناء. يُضبط هذا عبر الخيار --cache-directory= أو دليل mkosi.cache/. يعتمد هذا النوع من الخزن على مدير حزم التوزيعة، ويخزن حزم التوزيعة (RPM، وdeb، و...) بعد تنزيلها، ولكن قبل فكها.

2.  إذا فُعل وضع البناء المتزايد عبر --incremental=yes، تُنشأ نسخ مخبوءة من الصورة النهائية وطبقة البناء (build overlay) مباشرةً قبل نسخ مصادر البناء إليها (بالنسبة لطبقة البناء) أو نسخ النواتج المولدة بواسطة mkosi.build (في حالة الصورة النهائية). يسمح هذا النوع من الخزن بتجاوز خطوة فك الحزم التي تستهلك وقتاً طويلاً في مديري حزم التوزيعات، ولكنه فعال فقط إذا بقيت قائمة الحزم المراد استخدامها مستقرة، بينما تتغير مصادر البناء وسكريبتاتها بانتظام. لاحظ أن هذه الخبيئة تتطلب إفراغاً يدوياً: كلما عُدلت قائمة الحزم، يجب إزالة الصور المخبوءة صراحةً قبل إعادة البناء التالية، باستخدام المفتاح -f.

3.  أخيراً، يمكن مشاركة دليل نواتج البناء بين عمليات بناء متعددة، باستخدام دليل mkosi.builddir/. يسمح هذا الدليل لأنظمة البناء مثل Meson بإعادة استخدام المصادر المجمعة مسبقاً من بناء سابق، مما يسرع عملية البناء لسكريبت mkosi.build.

خبيئة الحزم والوضع المتزايد مفيدان دائماً. أما الخبيئة الأخيرة فتنطبق فقط على استخدامات mkosi مع شجرة مصدر وسكريبت بناء. عند تفعيل الثلاثة معاً، تصبح أوقات دورة بناء الصورة الكاملة في حدها الأدنى، حيث يلزم فقط إعادة تجميع ملفات المصدر التي تغيرت.

أشجار الأدوات
أشجار الأدوات هي صورة ثانوية يمكن لـ mkosi استخدامها لبناء الصور الفعلية. وهذا مفيد لجعل عمليات بناء الصور أكثر قابلية لإعادة الإنتاج، كما يسمح باستخدام أدوات أحدث قد لا تكون متوفرة بعد في توزيعة المضيف التي تشغل mkosi.

يمكن توفير أشجار الأدوات عبر خيار ToolsTree=، أو دليل mkosi.tools أو بناؤها آلياً بواسطة mkosi إذا ضُبط على ToolsTree=yes. في معظم حالات الاستخدام، يكفي استخدام أشجار الأدوات المبدئية، ويُنصح باستخدام شجرة أدوات.

يمكن بناء أشجار أدوات مخصصة بالكامل كأي صورة mkosi أخرى، ولكن يوفر mkosi تضميناً مدمجاً يقدم حزم شجرة الأدوات المبدئية:

        mkosi --include=mkosi-tools --format=directory

يمكن تخصيص أشجار الأدوات، بما في ذلك الأشجار المبدئية، بشكل أكبر عبر متغيرات ToolsTree*= المختلفة بالإضافة إلى ملف أو دليل إعدادات mkosi.tools.conf. لا يمكن حالياً تغيير تنسيق المخرجات لأشجار الأدوات عبر ملفات الإعدادات.

يوضح الجدول التالي التوزيعات التي عُرّفت لها حزم أشجار أدوات مبدئية والحزم المضمنة في تلك الأشجار المبدئية:

 | فيدورا | سنت أو إس | ديبايان | كالي | أوبونتو | بنية | أوبن سوزا | بوسط ماركت أو إس
acl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
apt | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |  |
archlinux-keyring | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |  |
attr | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
bash | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
btrfs-progs | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
ca-certificates | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
coreutils | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
cpio | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
createrepo_c | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
curl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
debian-keyring | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |  | ✓
diffutils | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
distribution-gpg-keys | ✓ | ✓ | ✓ | ✓ |  | ✓ | ✓ | ✓
dnf | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
dosfstools | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
e2fsprogs | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
edk2-ovmf | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
erofs-utils | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
findutils | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
git | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
grep | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
grub-tools | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |  |
jq | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
kali-archive-keyring |  |  |  | ✓ |  |  |  |
kmod | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
less | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
mtools | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
نانو | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
opensc | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
openssh | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
openssl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
pkcs11-provider | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
perf | ✓ | ✓ | ✓ | ✓ |  | ✓ | ✓ | ✓
sed | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
pacman | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |  | ✓
p11-kit | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
policycoreutils | ✓ | ✓ | ✓ | ✓ | ✓ |  | ✓ | ✓
qemu | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
sbsigntools | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
socat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
squashfs-tools | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
strace | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
swtpm | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
systemd | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
ukify | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
tar | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
ubuntu-keyring | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |  |
util-linux | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
virtiofsd | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
virt-firmware | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
xfsprogs | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
xz | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
zstd | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
zypper | ✓ |  | ✓ | ✓ | ✓ | ✓ | ✓ |

بناء صور متعددة
إذا وُجد دليل mkosi.images/، فسيقوم mkosi بتحميل إعدادات الصور الفرعية الفردية منه وبناء كل منها. يمكن أن تكون إعدادات الصور إما أدلة تحتوي على ملفات إعداد mkosi أو ملفات عادية بامتداد .conf.

عند العثور على إعدادات الصور في mkosi.images/، سيقوم mkosi ببناء الصور المحددة في إعداد Dependencies= للصورة الرئيسة وكافة تبعاتها (أو جميعها إذا لم تُضبط أي صور صراحةً باستخدام Dependencies= في إعداد الصورة الرئيسة). لإضافة تبعات بين الصور الفرعية، يمكن استخدام إعداد Dependencies= أيضًا. تُبنى الصور الفرعية دومًا قبل الصورة الرئيسة.

عند تعريف الصور، سيقرأ mkosi أولًا إعداد الصورة الرئيسة (الإعداد خارج دليل mkosi.images/)، يليه الإعداد الخاص بالصورة.

تنطبق عدة إعدادات "عالمية شاملة" على شجرة الأدوات المبدئية وعلى الصورة الرئيسة ولا يمكن ضبطها بشكل منفصل خارج الصورة الرئيسة:

•   RepositoryKeyCheck=

•   RepositoryKeyFetch=

•   SourceDateEpoch=

•   CacheOnly=

•   WorkspaceDirectory=

•   PackageCacheDirectory=

•   BuildSources=

•   BuildSourcesEphemeral=

•   ProxyClientCertificate=

•   ProxyClientKey=

•   ProxyExclude=

•   ProxyPeerCertificate=

•   ProxyUrl=

تنطبق عدة إعدادات "شاملة" على الصورة الرئيسة وكافة صورها الفرعية ولا يمكن ضبطها بشكل منفصل في الصور الفرعية. الإعدادات التالية شاملة ولا يمكن ضبطها في الصور الفرعية:

•   Architecture=

•   BuildDirectory=

•   CacheDirectory=

•   Distribution=

•   ExtraSearchPaths=

•   Incremental=

•   LocalMirror=

•   Mirror=

•   OutputDirectory=

•   OutputMode=

•   PackageDirectories=

•   Release=

•   RepartOffline=

•   Repositories=

•   SandboxTrees=

•   ToolsTree=

•   ToolsTreeCertificates=

•   UseSubvolumes=

•   SecureBootCertificate=

•   SecureBootCertificateSource=

•   SecureBootKey=

•   SecureBootKeySource=

•   VerityCertificate=

•   VerityCertificateSource=

•   VerityKey=

•   VerityKeySource=

•   VolatilePackageDirectories=

•   WithNetwork=

•   WithTests

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

•   Profiles=

•   ImageId=

•   ImageVersion=

•   SectorSize=

•   CacheKey=

•   BuildKey=

•   CompressLevel=

•   SignExpectedPcrKey=

•   SignExpectedPcrKeySource=

•   SignExpectedPcrCertificate=

•   SignExpectedPcrCertificateSource=

بالإضافة إلى ذلك، هناك إعدادات متنوعة لا يمكن ضبطها إلا في الصورة الرئيسة ولا تُمرر إلى الصور الفرعية:

•   MinimumVersion=

•   PassEnvironment=

•   ToolsTreeDistribution=

•   ToolsTreeRelease=

•   ToolsTreeProfiles=

•   ToolsTreeMirror=

•   ToolsTreeRepositories=

•   ToolsTreeSandboxTrees=

•   ToolsTreePackages=

•   ToolsTreePackageDirectories=

•   History=

•   كل إعداد في قسم [Runtime]

يمكن للصور أن تشير إلى مخرجات الصور التي تعتمد عليها. تحديدًا، للخيارات التالية، سيتحقق mkosi فقط مما إذا كانت المدخلات موجودة قبيل بناء الصورة مباشرةً:

•   BaseTrees=

•   ExtraTrees=

•   Initrds=

للإشارة إلى مخرجات تبعات الصورة، ما عليك سوى ضبط أي من هذه الخيارات بمسار نسبي للمخرج المراد استخدامه في دليل مخرجات التبعية. أو استخدم محدد %O للإشارة إلى دليل المخرجات.

يمكن العثور على مثال جيد حول كيفية بناء صور متعددة في مستودع systemd على https://github.com/systemd/systemd/tree/main/mkosi/mkosi.images

متغيرات البيئة

•   يتخطى $MKOSI_LESS خيارات less عندما يستدعيه mkosi لتقسيم المخرجات إلى صفحات.

•   يمكن استخدام $MKOSI_DNF لتخطي الملف التنفيذي المستخدم كـ dnf. هذا مفيد بشكل خاص للاختيار بين dnf و dnf5.

•   يمكن استخدام $EPEL_MIRROR لتخطي موقع المرآة المبدئي المستخدم لمستودعات epel عند استخدام Mirror=. يبحث mkosi مبدئيًا عن مستودعات epel في الدليل الفرعي fedora من الدليل الأب للمرآة المحددة في Mirror=. على سبيل المثال، إذا ضُبطت المرآة على https://mirror.net/centos-stream فسيقوم mkosi بالبحث عن مستودعات epel في https://mirror.net/fedora/epel.

•   يمكن استخدام SYSEXT_SCOPE و CONFEXT_SCOPE لتخطي القيمة المبدئية لملف extension-release المقابل عند بناء sysext أو confext. تُضبط القيمة مبدئيًا على initrd system portable.

أمثلة
أنشئ وشغل صورة GPT خام مع ext4، باسم image.raw:

        # mkosi -p systemd -i boot

أنشئ وشغل صورة GPT قابلة للإقلاع، باسم foobar.raw:

        $ mkosi -d fedora -p kernel-core -p systemd -p systemd-boot -p udev -o foobar.raw
        # mkosi --output foobar.raw boot
        $ mkosi --output foobar.raw vm

أنشئ وشغل صورة Fedora Linux في دليل عادي:

        # mkosi --distribution fedora --format directory boot

أنشئ صورة مضغوطة image.raw.xz مع تثبيت SSH وأضف ملف تدقيق مجموع:

        $ mkosi --distribution fedora --format disk --checksum=yes --compress-output=yes --package=openssh-clients

داخل دليل المصدر لمشروع يعتمد على automake، اضبط mkosi بحيث يؤدي استدعاء mkosi ببساطة دون أي معاملات إلى بناء صورة نظام تشغيل تحتوي على نسخة مبنية من المشروع في حالته الحالية:

        $ cat >mkosi.conf <<EOF
        [Distribution]
        Distribution=fedora
        [Output]
        Format=disk
        [Content]
        Packages=kernel,systemd,systemd-udev,openssh-clients,httpd
        BuildPackages=make,gcc,libcurl-devel
        EOF
        $ cat >mkosi.build <<EOF
        #!/bin/sh
        if [ "$container" != "mkosi" ]; then
            exec mkosi-chroot "$CHROOT_SCRIPT" "$@"
        fi
        cd $SRCDIR
        ./autogen.sh
        ./configure --prefix=/usr
        make -j `nproc`
        make install
        EOF
        $ chmod +x mkosi.build
        # mkosi -i boot
        # systemd-nspawn -bi image.raw

  طرق مختلفة للإقلاع باستخدام vm
أسهل طريقة لإقلاع آلة افتراضية هي بناء صورة بالمكونات المطلوبة وترك mkosi يستدعي qemu بجميع الخيارات الصحيحة:

        $ mkosi -d fedora -p systemd-udev,systemd-boot,kernel-core build
        $ mkosi -d fedora vm
        ...
        fedora login: root (تسجيل دخول آلي)
        [root@fedora ~]#

المبدئي هو الإقلاع بكونسول نصي فقط. في هذا النمط، تستخدم الرسائل الواردة من محمل الإقلاع، والنواة، و systemd، ولاحقًا محث تسجيل دخول getty والصدفة جميعها نفس الطرفية. يمكن التبديل بين كونسول qemu والمراقب بالضغط على Ctrl-a c. يمكن استخدام مراقب qemu مثلًا لحقن مفاتيح خاصة أو إيقاف تشغيل الآلة بسرعة. بدلاً من ذلك، يمكن إيقاف تشغيل الآلة باستخدام Ctrl-a x.

للإقلاع بنوافذ رسومية، أضف --console=gui:

        $ mkosi -d fedora --console=gui qemu

يمكن إقلاع النواة مباشرة باستخدام mkosi vm -kernel ... -initrd ... -append '...'. هذا أسرع قليلاً لأنه لا يُستخدم محمل إقلاع، كما أنه أسهل لتجربة نويات وأسطر أوامر نواة مختلفة. لاحظ أنه على الرغم من الاسم، فإن خيار -append الخاص بـ qemu يستبدل سطر أوامر النواة المبدئي المدمج في النواة وأي مواصفات -append سابقة.

يُنسخ UKI أيضًا إلى دليل المخرجات ويمكن إقلاعه مباشرة:

        $ mkosi vm -- -kernel mkosi.output/fedora~38/image.efi

عند الإقلاع باستخدام نواة خارجية، لا نحتاج إلى وجود النواة داخل الصورة، ولكننا سنظل نرغب في تثبيت وحدات النواة.

من الممكن أيضًا إجراء إقلاع نواة مباشر إلى محمل إقلاع، بالاستفادة من حقيقة أن systemd-boot(7) هو ملف UEFI ثنائي صالح:

        $ mkosi vm -- -kernel /usr/lib/systemd/boot/efi/systemd-bootx64.efi

في هذا السيناريو، تُحمل النواة من ESP في الصورة بواسطة systemd-boot.

المتطلبات
تتوفر حزم mkosi لمختلف التوزيعات: Debian، و Kali، و Ubuntu، و Arch Linux، و Fedora Linux، و OpenMandriva، و Gentoo، و postmarketOS. لاحظ أنه قد مضى وقت طويل منذ آخر إصدار والحزم التي تشحنها التوزيعات قديمة جدًا. نوصي حاليا بتشغيل mkosi من git حتى يصدر إصدار جديد.

يتطلب mkosi نواة Linux توفر mount_setattr() التي قُدمت في 5.12.

يتطلب mkosi حاليًا systemd 254 لبناء صور أقراص قابلة للإقلاع.

عند عدم استخدام حزم التوزيعات، تأكد من تثبيت التبعات اللازمة. على سبيل المثال، في Fedora Linux تحتاج إلى:

        # dnf install btrfs-progs apt dosfstools mtools edk2-ovmf e2fsprogs squashfs-tools gnupg python3 tar xfsprogs xz zypper sbsigntools

في Debian/Kali/Ubuntu قد يكون من الضروري تثبيت حزم ubuntu-keyring، و ubuntu-archive-keyring، و kali-archive-keyring و/أو debian-archive-keyring صراحةً، بالإضافة إلى apt، اعتمادًا على نوع صور التوزيعات التي تريد بناءها.

لاحظ أن الحد الأدنى المطلوب من نسخة Python هو 3.9.

يحتاج mkosi إلى قدرات غير مقيدة للإنشاء والعمل داخل فضاءات الأسماء. تقيد بعض التوزيعات إنشاء فضاءات أسماء المستخدمين أو القدرات داخلها، مما يعطل mkosi.

للحصول على معلومات حول Ubuntu، التي تنفذ مثل هذه القيود باستخدام AppArmor، راجع https://ubuntu.com/blog/ubuntu-23-10-restricted-unprivileged-user-namespaces. للأنظمة الأخرى، حاول البحث في sysctls لـ kernel.unprivileged_userns_clone أو user.max.user_namespace.

لأنظمة Ubuntu، يمكنك إزالة القيود المفروضة على mkosi عن طريق تكييف هذه القصاصة لتشير إلى ملف mkosi الثنائي الخاص بك، ونسخها إلى /etc/apparmor.d/resolved.path.to.mkosi، ثم تشغيل systemctl reload apparmor:

        abi <abi/4.0>,
        include <tunables/global>
        /resolved/path/to/mkosi flags=(default_allow) {
          userns,
        }

الأسئلة الشائعة (FAQ)

•   لماذا لا يعمل mkosi vm مع KVM على Debian/Kali/Ubuntu؟

    بينما لا تمانع التوزيعات الأخرى في السماح بالوصول إلى /dev/kvm، فإن هذا مسموح به في Debian/Kali/Ubuntu فقط للمستخدمين في مجموعة kvm. نظرًا لأن mkosi يفصل فضاء أسماء مستخدم عند التشغيل دون امتيازات، فحتى لو كان المستخدم المستدعِي في مجموعة kvm، فعندما يفصل mkosi فضاء أسماء المستخدم للتشغيل دون امتيازات، فإنه يفقد الوصول إلى مجموعة kvm وبحلول الوقت الذي نبدأ فيه qemu لا نملك وصولاً إلى /dev/kvm بعد الآن. كحل بديل، يمكنك تغيير أذونات عُقد الجهاز إلى 0666 وهو ما يكفي لجعل KVM يعمل دون امتيازات. لتثبيت هذه الإعدادات عبر عمليات إعادة التشغيل، انسخ /usr/lib/tmpfiles.d/static-nodes-permissions.conf إلى /etc/tmpfiles.d/static-nodes-permissions.conf وغير نمط /dev/kvm من 0660 إلى 0666.

•   كيف يمكنني إضافة مستخدم عادي إلى صورة؟

    يمكنك استخدام القصاصة التالية في سكربت ما بعد التثبيت:

            useradd --create-home --user-group $USER --password "$(openssl passwd -stdin -6 <$USER_PASSWORD_FILE)"

    لاحظ أنه من الإصدار v256 من systemd فصاعدًا، إذا فُعلت، فستطلب systemd-homed-firstboot.service إنشاء مستخدم عادي عند أول إقلاع إذا لم يكن هناك مستخدمون عاديون.

•   لماذا أرى إخفاقات في chown للملفات عند بناء الصور؟

    عندما لا تعمل كجذر (root)، لا يستطيع مستخدمك تغيير ملكية الملفات إلى ملاك اعتباطيين. لا تزال توزيعات مختلفة تشحن ملفات في حزمها لا يملكها المستخدم الجذر. عندما لا يعمل mkosi كجذر، فإنه يربط المستخدم الحالي بالجذر عند استدعاء مديري الحزم، مما يعني أن تغيير الملكية إلى الجذر سيعمل ولكن تغيير الملكية إلى أي مستخدم أو مجموعة أخرى سيخفق.

    لاحظ أن استدعاءات chown تُكبت فقط عند تشغيل مديري الحزم، وليس عند تشغيل السكربتات. إذا كان هذا مطلوبًا، على سبيل المثال لسكربت بناء، يمكنك ضبط المتغير MKOSI_CHROOT_SUPPRESS_CHOWN على قيمة حقيقية (1، yes، true) لكبت استدعاءات chown في سكربتات mkosi-chroot و .chroot.

    إذا كان هذا السلوك يتسبب في سوء تصرف التطبيقات التي تعمل في صورتك، يمكنك التفكير في تشغيل mkosi كجذر لتجنب هذه المشكلة. بدلاً من ذلك، إذا كان تشغيل mkosi كجذر غير مرغوب فيه، يمكنك استخدام unshare --map-auto --map-current-user --setuid 0 --setgid 0 لتصبح جذرًا في فضاء أسماء مستخدم مع أكثر من مستخدم واحد بافتراض أن خرائط UID/GID في /etc/subuid و /etc/subgid قد ضُبطت بشكل صحيح. لاحظ أن تشغيل mkosi كجذر أو باستخدام unshare يعني أن جميع ملفات المخرجات التي ينتجها mkosi لن يملكها مستخدمك الحالي بعد الآن.

    لاحظ أنه بالنسبة لخدمات systemd التي تحتاج إلى أدلة في /var يملكها مستخدم الخدمة ومجموعتها، فإن البديل لشحن هذه الأدلة في حزم أو إنشائها عبر systemd-tmpfiles هو استخدام StateDirectory= أو CacheDirectory= أو LogsDirectory= في ملف الخدمة مما يوجه systemd لإنشاء الدليل عند بدء تشغيل الخدمة لأول مرة.

    بدلاً من ذلك، يمكن استخدام توجيهات z أو Z لـ systemd-tmpfiles لعمل chown لمختلف الأدلة والملفات لمستخدمها المالك عند إقلاع النظام لأول مرة.

•   لماذا يقول portablectl inspect <image>/systemd-dissect <image> أن خدمتي المحمولة ليست كذلك؟

    يتحقق systemd-dissect و portablectl inspect من PORTABLE_PREFIXES= في os-release وإذا كان المفتاح مفقودًا، فسيخفقان في التعرف على الخدمة المحمولة كواحدة، ويظهران ✗ تحت Use as في حالة systemd-dissect أو n/a تحت Portable Service لـ portablectl.

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

    يمكنك ضبط PORTABLE_PREFIXES= في ملف os-release بنفسك في سكربت ما بعد التثبيت (postinst).

المراجع

•   مستودع mkosi git الرئيس على GitHub https://github.com/systemd/mkosi/

•   mkosi — أداة لإنشاء صور أنظمة التشغيل (https://0pointer.net/blog/mkosi-a-tool-for-generating-os-images.html) تدوينة مقدمة بقلم Lennart Poettering

•   أداة إنشاء أنظمة التشغيل mkosi (https://lwn.net/Articles/726655/) قصة على LWN

انظر أيضًا
systemd-nspawn(1), systemd-repart(8), dnf(8)

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

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

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