SYSUPDATE.D(5)

الاسم
sysupdate.d - ملفات تعريف النقل للتحديثات الآلية

موجز

    /etc/sysupdate.d/*.transfer
    /run/sysupdate.d/*.transfer
    /usr/local/lib/sysupdate.d/*.transfer
    /usr/lib/sysupdate.d/*.transfer

الوصف

تصف هذه الملفات كيفية تحديث موارد معينة على النظام المحلي من مصدر بعيد. يُعرّف كل ملف من هذه الملفات عملية نقل واحدة: عادةً ما يكون مورد HTTP/HTTPS بعيد كمصدر؛ وملف محلي أو دليل أو قسم كهدف. يمكن استخدام هذا كآلية تحديث بسيطة وآلية وذرية لنظام التشغيل نفسه، أو للحاويات، أو الخدمات المحمولة، أو صور امتدادات النظام — ولكن في الواقع يمكن استخدامه لتحديث أي نوع من الملفات من مصدر بعيد.

يقرأ الأمر systemd-sysupdate(8) هذه الملفات ويستخدمها لتحديد الموارد المحلية التي ينبغي تحديثها، ثم يُنفّذ التحديث.

عادةً ما يتواجد كل من مصدر HTTP/HTTPS البعيد والهدف المحلي في إصدارات متعددة ومتزامنة، وذلك لتنفيذ مخططات تحديث مرنة، مثل تحديث A/B (أو مجموعة شاملة منها، مثل A/B/C، A/B/C/D، ...).

يُعرّف كل ملف *.transfer عملية نقل واحدة، أي يصف مورداً واحداً لتحديثه. وعادةً ما تُعرّف ملفات متعددة من هذه الملفات (أي عمليات نقل متعددة كهذه) معاً، وتُربط معاً بواسطة معرف إصدار مشترك من أجل تحديث موارد متعددة دفعة واحدة في كل عملية تحديث، على سبيل المثال لتحديث نواة ونظام ملفات جذر وقسم Verity في عملية واحدة مدمجة ومتزامنة، بحيث لا يشكل سوى التحديث المدمج لجميع الثلاثة معاً تحديثاً كاملاً. سنسمي هذه المجموعة من عمليات النقل هدفاً. ويعمل systemd-sysupdate(8) دائماً على هدف واحد.

يمكن تجميع عمليات النقل معاً في مجموعات يمكن لمدير النظام تمكينها أو تعطيلها بشكل فردي، وتسمى "الميزات الاختيارية": sysupdate.features(5).

يحتوي كل ملف *.transfer على ثلاثة أقسام: [Transfer] و [Source] و [Target].

وضع التشغيل الأساسي

تتكون تحديثات نظام التشغيل المستندة إلى صور الأقراص عادةً من موارد مختلفة متعددة يجب تحديثها معاً، على سبيل المثال قد يتكون تحديث نظام التشغيل الآمن من صورة نظام ملفات جذر لوضعها في قسم، وصورة قسم بيانات سلامة Verity مطابقة، وصورة نواة مجهزة للإقلاع في مزيج من القسمين. الموردان الأولان هما ملفان يُنزّلان ويُوضعان في قسم قرص، والأخير هو ملف يُنزل ويُوضع في ملف عادي في نظام ملفات الإقلاع (مثل قسم نظام EFI). وبالتالي، أثناء تحديث نظام تشغيل افتراضي "foobarOS" إلى إصدار افتراضي 47 ينبغي أن تحدث العمليات التالية:

    1. ينبغي تنزيل ملف "https://download.example.com/foobarOS_47.root.xz" وفك ضغطه وكتابته في قسم غير مستخدم سابقاً مع معرف UUID لنوع قسم GPT هو 4f68bce3-e8cd-4db1-96e7-fbcaf984b709 لمعمارية x86-64، وفقاً لـ مواصفات الأقسام القابلة للاكتشاف UAPI.2[1].

    2. وبالمثل، ينبغي تنزيل ملف "https://download.example.com/foobarOS_47.verity.xz" وفك ضغطه وكتابته في قسم فارغ سابقاً مع معرف UUID لنوع قسم GPT هو 2c7357ed-ebd2-46d9-aec1-23d437ec2bf5 (أي نوع القسم لمعلومات سلامة Verity لأنظمة ملفات الجذر لمعمارية x86-64).

    3. أخيراً، ينبغي تنزيل ملف "https://download.example.com/foobarOS_47.efi" (نواة موحدة، وفقاً لـ مواصفات محمل الإقلاع UAPI.1[2] النوع #2) وفك ضغطه وكتابته في نظام ملفات $BOOT، أي إلى EFI/Linux/foobarOS_47.efi في قسم ESP أو XBOOTLDR.

التعميم المستقل عن الإصدار لهذا سيكون (باستخدام العلامة الخاصة "@v" كرمز بديل لمعرف الإصدار):

    1. نقل ملف "https://download.example.com/foobarOS_@v.root.xz" ← قسم GPT محلي فارغ سابقاً من نوع 4f68bce3-e8cd-4db1-96e7-fbcaf984b709، مع ضبط اللصيقة لتكون "foobarOS_@v".

    2. نقل ملف "https://download.example.com/foobarOS_@v.verity.xz" ← قسم GPT محلي فارغ سابقاً من نوع 2c7357ed-ebd2-46d9-aec1-23d437ec2bf5، مع ضبط اللصيقة لتكون "foobarOS_@v_verity".

    3. نقل ملف "https://download.example.com/foobarOS_@v.efi" ← ملف محلي $BOOT/EFI/Linux/foobarOS_@v.efi.

لا يمكن للتحديث أن يكتمل إلا إذا وفرت عناوين URL ذات الصلة مواردها لنفس الإصدار، أي لنفس قيمة "@v".

يمكن ترجمة ما سبق إلى ثلاثة ملفات *.transfer في sysupdate.d/، واحد لكل مورد يراد نقله. تضبط ملفات *.transfer نوع التنزيل، والمكان الذي تُكتب فيه المادة المنزلة (أي سواء كان ذلك إلى قسم أو ملف في نظام الملفات). والأهم من ذلك، تحتوي هذه الملفات على أنماط عنوان URL واسم القسم واسم الملف الموضحة أعلاه والتي تصف كيفية تسمية هذه الموارد في المصدر وكيفية تسميتها في الهدف.

من أجل سرد الإصدارات المتاحة ومعرفة المرشحين للتحديث إليهم، من الضروري وجود آلية لسرد الملفات المناسبة:

    • بالنسبة للأقسام: يحتوي جدول أقسام GPT المحيط على قائمة بالأقسام المعرفة، بما في ذلك معرف UUID لنوع القسم ولصيقة القسم (يلعب اسم اللصيقة في هذا المخطط دوراً للقسم مشابهاً لاسم الملف بالنسبة للملف العادي).

    • بالنسبة للملفات العادية: يوفر سرد محتويات الدليل الذي يحتوي على الملفات قائمة بالملفات الموجودة بطريقة مباشرة.

    • بالنسبة لمصادر HTTP/HTTPS، يُستخدم مخطط بسيط: يسرد ملف البيان SHA256SUMS، الذي يتبع التنسيق المحدد بواسطة sha256sum(1)، أسماء الملفات وبصمات SHA256 الخاصة بها.

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

انظر أدناه للحصول على مثال موسع وأكثر تحديداً بناءً على ما سبق.

أنواع الموارد

يُعرّف كل ملف نقل مورداً مصدرياً واحداً لنقله إلى مورد مستهدف واحد. أنواع الموارد التالية مدعومة:

    1. تغلف الموارد من نوع "url-file" ملفاً على خادم ويب، ويُشار إليه عبر عنوان URL من نوع HTTP أو HTTPS. عند حدوث تحديث، يُنزل الملف ويُفك ضغطه ثم يُكتب في الملف أو القسم المستهدف. نوع المورد هذا متاح فقط للمصادر، وليس للأهداف. تُرمّز قائمة الإصدارات المتاحة للموارد من هذا النوع في ملفات البيان SHA256SUMS، مصحوبة بتوقيعات منفصلة SHA256SUMS.gpg.

    2. نوع المورد "url-tar" مشابه، ولكن يجب أن يكون الملف أرشيف .tar. عند حدوث تحديث، يُفك ضغط الملف ويُستخرج في دليل أو حجم فرعي btrfs. نوع المورد هذا متاح فقط للمصادر، وليس للأهداف. تماماً مثل "url-file"، يستخدم سرد إصدارات "url-tar" ملفات SHA256SUMS، ويُستوثق منها عبر SHA256SUMS.gpg.

    3. يغلف نوع المورد "regular-file" ملفاً عادياً محلياً على القرص. أثناء التحديثات، يُفك ضغط الملف ويُكتب في الملف أو القسم المستهدف. يتوفر نوع المورد هذا كمصدر وكهدف معاً. عند التحديث، لا يُجرى أي تحقق من السلامة أو الاستيثاق للموارد من هذا النوع.

    4. نوع المورد "partition" مشابه لـ "regular-file"، ويغلف قسم GPT على القرص. عند التحديث، يجب أن يكون القسم موجوداً بالفعل، وبنوع قسم GPT الصحيح. القسم الذي ضُبطت لصيقة قسم GPT الخاصة به على "_empty" يُعتبر فارغاً، ومرشحاً لوضع مورد مُنزل حديثاً فيه. تُستخدم لصيقة قسم GPT لتخزين معلومات الإصدار بمجرد تحديث القسم. نوع المورد هذا متاح فقط للموارد المستهدفة.

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

    6. يغلف نوع المورد "directory" أشجار الأدلة المحلية. هذا النوع متاح لكل من الموارد المصدرية والمستهدفة. إذا حدث تحديث على مورد مصدري من هذا النوع، يُجرى نسخ تكراري للدليل.

    7. نوع المورد "subvolume" مطابِق لـ "directory"، إلا عند استخدامه كهدف، وفي هذه الحالة تُوضع شجرة الملفات في حجم فرعي btrfs بدلاً من دليل عادي، إذا كان نظام الملفات الداعم يدعم ذلك (أي إذا كان btrfs).

كما أُشير بالفعل، فإن مجموعة فرعية فقط من تركيبات أنواع الموارد المصدرية والمستهدفة مدعومة:

الجدول 1. أنواع الموارد
المعرف | الوصف | صالح للاستخدام كمصدر | عند استخدامه كمصدر: الأهداف المتوافقة | عند استخدامه كمصدر: السلامة + الاستيثاق | عند استخدامه كمصدر: فك الضغط | صالح للاستخدام كهدف | عند استخدامه كهدف: المصادر المتوافقة
url-file | ملفات HTTP/HTTPS | نعم | regular-file, partition | نعم | نعم | no | -
url-tar | أرشيفات .tar عبر HTTP/HTTPS | نعم | directory, subvolume | نعم | نعم | no | -
regular-file | ملفات محلية | نعم | regular-file, partition | no | نعم | نعم | url-file, regular-file
partition | أقسام GPT محلية | no | - | - | - | نعم | url-file, regular-file
tar | أرشيفات .tar محلية | نعم | directory, subvolume | no | نعم | no | -
directory | أدلة محلية | نعم | directory, subvolume | no | no | نعم | url-tar, tar, directory, subvolume
subvolume | أحجام فرعية btrfs محلية | نعم | directory, subvolume | no | no | نعم | url-tar, tar, directory, subvolume

تتبع ملفات بيان SHA256SUMS المستخدمة من قبل أنواع الموارد url-file و url-tar تنسيق الملف المعتاد الذي يتم إنشاؤه بواسطة أداة GNU المسماة sha256sum(1). يُوصى باستخدام نمط --binary، حتى وإن لم يكن له تأثير حقيقي على أنظمة لينكس . يجب أن تحتوي القائمة على أحرف ASCII فقط، وأسماء ملفات عادية فقط (أي لا تحتوي على مسارات مطلقة أو نسبية). إذا كانت قائمة SHA256SUMS تحتوي على ملف خاص يحمل الاسم BEST-BEFORE-YYYY-MM-DD (مع ملء السنة والشهر واليوم)، فلن تعتبر قائمة الملفات صالحة بعد التاريخ المحدد، وسيفشل النقل في مثل هذه الحالة . يمكن استخدام هذا لاكتشاف "حداثة" freshness ملف البيان .

أنماط المطابقة

عادةً ما يتواجد كل من المورد المصدري والمستهدف في إصدارات متعددة بالتزامن. تُجرى عملية التحديث كلما كان أحدث الإصدارات المصدرية أحدث من أحدث الإصدارات المستهدفة. لتحديد أحدث إصدار للموارد، يُستخدم سرد الدليل أو سرد الأقسام أو سرد البيان، وتُحدد مجموعة فرعية من المدخلات المؤهلة من ذلك، ويُستخرج معرف الإصدار من أسماء الملفات أو لصائق الأقسام لهذه المدخلات المحددة. يُجرى اختيار المجموعة الفرعية واستخراج معرف الإصدار (بالإضافة إلى البيانات الوصفية الأخرى المحتملة) عبر أنماط المطابقة، المكونة في MatchPattern= في قسمي [Source] و [Target]. هذه الأنماط هي سلاسل نصية تصف كيفية تسمية الملفات أو الأقسام، مع رموز بديلة مسماة لحقول معينة مثل معرف الإصدار. الرموز البديلة التالية معرفة:

الجدول 2. الرموز البديلة لأنماط المطابقة
الرمز البديل | الوصف | Format | ملاحظات
"@v" | معرف الإصدار | سلسلة إصدار صالحة | إلزامي
"@u" | معرف UUID لقسم GPT | سلسلة UUID صالحة بحجم 128 بت | ذو صلة فقط إذا اختير نوع المورد المستهدف كـ partition
"@f" | أعلام قسم GPT | عدد صحيح ست عشري منسق | ذو صلة فقط إذا اختير نوع المورد المستهدف كـ partition
"@a" | علم قسم GPT ‏NoAuto | إما "0" أو "1" | يتحكم في بت NoAuto الخاص بأعلام قسم GPT، وفقًا لـ مواصفة الأقسام القابلة للاكتشاف UAPI.2[1]؛ ولا يكون ذا صلة إلا إذا اختير نوع المورد الهدف ليكون partition
"@g" | علم قسم GPT ‏GrowFileSystem | إما "0" أو "1" | يتحكم في بت GrowFileSystem الخاص بأعلام قسم GPT، وفقًا لـ مواصفة الأقسام القابلة للاكتشاف UAPI.2[1]؛ ولا يكون ذا صلة إلا إذا اختير نوع المورد الهدف ليكون partition
"@r" | علم القراءة فقط | إما "0" أو "1" | يتحكم في بت ReadOnly لأعلام قسم GPT، وفقًا لـ UAPI.2 Discoverable Partitions Specification[1]وأعلام المخرجات الأخرى للقراءة فقط، انظر ReadOnly= أدناه
"@t" | وقت تعديل الملف | عدد صحيح عشري منسق، بالميكرو ثانية منذ حقبة يونكس 1 يناير 1970 | لا يكون ذا صلة إلا إذا اختير نوع المورد الهدف ليكون regular-file
"@m" | وضع الوصول للملف | عدد صحيح ثماني منسق، بأسلوب يونكس | لا يكون ذا صلة إلا إذا اختير نوع المورد الهدف ليكون regular-file
"@s" | حجم الملف بعد فك الضغط | عدد صحيح عشري منسق | مفيد لقياس التقدم ولتحسين منطق تخصيص الأقسام
"@d" | المحاولات المجراة | عدد صحيح عشري منسق | مفيد عند العمل مع ملفات صور النواة، وفقًا لـ تقييم الإقلاع الآلي[3]
"@l" | المحاولات المتبقية | عدد صحيح عشري منسق | مفيد عند العمل مع ملفات صور النواة، وفقًا لـ تقييم الإقلاع الآلي[3]
"@h" | مفرومة SHA256 للملف المضغوط | 64 محرفًا ست عشريًا | مفرومة SHA256 للملف المضغوط؛ وليست مفيدة لـ url-file أو url-tar حيث تُضمن مفرومة SHA256 بالفعل في ملف البيان على أي حال

من بين هذه الأحرف البديلة، يجب فقط وجود "@v" في النمط الصالح، وتعد جميع الأحرف البديلة الأخرى اختيارية. يمكن استخدام كل حرف بديل مرة واحدة على الأكثر في كل نمط. يمكن أن يكون النمط البديل النموذجي الذي يطابق صورة مصدر نظام الملفات هو "MatchPattern=foobar_@v.raw.xz"، أي أي ملف يبدأ اسمه بـ "foobar_"، متبوعًا بمعرف الإصدار وينتهي بـ ".raw.xz".

لا تخلط بين بادئة الحرف البديل لمطابقة الأنماط "@" وبادئة توسيع المحدد "%". حيث تُغلف الأولى جزءًا متغيرًا من سلسلة نمط المطابقة، بينما تعد الأخيرة اختصارات بسيطة تُوسع أثناء تحليل ملفات الإسقاط. لمزيد من التفاصيل حول المحددات، انظر أدناه.

خيارات قسم [TRANSFER]

يحدد هذا القسم الخصائص العامة لعملية النقل هذه.

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

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

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

    يدعم هذا الإعداد توسيع المحددات كحال العديد من الإعدادات في ملفات الضبط هذه. ويفيد خصوصًا ضبط هذا الإعداد على أحد المحددات "%A" أو "%B" أو "%w" للإشارة آليًا إلى إصدار نظام التشغيل الحالي للنظام المشغل. انظر أدناه للتفاصيل حول المحددات المدعومة.

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

Verify=
    يأخذ قيمة منطقية، وتكون القيمة المبدئية نعم. يتحكم فيما إذا كان يجب الاستيثاق تعمويًا من الموارد المنزلة (تحديدًا: التحقق من صحة تواقيع GPG لملفات بيان SHA256SUMS المنزلة، عبر ملفات تواقيعها المنفصلة SHA256SUMS.gpg بالاشتراك مع حلقة مفاتيح النظام ‎/usr/lib/systemd/import-pubring.pgp أو ‎/etc/systemd/import-pubring.pgp).

    يعد هذا الخيار أساسيًا لتوفير ضمانات السلامة للموارد المنزلة ولذا ينبغي تركه مفعلًا، خارج بيئات الاختبار.

    لاحظ أن ملفات الحمولة المنزلة يُفحص صحتها دون شروط مقابل مفرومات SHA256 المدرجة في البيان. يتحكم هذا الخيار فقط في الاستيثاق من تواقيع هذه البيانات.

    لا يكون لهذا الخيار تأثير إلا إذا اختير نوع مورد المصدر ليكون url-file أو url-tar، حيث إن فحص السلامة والاستيثاق متاحان فقط لعمليات النقل من المصادر البعيدة.

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

ChangeLog=
    يأخذ اختياريًا رابط URL يمكن عرضه للبشر لموقع ويب يحتوي على سجل التغييرات للمورد الذي يُحدث.

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

    يدعم هذا الإعداد توسيع المحددات. انظر أدناه للتفاصيل حول المحددات المدعومة. سيوسع هذا الإعداد أيضًا نمط الحرف البديل "@v". انظر أعلاه للتفاصيل.

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

AppStream=
    يأخذ اختياريًا رابط URL لملف XML الخاص بـ كتالوج AppStream[4]. ويمكن استخدام هذا بواسطة مراكز البرمجيات (مثل برمجيات غنوم أو استكشف كيدي) لعرض بيانات وصفية غنية حول الموارد التي تُحدث. ويتضمن ذلك أسماء العرض، وسجلات التغيير، والأيقونات، والمزيد. يجب أن يتضمن الكتالوج المحدد بيانات وصفية خاصة[5] ليرتبط بشكل صحيح بـ systemd-sysupdate(8) بواسطة مراكز البرمجيات.

    يدعم هذا الإعداد توسيع المحددات. انظر أدناه للتفاصيل حول المحددات المدعومة.

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

Features=
    قائمة مفصولة بمسافات لـ sysupdate.features(5) التي ينتمي إليها هذا النقل، حسب الاسم. يمكن تحديد هذا الخيار أكثر من مرة، وفي هذه الحالة تُدمج قائمة الميزات المحددة. إذا عُينت سلسلة فارغة لهذا الخيار، فستُعاد تهيئة القائمة ولن يكون للتعيينات السابقة أي تأثير. على سبيل المثال: "Features=foo bar" يحدد أن النقل ينتمي إلى "foo.feature" و "bar.feature".

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

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

RequisiteFeatures=
    هذا يشبه Features=، باستثناء أن جميع الميزات المدرجة هنا يجب أن تكون مفعلة لكي يُفعل هذا النقل. إذا حُدد كلا الخيارين، فسيُطبقا معًا: سيُفعل النقل فقط إذا كانت جميع الميزات المحددة هنا مفعلة، وميزة واحدة على الأقل مدرجة في Features= مفعلة.

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

خيارات قسم [SOURCE]

يحدد هذا القسم خصائص مصدر النقل.

Type=
    يحدد نوع مورد المصدر لعملية النقل. يأخذ أحد الخيارات التالية: url-file، أو url-tar، أو tar، أو regular-file، أو directory، أو subvolume. لمزيد من التفاصيل حول أنواع الموارد، انظر أعلاه. هذا الخيار إلزامى.

    لاحظ أن تركيبات معينة فقط من أنواع موارد المصدر والهدف هي المدعومة، انظر أعلاه.

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

Path=
    يحدد مكان العثور على إصدارات المصدر لهذا المورد.

    إذا اختير نوع المصدر ليكون url-file أو url-tar فيجب أن يكون هذا رابط HTTP/HTTPS URL. ويُلحق برابط URL اللاحقة ‎/SHA256SUMS للحصول على ملف البيان، وباللاحقة ‎/SHA256SUMS.gpg للحصول على ملف التوقيع المنفصل له، وبأسماء الملفات المدرجة في ملف البيان في حال تنفيذ تحديث وتنزيل المورد.

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

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

MatchPattern=
    يحدد نمطًا واحدًا أو أكثر لمطابقة أسماء الملفات التي تختار مجموعة فرعية من الملفات المرشحة للتحديث كمصدر لعملية النقل هذه. انظر أعلاه للتفاصيل حول أنماط المطابقة.

    هذا الخيار إلزامي. يجب أن يحتوي أي نمط مدرج على الأقل على الحرف البديل "@v"، بحيث يمكن استخراج معرف الإصدار من اسم الملف. وتعد جميع الأحرف البديلة الأخرى اختيارية.

    إذا كان نوع المصدر regular-file أو directory، فقد يحتوي النمط على محارف الشرطة المائلة. وفي هذه الحالة، سيطابق الملف أو الدليل في الدليل الفرعي المقابل. على سبيل المثال "MatchPattern=foo_@v/bar.efi" سيطابق "bar.efi" في الدليل "foo_1".

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

خيارات قسم [TARGET]

يحدد هذا القسم خصائص هدف النقل.

Type=
    يحدد نوع مورد الهدف لعملية النقل. يأخذ أحد الخيارات التالية: partition، أو regular-file، أو directory، أو subvolume. لمزيد من التفاصيل حول أنواع الموارد، انظر أعلاه. هذا الخيار إلزامي.

    لاحظ أن تركيبات معينة فقط من أنواع موارد المصدر والهدف هي المدعومة، انظر أعلاه.

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

Path=
    يحدد مسار نظام ملفات للبحث فيه عن الإصدارات المثبتة بالفعل أو لوضع الإصدارات المنزلة حديثًا من هذا المورد المضبوط. إذا ضُبط Type= على partition، فيتوقع مسارًا لعقدة جهاز كتلي (كامل)، أو السلسلة النصية الخاصة "auto" وفي هذه الحالة يُحدد الجهاز الكتلي الذي يحتوي على نظام الملفات الجذر للنظام المقلع حاليًا آليًا ويُستخدم. وإذا ضُبط Type= على regular-file أو directory أو subvolume، فيجب أن يشير إلى مسار في نظام الملفات المحلي يرمز إلى الدليل للعثور على ملفات أو أدلة الإصدارات أو وضعها تحته.

    لاحظ أنه لا يمكن استخدام هذه الآلية لإنشاء الأقسام أو إزالتها، في حال ضبط Type= على partition. إذ يجب أن تكون الأقسام موجودة بالفعل، وتُستخدم لصيقة قسم خاصة "_empty" للإشارة إلى الأقسام الفارغة. لتوليد أقسام مناسبة آليًا عند الإقلاع الأول، استخدم أداة مثل systemd-repart(8).

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

PathRelativeTo=
    يحدد نقطة الارتكاز التي ينبغي أن يكون Path= نسبيًا إليها. يأخذ أحد الخيارات التالية: root، أو esp، أو xbootldr، أو boot، أو explicit. وإذا لم يُحدد، فإنه يؤول مبدئيًا إلى root.

    إذا ضُبط على root أو esp أو xbootldr، فسيُحل المسار Path= المحدد نسبيًا إلى نقطة وصل القسم المقابل، كما هو معرف في مواصفة محمل الإقلاع UAPI.1[2].

    إذا ضُبط على boot، فسيُحل المسار Path= المحدد نسبيًا إلى نقطة وصل قسم ‎$BOOT (أي ESP أو XBOOTLDR)، كما هو معرف في مواصفة محمل الإقلاع UAPI.1[2].

    إذا ضُبط على explicit، فسيُحل المسار Path= المحدد نسبيًا إلى الدليل المحدد باستخدام --transfer-source= عند استدعاء systemd-sysupdate(8).

    القيم esp و xbootldr و boot مدعومة فقط عندما يكون Type= مضبوطًا على regular-file أو directory.

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

MatchPattern=
    يحدد نمط مطابقة واحد أو أكثر لاسم الملف أو لصاقة القسم التي تنتقي مجموعة فرعية من الملفات أو الأقسام المرشحة للتحديث كأهداف لهذا النقل. انظر أعلاه للحصول على تفاصيل حول أنماط المطابقة.

    هذا الخيار إلزامي. يجب أن يحتوي أي نمط مدرج على الأقل على الحرف البديل "@v"، بحيث يمكن استخراج معرف الإصدار من اسم الملف. وتعد جميع الأحرف البديلة الأخرى اختيارية.

    يُستخدم هذا النمط لمطابقة الإصدارات المثبتة الحالية ولتحديد اسم الإصدارات الجديدة المراد تثبيتها. إذا حُدِّدَتْ أنماط متعددة، فإن النمط الأول المحدد يُستخدم لتسمية الإصدارات المثبتة حديثًا.

    إذا كان نوع الهدف هو regular-file أو directory، فقد يحتوي النمط على محارف المائلة (slash). وفي هذه الحالة، فإنه سيطابق الملف أو الدليل في الدليل الفرعي المقابل. على سبيل المثال "MatchPattern=foo_@v/bar.efi" سيطابق "bar.efi" في الدليل "foo_1". ستُنشَأ الأدلة في المسار عند تثبيت الملف. وتُزال الأدلة الفارغة عند إزالة الملف.

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

MatchPartitionType=
    عند اختيار Type= المستهدف كـ partition، يحدد نوع قسم GPT الذي ينبغي البحث عنه. تُؤخذ الأقسام من هذا النوع فقط في الحسبان، وتُتجاهل جميع الأقسام الأخرى. إذا لم يُحدد، يُستخدم نوع قسم GPT linux-generic. يقبل إما معرف UUID حرفي للنوع أو معرف نوع رمزي. للحصول على قائمة بمعرفات الأنواع المدعومة، انظر إعداد Type= في repart.d(5).

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

PartitionUUID=, PartitionFlags=, PartitionNoAuto=, PartitionGrowFileSystem=
    عند اختيار Type= المستهدف كـ partition، ينتقي معرف UUID للقسم GPT وأعلام القسم لاستخدامها للقسم المحدث. يتوقع سلسلة UUID صالحة، أو عددًا صحيحًا ست عشريًا، أو قيمًا منطقية، على التوالي. إذا لم يُضبط، ولكن نمط مطابقة المصدر يتضمن رموزًا بديلة (wildcards) لهذه الحقول (أي "@u" أو "@f" أو "@a" أو "@g")، تُستخدم القيم من الأنماط. إذا لم يُضبط باستخدام رموز بديلة أو هذه الإعدادات الصريحة، تُترك القيم دون تغيير. إذا استُخدم كل من إعداد الأعلام العام PartitionFlags= وإعدادات الأعلام الفردية PartitionNoAuto= و PartitionGrowFileSystem= (أو الرموز البديلة لها)، فإن الأخيرة تتخطى الأولى، أي أن بت العلم الفردي يتخطى قيمة الأعلام العامة. انظر UAPI.2 Discoverable Partitions Specification[1] للحصول على تفاصيل حول هذه الأعلام.

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

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

ReadOnly=
    يتحكم في ما إذا كان يجب وضع علامة للقراءة فقط على الملف أو الحجم الفرعي أو القسم الناتج. إذا كان نوع الهدف هو partition، فإن هذا يتحكم في علم القسم ReadOnly، وفقًا لـ UAPI.2 Discoverable Partitions Specification[1]، على غرار علمي PartitionNoAuto= و PartitionGrowFileSystem= الموصوفين أعلاه. إذا كان نوع الهدف هو regular-file، يُزال بت القابلية للكتابة من وضع الوصول. إذا كان نوع الهدف هو subvolume، فسيُعلم على الحجم الفرعي كقراءة فقط ككل. وأخيرًا، إذا اختير Type= المستهدف كـ directory، تُضبط سمة الملف "غير القابل للتغيير"، انظر chattr(1) للمزيد من التفاصيل.

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

Mode=
    وضع وصول إلى ملف UNIX لاستخدامه للملفات المنشأة حديثًا في حال اختيار نوع المورد المستهدف كـ regular-file. يتوقع عددًا صحيحًا ثمانيًا، بالطريقة النموذجية لنظام UNIX. إذا لم يُضبط، ولكن نمط مطابقة المصدر يتضمن رمزًا بديلًا لهذا الحقل (أي "@t")، تُستخدم القيمة من النمط.

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

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

TriesDone=, TriesLeft=
    تأخذ هذه الخيارات أعدادًا صحيحة عشرية موجبة، وتتحكم في عدد المحاولات التي جرت والتي تبقت لهذا الملف. هذه الإعدادات مفيدة لإدارة صور النواة، باتباع المخطط المحدد في Automatic Boot Assessment[3]، ولها تأثير فقط إذا تضمن نمط الهدف الرموز البديلة "@d" أو "@l".

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

InstancesMax=
    يأخذ عددًا صحيحًا عشريًا يساوي 2 أو أكبر. يضبط هذا عدد الإصدارات المتزامنة التي يجب الاحتفاظ بها من المورد. كلما بُدِئَ بتحديث جديد يُتأكَّد من عدم وجود أكثر من عدد الإصدارات المحددة هنا ناقص واحد في الهدف. تُحذف أي إصدارات زائدة (في حال استخدام Type= المستهدف كـ regular-file أو directory أو subvolume) أو تُفرّغ (في حال استخدام Type= المستهدف كـ partition؛ ويعني التفريغ في هذه الحالة بساطة ضبط لصاقة القسم على السلسلة الخاصة "_empty"؛ لاحظ أنه لا توجد أقسام تُزال بالفعل). بعد اكتمال التحديث، يكون عدد الإصدارات المتزامنة للموارد المستهدفة مساويًا للعدد المحدد هنا أو أقل منه.

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

    إذا اختير Type= المستهدف كـ partition، فإن عدد الإصدارات المتزامنة المراد الاحتفاظ بها يكون مقيدًا بشكل إضافي بعدد فتحات الأقسام من النوع الصحيح في جدول الأقسام. أي أنه إذا كان هناك فتحتا أقسام فقط لنوع القسم المحدد، فإن ضبط هذه القيمة لتكون أكبر من 2 لن يكون له تأثير، إذ لا يمكن تخزين أكثر من إصدارين متزامنين في الصورة على أي حال.

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

RemoveTemporary=
    يأخذ معاملًا منطقيًا (boolean). إذا فُعِّلَ هذا الخيار (وهو المبدئي) قبل البدء بالتحديث، تُزال جميع التحديثات المتبقية وغير المكتملة من محاولة سابقة من الدليل المستهدف. هذا له تأثير فقط إذا اختير Type= لمورد الهدف كـ regular-file أو directory أو subvolume.

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

CurrentSymlink=
    يأخذ اسم وصلة رمزية كمعامل. إذا استُخدم هذا الخيار، كخطوة أخيرة في التحديث، تُنشَأ/تُحدَّث وصلة رمزية بالاسم المحدد تشير إلى التحديث المكتمل. هذا مفيد لتوفير اسم ثابت يشير دائمًا إلى الإصدار الأحدث من المورد. هذا مدعوم فقط إذا اختير Type= لمورد الهدف كـ regular-file أو directory أو subvolume.

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

المحددات

يجوز استخدام المحددات في إعدادات MinVersion= و ProtectVersion= و Path= و MatchPattern= و CurrentSymlink=. وتُفهم التوسعات التالية:

الجدول 3. المحددات المتاحة
المحدد | المعنى | التفاصيل
"%a" | المعمارية | سلسلة نصية قصيرة تحدد معمارية النظام المحلي. سلسلة مثل x86 أو x86-64 أو arm64. انظر المعماريات المحددة لـ ConditionArchitecture= في systemd.unit(5) للحصول على قائمة كاملة.
"%A" | إصدار صورة نظام التشغيل | معرف إصدار صورة نظام التشغيل للنظام المشغل، كما يُقرأ من حقل IMAGE_VERSION= في /etc/os-release. إذا لم يُضبط، يُحل إلى سلسلة فارغة. انظر os-release(5) لمزيد من المعلومات.
"%b" | معرف الإقلاع | معرف الإقلاع للنظام المشغل، منسق كسلسلة نصية. انظر random(4) لمزيد من المعلومات.
"%B" | معرف بناء نظام التشغيل | معرف بناء نظام التشغيل للنظام المشغل، كما يُقرأ من حقل BUILD_ID= في /etc/os-release. إذا لم يُضبط، يُحل إلى سلسلة فارغة. انظر os-release(5) لمزيد من المعلومات.
"%H" | اسم المضيف | اسم مضيف النظام المشغل.
"%l" | اسم المضيف القصير | اسم مضيف النظام المشغل، مقتطعًا عند النقطة الأولى لإزالة أي مكون نطاق.
"%m" | معرف الآلة | معرف الجهاز للنظام المشغل، منسق كسلسلة نصية. انظر machine-id(5) لمزيد من المعلومات.
"%M" | معرف صورة نظام التشغيل | معرف صورة نظام التشغيل للنظام المشغل، كما يُقرأ من حقل IMAGE_ID= في /etc/os-release. إذا لم يُضبط، يُحل إلى سلسلة فارغة. انظر os-release(5) لمزيد من المعلومات.
"%o" | معرف نظام التشغيل | معرف نظام التشغيل للنظام المشغل، كما يُقرأ من حقل ID= في /etc/os-release. انظر os-release(5) لمزيد من المعلومات.
"%v" | إصدار النواة | مطابق لمخرجات uname -r.
"%w" | معرف إصدار نظام التشغيل | معرف إصدار نظام التشغيل للنظام المشغل، كما يُقرأ من حقل VERSION_ID= في /etc/os-release. إذا لم يُضبط، يُحل إلى سلسلة فارغة. انظر os-release(5) لمزيد من المعلومات.
"%W" | معرف نوع نظام التشغيل | معرف تنويعة نظام التشغيل للنظام المشغل، كما يُقرأ من حقل VARIANT_ID= في /etc/os-release. إذا لم يُضبط، يُحل إلى سلسلة فارغة. انظر os-release(5) لمزيد من المعلومات.
"%T" | مجلد للملفات المؤقتة | هذا إما /tmp أو المسار الذي ضُبطت إليه "$TMPDIR" أو "$TEMP" أو "$TMP". (لاحظ أن الدليل قد يُحدد بدون شرطة مائلة لاحقة.)
"%V" | مجلد للملفات المؤقتة الأكبر حجمًا والمستمرة | هذا إما /var/tmp أو المسار الذي ضُبطت إليه "$TMPDIR" أو "$TEMP" أو "$TMP". (لاحظ أن الدليل قد يُحدد بدون شرطة مائلة لاحقة.)
"%%" | علامة مئوية مفردة | استخدم "%%" بدلاً من "%" لتحديد علامة مئوية مفردة.

لا تخلط بين بادئة توسيع المحدد "%" وبادئة الرمز البديل لمطابقة الأنماط "@". فالأولى عبارة عن اختصارات بسيطة تُوسع أثناء تحليل ملفات الإسقاط (drop-in files)، بينما تلخص الأخيرة جزءًا متغيرًا من سلسلة نمط المطابقة. للحصول على تفاصيل حول رموز مطابقة الأنماط البديلة، انظر أعلاه.

أمثلة

مثال 1. تحديثات لنظام تشغيل آمن مُمكّن فيه Verity

باستخدام الملفات الثلاثة التالية، نحدد قسم نظام ملفات رئيس، وقسم Verity مطابق، وصورة نواة موحدة لتحديثها ككتلة واحدة. هذا المثال عبارة عن امتداد للمثال الذي نُوقش سابقًا في صفحة الدليل هذه.

    # /usr/lib/sysupdate.d/50-verity.transfer
    [Transfer]
    ProtectVersion=%A
    [Source]
    Type=url-file
    Path=https://download.example.com/
    MatchPattern=foobarOS_@v_@u.verity.xz
    [Target]
    Type=partition
    Path=auto
    MatchPattern=foobarOS_@v_verity
    MatchPartitionType=root-verity
    PartitionFlags=0
    ReadOnly=1

يحدد ما ورد أعلاه آلية التحديث لقسم Verity لنظام الملفات الرئيس. تُنزَّل صور أقسام Verity من "https://download.example.com/foobarOS_@v_@u.verity.xz" وتُكتب في قسم محلي مناسب، والذي يُعلم عليه كقراءة فقط. بافتراض أن هذا التحديث يُشغل من الصورة نفسها، فإن إصدار الصورة الحالي (أي المحدد "%A") يُعلم عليه كمحمي، لضمان عدم تلفه أثناء الإقلاع. لاحظ أن معرف UUID للقسم المستهدف مُرمز في اسم ملف المصدر. يمكن أن يكون تثبيت معرف UUID للقسم مفيدًا لضمان أن "roothash=" في سطر أوامر النواة كافٍ لتحديد كل من قسم Verity وقسم نظام الملفات الرئيس بدقة، وأيضًا ترميز مستوى جذر هاش Verity (بافتراض أن معرف UUID في أسماء الملفات يطابق الهاش الخاص بمستواها الأعلى، بالطريقة التي يقترحها systemd-gpt-auto-generator(8)).

    # /usr/lib/sysupdate.d/60-root.transfer
    [Transfer]
    ProtectVersion=%A
    [Source]
    Type=url-file
    Path=https://download.example.com/
    MatchPattern=foobarOS_@v_@u.root.xz
    [Target]
    Type=partition
    Path=auto
    MatchPattern=foobarOS_@v
    MatchPartitionType=root
    PartitionFlags=0
    ReadOnly=1

يحدد ما ورد أعلاه تعريف نقل مطابق لنظام الملفات الرئيس.

    # /usr/lib/sysupdate.d/70-kernel.transfer
    [Transfer]
    ProtectVersion=%A
    [Source]
    Type=url-file
    Path=https://download.example.com/
    MatchPattern=foobarOS_@v.efi
    [Target]
    Type=regular-file
    Path=/EFI/Linux
    PathRelativeTo=boot
    MatchPattern=foobarOS_@v+@l-@d.efi \
                 foobarOS_@v+@l.efi \
                 foobarOS_@v.efi
    Mode=0644
    TriesLeft=3
    TriesDone=0
    InstancesMax=2

يثبت ما ورد أعلاه صورة نواة موحدة في قسم $BOOT، وفقًا لـ UAPI.1 Boot Loader Specification[2] النوع رقم 2. يحدد هذا ثلاثة أنماط ممكنة لأسماء صور النواة، وفقًا لـ Automatic Boot Assessment[3]، ويضمن عند تثبيت نواة جديدة، إعدادها مع بقاء 3 محاولات. لا يُحتفظ بأكثر من نواتين متوازيتين.

بهذا الإعداد، سيخدم خادم الويب الملفات التالية، لإصدار افتراضي 7 من نظام التشغيل:

    • SHA256SUMS – ملف البيان (manifest)، الذي يحتوي على الملفات المتاحة وهاشات SHA256 الخاصة بها

    • SHA256SUMS.gpg – التوقيع التعموي المنفصل لملف البيان

    • foobarOS_7_8b8186b1-2b4e-4eb6-ad39-8d4d18d2a8fb.verity.xz – صورة Verity للإصدار 7

    • foobarOS_7_f4d1234f-3ebf-47c4-b31d-4052982f9a2f.root.xz – صورة نظام الملفات الرئيس للإصدار 7

    • foobarOS_7.efi – صورة النواة الموحدة للإصدار 7

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

مثال 2. تحديثات لصورة حاوية دليل مجرد

    [Source]
    Type=url-tar
    Path=https://download.example.com/
    MatchPattern=myContainer_@v.tar.gz
    [Target]
    Type=subvolume
    Path=/var/lib/machines
    MatchPattern=myContainer_@v
    CurrentSymlink=myContainer

عند التحديثات، ينزل هذا "https://download.example.com/myContainer_@v.tar.gz" ويفك ضغطه/حزمه إلى /var/lib/machines/myContainer_@v. بعد كل تحديث، تُنشَأ/تُحدَّث وصلة رمزية /var/lib/machines/myContainer تشير دائمًا إلى التحديث الأحدث.

انظر أيضًا

systemd(1), systemd-sysupdate(8), systemd-repart(8)

ملاحظات

1.  UAPI.2 مواصفات الأقسام القابلة للاكتشاف
    https://uapi-group.org/specifications/specs/discoverable_partitions_specification

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

3.  تقييم الإقلاع الآلي
    https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT

4.  فهرس AppStream
    https://www.freedesktop.org/software/appstream/docs/chap-CatalogData.html

5.  بيانات وصفية خاصة
    https://systemd.io/APPSTREAM_BUNDLE

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

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

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