يصل RPM 6.0 في الوقت المناسب لـ Fedora 43 مع التوافق مع الإصدار 4، وإزالة تثبيت الإصدار 3، وعناصر تحكم أكثر صرامة.

  • تنسيق v6 مع 64 بت وتوقيعات متعددة وتجزئة حديثة
  • أدوات مُحسّنة: rpmkeys وrpmsign والاستعلامات المُحسّنة
  • التوافق مع الإصدار 4، وإزالة تثبيت الإصدار 3، وضوابط أكثر صرامة
  • واجهة برمجة تطبيقات موسعة، وC++20، ووثائق مُنسَّقة، واختبار أكثر قوة

دورة في الدقيقة 6.0

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

تم إصداره في 22 سبتمبر 2025، ويتبع مرشحًا تم تأكيده أخيرًا كإصدار نهائي. بالإضافة إلى إعلان عام، هناك جهد كبير في التوثيق وتغييرات السلوك الافتراضي. RPM 6.0 يقدم الدعم لتنسيق v6 الجديد ويعزز التحقق التشفيري، مع الحفاظ على دعم حزم v4 والتخلص من تثبيت v3.

ما هو RPM 6.0 وأهميته

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

يسلط الإعلان الرسمي الضوء على المعالم البارزة مثل إدارة التوقيعات المتعددة لـ OpenPGP، ودعم مفاتيح وتوقيعات OpenPGP v6 (بما في ذلك التشفير ما بعد الكم)، وتبني استراتيجيات للحصول على ملفات tarballs إصدار نقية وقابلة للتحقق. الهدف الرئيسي هو رفع مستوى الأمان دون كسر التوافق. في الحياة اليومية للعمال والإداريين.

التنزيلات والبصمات

يتضمن التوزيع ملف المصدر الرئيسي rpm-6.0.0.tar.bz2، مصحوبًا بمجموع التحقق SHA256 للتحقق من السلامة. SHA256: 14abb1b944476788d90005d8d61d5d30fce80d9f0de11eb657b14e5c9ef27441.

نظرة عامة على التغييرات مقارنة بالإصدار 4.20.1

  • دعم حزم v4 و v6، مع ملاحظات التوافق التفصيلية.
  • توقيعات OpenPGP متعددة لكل حزمة ودعم لمفاتيح OpenPGP v6 وPQC.
  • تحديث المفاتيح المستوردة مسبقًا واستخدام بصمة الإصبع أو الهوية الكاملة طوال الدورة.
  • يتم إيقاف تثبيت حزمة v3؛ يمكن عرضها واستخراجها باستخدام rpm2cpio، ولكن لا يمكن تثبيتها.
  • تطبيق صارم للتحقق من التوقيع بشكل افتراضي، مما يزيد من أمان النظام البيئي.
  • مراجعة رئيسية لصفحات الدليل والوثائق، مع محتوى الإصدارات على الموقع الرسمي.
  • ملفات tarballs الإصدارية الأصلية والقابلة للتحقق، تعزيز إمكانية إعادة الإنتاج والتدقيق.

التغييرات والتحسينات للاستخدام العام

تكتسب أداة rpmkeys قدرًا كبيرًا من الأهمية في إدارة المفاتيح: يسمح الآن بتحديث المفاتيح باستخدام rpmkeys –import (بما في ذلك تحديث المُعرِّف القصير المُبهم إلى بصمة كاملة)، والاستيراد من أنبوب، والتصدير باستخدام rpmkeys –export، والعمل بشكل مُتسق عبر واجهات خلفية مُختلفة لسلسلة المفاتيح. بالإضافة إلى ذلك، باستخدام rpmkeys –rebuild، يُمكن إعادة بناء محتويات سلسلة المفاتيح ونقلها بين الواجهات الخلفية، وأصبحت عمليات البحث عن المفاتيح الآن غير حساسة لحالة الأحرف.

يقوم rpmsign أيضًا بالقفز: يمكن التوقيع عليه باستخدام GnuPG أو Sequoia-sq يتم التحكم بها باستخدام الماكرو %_openpgp_sign. لم يعد الأمر الفرعي rpmsign –addsign يستبدل التواقيع الموجودة؛ فهو يضيف افتراضيًا أي عدد من التواقيع إلى حزم الإصدار 6، وكذلك إلى حزم الإصدار 4 في حال استخدام الأمر –rpmv6. أما الأمر RPMsign –resign، فيستبدل جميع التواقيع السابقة بتواقيع جديدة.

بالنسبة للاستعلامات، تتم إضافة ملحقات العلامات مثل rpmformat (اكتشف ما إذا كان الإصدار v3 أو v4 أو v6) وopenpgp (إدارة جميع توقيعات OpenPGP). تمت إضافة مُنسيق :hashalgo لعرض أسماء خوارزميات التجزئة، ويبدو أن الاسم المستعار –filemime يستعلم عن MIME حسب الملف. المصطلحات موحدة في جميع الرسائل: يُستخدم OpenPGP باستمرار، وتُصنف تواقيع الرأس والحمولة في الإصدار 3 على أنها قديمة.

وظيفة حسابية جديدة وإصلاحات للأخطاء في RPM 6.0

تحسب الميزة الجديدة مجموعة قابلة للتكوين من الملخصات أثناء التحقق وتحفظها في قاعدة بيانات RPM، مما يساعد في تحديد ملف الحزمة المصدر. تم حل العديد من المشاكل التشغيليةتؤثر أخطاء البرامج النصية الآن على أكواد نتائج المعاملات؛ وتؤثر بعض المشغلات الفاشلة على العمليات ذات الصلة؛ وتم إصلاح المشكلات المتعلقة بـ –hash و–percent و–test بالتزامن مع –restore.

تم إصلاح الأخطاء مثل خطأ التجزئة والتسريبات في rpmgraph، اللاحقة التي يستخدمها rpm2archive لـ tar و cpio، وتم إجراء إعادة كتابة رئيسية لصفحات الدليل: أسلوب موحد مع أمثلة، وصفحات جديدة للمكونات والتنسيقاتنقل أوامر المستخدم إلى القسم ١، وتغطية جوانب لم تُوثّق سابقًا. تتضمن الوثائق المُنسَّقة على الموقع الرسمي صفحات دليل المستخدم، ودليل مرجعي، وواجهة برمجة تطبيقات.

التعبئة والتغليف وبناء العبوة

يمكن لـ rpmbuild الآن إنشاء تنسيقين مختلفين يتم التحكم فيهما بواسطة الماكرو %_rpmformat (القيم 6 أو 4). بالإضافة إلى ذلك، تم تمكين التوقيع الذاتي في البناء إذا تم تعريف %_openpgp_autosign_id، وتمت إضافة أداة rpm-setup-autosign لتسهيل هذا التكوين.

في وحدات الماكرو، تتم إضافة %{span:…} لتسهيل تعريفات متعددة الأسطر ويتم إضافة %{xdg:…} لتقييم مسارات XDG الأساسية. تمت إضافة الدعم لهندسة E2K ومجموعة من الإصلاحات: ترتيب المصدر والتصحيحات في الرأس، وLua glob فيما يتعلق بحجة c، والتحقق من صحة الهندسة المعمارية في النقطة الصحيحة، وقبول أقسام %prep الخاصة بنظام البناء، والإصلاحات في check-rpaths عندما يتعايش RPATH وRUNPATH.

تم إصلاح تسرب الذاكرة في rpmspec –shell، والانحدار إلى إصدار 4.20 في rpmbuild -rs مع وجود أدلة غير موجودة، وسطر جديد إضافي في rpm –eval. تم إصلاح خطأ التجزئة أيضًا. في حال وجود مُخرَجات غير صالحة من مُنشئ التبعيات في الوضع المتعدد، تمت إزالة سياسة brp-selfperms. وأخيرًا، تمت إزالة مُبدِّل nodirtokens المُهمَل من rpmbuild.

تغييرات واجهة برمجة التطبيقات

في منطقة سلسلة المفاتيح، تتم إضافة وظائف لتكرار المفاتيح وإدارتها: rpmKeyringInitIterator، وrpmKeyringIteratorNext، وrpmKeyringIteratorFree، وrpmKeyringVerifySig2، وrpmKeyringLookupKey، وrpmKeyringModifyبالنسبة لـ rpmPubkey، تتم إضافة أدوات الوصول مثل rpmPubkeyFingperint، وrpmPubkeyFingerprintAsHex، وrpmPubkeyKeyIDAsHex، وrpmPubkeyArmorWrap، بالإضافة إلى rpmPubkeyMerge لدمج الوصافات الخاصة بنفس المفتاح.

بالنسبة لحلقة مفاتيح المعاملة الدائمة، يتم تضمين rpmtxnImportPubkey، وrpmtxnDeletePubkey، وrpmtxnRebuildKeystore. يتم التحكم في عملية rpmSign باستخدام أعلام جديدة:RPMSIGN_FLAG_RESIGN، وRPMSIGN_FLAG_RPMV4، وRPMSIGN_FLAG_RPMV6. تمت أيضًا إضافة rpmteVfyLevel وrpmteSetVfyLevel، إلى جانب ما يعادلهما te.VfyLevel وte.SetVfyLevel، إلى ارتباطات Python.

بالنسبة للتوقيعات المتعددة، تظهر معرفات مثل RPMTAG_OPENPGP، وRPMSIGTAG_OPENPGP (الاسم البديل لما سبق) وعلم التحقق RPMVSF_NOOPENPGP. تمت إضافة تسميات جديدة: RPMTAG_PAYLOADSIZE، RPMTAG_PAYLOADSIZEALT، RPMTAG_RPMFORMAT، RPMTAG_FILEMIMEINDEX، RPMTAG_MIMEDICT، RPMTAG_FILEMIMES، RPMTAG_SOURCENEVR، RPMTAG_PAYLOADSHA512، RPMTAG_PAYLOADSHA512ALT، RPMTAG_PAYLOADSHA3_256، RPMTAG_PAYLOADSHA3_256ALT، RPMTAG_SHA3_256HEADER.

تم إعادة تسمية العلامات: تم نقل RPMTAG_PAYLOADDIGEST إلى RPMTAG_PAYLOADSHA256، وتم نقل RPMTAG_PAYLOADDIGESTALT إلى RPMTAG_PAYLOADSHA256ALT، وتم وضع علامة على RPMTAG_PAYLOADDIGESTALGO على أنها قديمة ضمن RPMTAG_PAYLOADSHA256ALGO. تمت إضافة معرفات SHA-3: RPM_HASH_SHA3_256 وRPM_HASH_SHA3_512، بالإضافة إلى رموز MIME المرتبطة بكل ملف في حزم v6، مثل rpmfilesFMime وrpmfiFMime، وعلم RPMFI_NOFILEMIME.

في نطاق OpenPGP، تتم إضافة معرفات متوافقة مع RFC 9580 ووظيفة pgpDigParamsSalt لاسترداد التوقيعات المسبقة لـ v6. بالنسبة لحزم الملخص، يظهر rpmDigestBundleUpdateID. (تحديث المعرفات الفردية). ميزات جديدة أخرى: يُرجع rpmtsAddInstallElement القيمة 3 للتنسيقات غير المدعومة، ويُبلغ fdSize عن خطأ للملفات غير العادية.

تحسينات داخلية

تم نقل كود RPM إلى C++20 (باستثناء مكونات Python الإضافية والارتباطات). تمت إعادة تسمية الخطوط إلى .cc و.hhيتم نقل الهياكل الديناميكية إلى STL، ويُعزز عدّ المراجع بعمليات ذرية. بالإضافة إلى ذلك، يتم توسيع مجموعة الاختبارات وتبسيط عملية إنشائها.

تم تقديم تجريد سلسلة المفاتيح الحقيقي وواجهة خلفية تجريبية تعتمد على openpgp.cert.d. تمت إضافة موقع بناء الهدف لعرض الوثائق المحلية، وتتكيف صورة الاختبار مع مجموعة الأدوات. يُسمح باستخدام الشرطة السفلية في أسماء RPMTAG، وتم إصلاح الانحدارات، مثل الحجم المخصص للتوقيعات وآلية البدائل التي تتداخل مع التوقيعات.

تم إصلاح قراءات سلسلة المفاتيح الثابتة بدون قفل المعاملات، وحالة السباق في rpmioMkpath، وعمق التكرار في رسائل خطأ الماكرو، وحالة حيث تسببت حقول كلمة المرور أو المجموعة الفارغة في تجاهل الإدخالات. أصبحت وحدات الماكرو الداخلية متاحة مرة أخرى قبل تحميل الملفاتيتم التعامل مع خطأ fdSize في rpmSign بشكل صحيح، ويتم تنظيف العلامات الزائفة في –querytags، ويتم احترام بادئة التثبيت في البرامج النصية find-provides و find-requires القديمة.

تحسينات داخلية أخرى

تم أيضًا إصلاح تسريبات مرجعية متعلقة بالملفات في Python، وتم تثبيت تخزين التبعيات لتجنب عدم التحديد، وتم إصلاح هروب chroot في البرنامج النصي sysusers مع إدخالات u!، وتم إصلاح الانحدار 4.19 في رموز إرجاع التحديث الفاشلة. تحذير بشأن ملفات الماكرو في rpmrcيتم إعادة إنشاء قفل المعاملة بعد –rebuilddb، ويتم إزالة gpg(keyid) من gpg-pubkey، وتنظيف الرموز التي تسربت عن طريق الخطأ إلى ABI.

تم إزالة الاستخدامات غير المحمولة للإشارة، وتم تحسين قفل rpmlog، وتدعم روابط Python عزل الوحدة النمطية للمترجمين الفرعيين المتعددين وإصلاح تسريبات الموارد باستخدام اختبار ASAN. إنها تحسينات تعمل على تحسين المتانة والقدرة على النقل والقدرة على الصيانة. على جميع الجبهات.

متطلبات تجميع RPM

أصبح الآن مطلوبًا مُجمِّع C++20 بالإضافة إلى C99؛ ولا يلزم دعم وحدة C++20. للبناء باستخدام Sequoia، يلزم استخدام rpm-sequoia 1.9.0 أو إصدار أعلى (وهو الخيار الافتراضي)، Python 3.10 أو أعلى للارتباطات، ومولد scdoc لصفحات الدليل.

لم تعد وثائق واجهة برمجة التطبيقات المترجمة مسبقًا مضمنة في ملفات tarballs الخاصة بالإصدارات؛ فبنائها اختياري مع Doxygen. تتوفر واجهات برمجة التطبيقات المعدة مسبقًا لكل إصدار في FTP الخاص بالمشروع.

ملاحظات رئيسية حول توافق RPM 6.0 وتنسيقه

يوفر تنسيق الحزمة v6 حجم ملف 64 بت والحدود ذات الصلة، وتحديث التشفير مع إزالة MD5 وSHA1، وتجزئة SHA3-256 في الرأس، وملخصات SHA512 وSHA3-256 في الحمولة. تتم إضافة معلومات MIME لكل ملفيتوفر دعم واسع لـ RPM بدءًا من الإصدار 4.14 (مع بعض الفروق الدقيقة). لم يعد وضع مُولِّد التبعيات الخارجية مدعومًا في الإصدار 6، وتمت إزالة تبعيات rpmlib القديمة قبل الإصدار 4.6 لتحسين الأداء.

يمكن التحقق من حزم v6 باستخدام RPM من 4.6، وفك ضغطها باستخدام 4.12، والتحقق منها وتثبيتها باستخدام 4.14 أو أعلى، مع مراعاة القيود المعروفة. تظل حزم v4 مدعومة بالكامل وتلك التي يُنشئها الإصدار 6.0 مطابقة لتلك الموجودة في فرع 4.x؛ ومع ذلك، في التكوين الافتراضي، لا يتم التحقق من الحزم المُنشأة باستخدام حزم RPM أقل من 4.14 لأنها تستخدم مُلخصات ضعيفة. يمكنك ضبط %_pkgverify_level على signature لتجاهل هذه المُلخصات، أو استعادة سلوك 4.x بضبط %_pkgverify_flags على 0 إذا كان التحقق من المُلخص الضعيف مطلوبًا.

تمت إزالة تثبيت v3، على الرغم من أنه يمكن عرضه واستخراجه باستخدام rpm2cpio. بشكل افتراضي، يقوم RPM ببناء حزم v6يمكن عكس ذلك عن طريق تعيين %_rpmformat إلى 4. في الحزم المبنية باستخدام RPM 6.0 أو أعلى، يتم تعطيل عائلة Lua posix.fork، بينما في الحزم المبنية باستخدام 4.20 أو إصدار سابق، تستمر في العمل.

اعتبارات أخرى: يتم الآن تعريف تكوين مفتاح التوقيع باستخدام %_openpgp_sign_id (التوافق مع الإصدارات السابقة مع %_gpg_name)، وتصبح وحدات الماكرو الخاصة بالتوقيع منخفضة المستوى معلمة، ولا تعمل تجاوزات %__gpg_sign_cmd المخصصة بعد الآن بشكل جاهز للاستخدام. يُسمح بفصل %_passwd_path و%_group_path بعلامة نقطتين. لاستخدام مصادر NSS المتعددة، وتمت إزالة مفاتيح الاستعلام –pkgid و –hdrid.

RPM 6.0 وFedora 43: النطاق والفوائد والاختبار

الترقية إلى RPM 6.0 في فيدورا 43 ويهدف إلى تعزيز الأمن وتهيئة الأرضية لصيغة v6، ولكن دون اعتماد الصيغة الجديدة كصيغة افتراضية حتى الآن. سيستمر Fedora 43 في إنشاء الإصدار v4 بشكل افتراضي.وسيتم تناول التنفيذ الصارم للتحقق من التوقيع باعتباره تغييرًا في النظام في إصدار مستقبلي.

تتضمن الفوائد الرئيسية لـ Fedora ما يلي: يتم الآن التعرف على مفاتيح OpenPGP دائمًا من خلال بصمة الإصبع أو المعرف الكامل، ويمكن تحديثها باستخدام rpmkeys –import، ويتم دعم التوقيعات المتعددة لكل حزمة، ويتم دعم التوقيع الذاتي المحلي أثناء عمليات البناء، واستخدام Sequoia-sq كبديل لـ GnuPG. كما أنه يجعل من الأسهل اختبار تنسيق v6 في النظام البيئي دون فرض اعتماده عالميًا.

ليس ضمن النطاق: الهجرة العامة من Fedora إلى تنسيق v6 أو تغيير وضع التحقق الافتراضي. صناع التغيير مسؤولون عن تجاوز RPM والمساعدة في حالات عدم التوافق، بينما يتعين على بقية المطورين اختبار المشكلات والإبلاغ عنها وتكييف أدوات الطرف الثالث عند الضرورة.

تأثير الترقية والتوافق: قد تتطلب البرامج النصية والأدوات التابعة لجهات خارجية إجراء تعديلات بسبب تنسيق عنوان المفتاح الجديد وتغييرات الإخراج المتعلقة بالتوقيع. للاختبار المبكر من المستحسن التحقق من صحة: تحديث المفاتيح المستوردة، وإدارة سلسلة المفاتيح باستخدام rpmkeys، وتوافق تنسيق v6 مع البرامج الخارجية (البناء باستخدام %_rpmformat إلى 6).

تجربة مستخدم RPM 6.0 على Fedora

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

التبعيات: لا يتغير اسم SOName، لذا لا حاجة لإعادة بناء التبعيات؛ ولا توجد تبعيات على تغييرات أخرى في فيدورا. RPM مبني بلغة C++، لذا فهو يضيف تبعية وقت التشغيل إلى libstdc++. يتطلب التوقيع باستخدام Sequoia استخدام sequoia-sq 1.0 أو أعلى كتبعية اختيارية وتؤثر فقط على توقيع الحزمة.

خطة الطوارئ: الرجوع إلى RPM 4.20 إذا لزم الأمر، مع تحديد موعد نهائي لتجميد الإصدار التجريبي، دون حظر الإصدار. يستمر التسليم على الرغم من أن تنسيق v6 ليس هو التنسيق الافتراضي بعد في التوزيع.

ملاحظات إصدار RPM 6.0 والإعلان الخلفي

تم تضمين الإصلاحات للأخطاء وتحديثات صفحة الدليل للمرشح السابق، وتمت ترقيته إلى النهائي. الإعلان الذي وقعه فريق RPM يسلط هذا الضوء على العمل الذي تم إنجازه نحو هذا الإنجاز منذ إعادة تشغيل rpm.org حوالي عام 2007، مع إنجازات مثل أحجام الملفات 64 بت، ومولدات التبعيات القابلة للتوصيل، وإضافات المعاملات، والتبعيات الغنية، ومشغلات الملفات، وتحسينات معلومات التصحيح، وواجهات خلفية جديدة لقواعد البيانات، وتكامل Lua وتعبيرات الماكرو، ومتطلبات البناء الديناميكية، وتوليد المواصفات، ودعم المستخدم والمجموعة، وأنظمة البناء التصريحية.

لقد ساهم أكثر من 300 شخص في تقديم الكود من توزيعات ومنظمات متعددة. يوضح تاريخ المشروع ومجتمعه الاستقرار والنطاق أن RPM 6.0 يرث ويتوسع.

إن التوقعات بالنسبة لـ RPM 6.0 هي أنه سيكون هناك مدير حزمة أقوى للعقد القادم: تشفير أفضل، وتنسيق عالي الحجم، وأدوات أكثر قوة، ووثائق محدثة.، مع وجود مسار توافق واضح للمسؤولين والمطورين والأنظمة البيئية لتبني الميزات الجديدة دون أي مشاكل.

ألما لينكس 9.2
المادة ذات الصلة:
تم إصدار AlmaLinux 9.2 بالفعل وهذه هي أخبارها