بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
تجهيز النظام لبناء حزم rpm وبعض المعلومات هدف هذا الشرح عرض بعض المعلومات فقط وليس تعلم التحزيم لكنه قد يكون بداية جيدة اتمنى أن أستطيع أن أكمل في مواضيع أخرى شرح بعض الاشياء عن التحزيم طبعا ما أعرفه فانا مازلت أتعلم وأجهل الكثير من الامور.
1-تثبيت الأدواة الازمة يتوفر في فيدورا مجموعات يمكن تثبيتها وهي تقوم بتثبيت المطلوب .
sudo dnf install @c-development @development-tools @rpm-development-tools rpmlint
2-داخل مجلد المنزل عندنا نحتاج إنشاء مجلد إسمه rpmbuild وداخله المجلدات التالية BUILD ,BUILTROOT ,SOURCES ,SRPMS ,RPMS ,SPECS
على العموم هذا كان قديما الأن ممكن أن نقوم بالأمر بتنفيذ أمر واحد يقوم عنا بالمطلوب (ملاحظة نلاحظ ان إسم المجلدات أحرف كبيرة وعند القيام ببناء أي حزمة يجب يجب أن لا نستخدم صلاحيات مستخد root أي لا نستخدم su أو sudo ).
rpmdev-setuptree
نلاحظ ملف الإعدادات يشير إلى مجلد rpmbuild في مجلد المنزل الخاص بنا إختصارها HOME$ لاحظة الصورة في الأسفل ماذا تعني بعض الكلمات .
topdir_% تسمى macros بشكل بسيط هي كلمة إختصار تدل على شيء مثل topdir_% تدل على مجلد rpmbuild في مجلد المنزل الخاص بنا .
3-بعض الشرح عن هذه المجلدات سأستعمل أمر rpmbuild -bi فقط لتفحص المجلدات وماذا يجري داخلها.
-مجلد BUILD هو المجلد الذي سيتم نقل الملفات إليه بعد فك الضغط عن الملف المضغوط الخاص بالبرنامج أو أيقونات ثيمات...إلخ الذي نقوم ببنائهم ,وداخل هذا المجلد أيضا ينفذ الأوامر التي ننفذها عادتا لبناء برنامج من المصدر مثال أوامر مثل configure و make و...إلخ.
-مجلد BUILDROOT إذا صح التعبير هو مجلد الذي يتم تثبيت البرنامج داخله لكن بشكل مؤقت أي انه شيء مثل القسم root الأساسي لكن وهمي أي ان خطوة make install تقوم بتثبيت البرنامج داخله مثل لنفترض أني أقوم بتحزيم ثيم كما نعرف الثيمات تحفظ في مجلد usr/share/themes/ لنفترض إسم الثيم albatar سيكون مسار مجلد الثيم شيء كهذا مثلا عندي
home/yucef/rpmbuild/BUILDROOT/albatar/usr/share/themes/albatar/ .
-مجلد RPMS وهو المجلد الذي يحتوي الحزم بعد بنائها وتكون مقسمه على حسب المعمارية أو noarch مثل الحزم التي لا تعتمد على معمارية معينة مثل الثيمات أيقونات و ...إلخ
-مجلد SOURCES وهو من إسمه واضح ويتم داخله حفظ مصدر البرامج أي الملفات المضغوطة لمصدر البرماج ليتم بنائها وتحزيمها ,وأيضا يتم حفظ ال patch داخله أي الرقع لتنفيذها على الكود المصدري قبل بنائه, أو قد يكون المصدر مثلا صورة أيقونة أو أي ملف نحتاجه لبناء الحزمة.
-مجلد SPECS وهو يحتوي ملفات نصية تنتهي بالاحقة spec هذه الملفات لا أعلم ترجمتها بالعربية أظن يسموها محددات على العموم هذه الملفات شيء مثل إستمارة تقوم بكتابتها وتضع فيها خطوات بناء الحزمة أولا تضع بعض المعلومات مثل إسم الحزمة وصف للبرنامج الذي تقوم بتحزيمه رقم إصداره الإعتماديات التي يحتاجها لبنائه أو الإعتماديات التي يحتاجها ليعمل وتعليمتا البناء مثل make make install ومثلا نقل الملف الفلاني أو حذفه والكثير من الامور ...إلخ
صورة لملف spec لثيم طبعا لم نجد make و make install لكن مجرد إنشاء مجلدات ونقل ملفات ومجلدات , نلاحظ انه noarch .
-مجلد SRPMS هو مجلد السورس كود للحزم أي حزمة تنتهي بالاحقة src.rpm وتحتوي ملف spec و الsources من ملفات بتشات ملف مضغوط صور و...إلخ هذه الحزمة لا يمكن تثبيتها بشكل مباشر يجب أن نقوم ببنائها بالأول لتصبح حزمة rpm جاهزة .
4-بعض الشرح عن ال macros .
كما ذكرت في الأعلى بشكل بسيط ال macro كلمة إختصار تدل على شيء مثل topdir_% تدل على مجلد rpmbuild في مجلد المنزل الخاص بنا.
هناك الكثير من ال macros منها من هو معقد أي يقوم بأشياء وينفذ أشياء لنا وليس ففط أنه يدل على شيء يعني ال macros ممكن تشبيهها بالدوال في لغات البرمجة قد يكوت عملها تنفيذ شيء أو إرجاع قيمة .
.
ممكن إستعراض ال macros من خلال الأمر في الأسفل .
rpm --showrc
بعض الأمثلة سأستخدم rpm -E لنتعرف عليهم طبعا هناك الكثير .
أخيرا بعض الmacros قد تحتاج تثبيت الحزمة الخاصة بها لهذا توضع في في ملف spec في خانة BuildRequires ,مثال في الصورة في الأسف إحتجت إستخدام macro خاص بلغة البرمجة python3 .
هناك الكثير من ال macros للكثير من الأشياء منها خاص بلغات البرمجة لنستعرضهن نبحث في مدير الحزم .
sudo dnf search macros