بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
شرح بناء حزم rpm من خلال ملف spec و من خلال حزمة مصدرية src.rpm هذا الشرح يعتمد هذا الموضوع في الرابط في الأسفل .
http://www.arfedora.com/2016/09/rpm.html1-عرض وتوضيح بعض الأشياء .
-ملف spec كما ذكرت في الشرح السابق هو ملف نصي يكتب داخله معلومات عن البرنامج الذي نريد تحزيمه ويكتب داخله أيضا خطوات البناء والتحزيم مثل فك الضغط علن ملف المصدر حذف شيء تنفيذ إصلاح شيء من خلال patch بناء البرنامج و نقل شيء و الكثير من الأمور...إلخ-ال Sources كما ذكرت أيضا في الشرح السابق هو كل ملف تحتاجه عملية البناء والتحزيم قد يكون ملف مصدري للبرنامج أو صورة أو ملف نصي أو patch أو أي شيء .
-الحزمة المصدرة وتنتهي بالاحقة src.rpm هي شيء مثل ملف مضغوط يجمع ملف spec و ال Sources في ملف واحد .
-حزمة x86_64.rpm هي حزمة rpm 64bit نهائية وجاهزة للتثبيت وتنتج عن بناء حزمة src.rpm .
-حزمة i686.rpm وأظن i386.rpm هي حزم rpm 32bit نهائية وجاهزة للتثبيت وتنتج عن بناء حزمة src.rpm .
-حزمة noarch.rpm هي حزمة rpm نهائية وجاهزة للتثبيت وتنتج عن بناء حزمة src.rpm وهي غير مقيدة بأي معمارية ويمكن تثبيتها على أي نظام .
2-بناء حزمة من خلال ملف spec .
لنجاح عملية البناء من خلال ملف spec يجب ان تتوفر في الحد الأدنى ثلاث أشياء .
-أولا ملف spec سليم أي لا يوجد فيه أخطاء .
-ثانيا توفر ال Sources وتكون مذكورة في ملف spec اما خانات Source و Patch.
-ثالثا تثبيت الحزم المطلوبة لعمية البناء وتكون مذكورة في ملف spec امام خانات BuildRequires ملاحظة الحزم هذه مهمة لعميلة البناء فقط ولا تهم المستخدم العادي أي هي ليست إعتماديات لعمل البرنامج لكنها فقط إعتماديات لبناء البرنامج والحزمة.
الأن سأقوم ببناء برنامج vokoscreen إصدار 2.5.0 من خلال ملف spec قمت بعمله ,يمكنكم الحصول عليه من الرابط في الأسفل نقوم بتنزيله ونقله إلى مجلد SPECS هذا المجلد سبق وشرحت أين يكون في الشرح السابق من الان فصاعدا سأعتبر أن هذه المعلومات تعرفونها .
https://www.dropbox.com/s/4qx6d0mwfrvc155/vokoscreen.spec?dl=0
تحقق أول شرط توفر ملف spec .
الأن نحتاج تحقيق ثاني شرط الحصول على ال Sources ندخل على ملف spec بأي محرر نصوص .
نلاحظ حانة Source0 وفيها رابط البرنامج ممكن ان يكونو أكثر من واحدة مثلا Source1 و Source2 و...إلخ وممكن أن يكون هناك أيضا خانات Patch0 و Patch1 و...إلخ على العموم نحتاج تنزيل كل شيء مذكور في Source و Patch إن وجدو ووضعهم في مجلد SOURCES.ملاحظة مهمة ممكن ان يكون مذكور فقط إسم ال Source من دون الرابط أو قد يكون الرابط لا يعمل وهنا لا مشكلة نقوم بالبحث عنه في الإنترنت مثلا في الموقع الرسمي للبرنامج الذي نريد تحزيمه المهم أن يكون الملف المذكور لوحده أو المذكور في أخر الرابط أي الذي معنا الأن 2.5.0zip
المهم أن يكون هذا الملف متوفر في مجلد SOURCES ليس مهم الطريقة الذي قمنا بتنزيله منها أو هل مذكور الرابط أو فقط الإسم في خانة Source المهم فقط أن يكون متوفر في مجلد SOURCES .
أمر مفيد أن يشرح {version}% تستبدل برقم الإصدار تلقائيا وأحيانا قد تجدو {name}% وهي تستبدل تلقائيا بالإسم أي ما موجود في خانة Name الذي معنا الان vokoscreen .
إذا كان رابط في خانة ال Source صحيح يتوفر أداة تقوم بتنزيل ال Source ونقله إلى مجلد SOURCES طبعا ممكن القيام بالأمر بشكل يدوي لا مشكلة ,ملاحظة انا حددت فقط تنزيل فقط الموجود في خانات Source لاحظة خيار S- لتنزيل كل شيء بما فيهم ال Patch إن وجدو نستبدل S- ب A- على العموم لمزيد من المعلومات نكتب man spectool.
نلاحظ تم التنزيل والنقل لان الرابط صحيح إلى هنا يكون تحقق ثاني شرط .
الأن نحتاج تحقيق ثالث شرط تثبيت الحزم المطلوبة في خانات BuildRequires ندخل على ملف spec بأي محرر نصوص .
ممكن أن نقوم بتثبيتهم بشكل يدوي وممكن من خلال إستخدام خاصية في dnf كما في الصورة في الأسفل .
إلى هنا يكون تحقق الشرط الثالث .
الأن عملية البناء ممكن بأكثر من طريقة أمثلة ممكن من خلال mock أو fedpkg وممكن من خلال rpmbuild وهذا ما سأقوم به بهذا الشرح الأشياء الأخرى قد تهم المحزم أكثر على العموم هناك أكثر من خيار ل rpmbuild سأشرح ثلاث فقط باقي الأشاء صعب فهمها إذا لم نكن نعرف بنية ملف spec .
-أولا بناء حزمة Binary أي حزمة rpm جاهزة لتتثبت يعني كما ذكرت سابقا حزم x86_64.rpm و i686.rpm أو i386.rpm أو noarch إذا كان مثلا تحزيم ثيمات وطلبنا في ملف spec أن يكون الناتج noarch ستكون النتيجة حزمة noarch.rpm أما إذا كان بنااء برنامج من المصدر مثل برنامج vokoscreen النتيجة ستكون يا أما حزمة 64bit يا أما حزمة 32bit على حسب النظام الذي نعمل منه لكن ممكن طلب تحزيم حزمة 32bit حتى لو كنا نعمل من نظام 64bit لكن ليس موضوعنا ,على العموم أمر بناء الحزمة يكون شيء كالذي في الصورة في الأسفل نلاحط خيار bb- .
-ثانيا بناء حزمة مصدرية أي src.rpm نلاحظ خيار bs- ونلاحظ أين سيتم حفظها سبق وشرحت الامر في الشرح السابق .
-ثالثا بناء الإثنين معا all وهذا ما طبقته في بالفعل نلاحظ خيار ba- .
نلاحظ عمل عملية بناء البرنامج والحزمة قد يأخذ الامر بعض الوقت على حسب سرعة المعالج لديكم وعلى حسب كبر حجم البرنامج .
نجاح العملية exit 0 .
الحزمة بعد بنائها نلاحظ المسار , جهازي 64bit لهذا تم تلقائيا إنشاء حزمة 64bit وأيضا تم بناء حزمة مصدرية تجدونها في مجلد SRPMS.
ممكن إستعراض ما بداخل الحزمة للتأكد من ما تحتوي من خلال rpm -qlp .
أخيرا ممكن تثبيت الحزمة مثلها مثل أي حزمة rpm اخرى .
3-بناء حزمة من خلال حزمة مصدرية src.rpm .
لنجاح عملية البناء من خلال ملف src.rpm يجب ان يتحقق في الحد الأدنى شرطين .
-أولا ملف src.rpm سليم .
-ثانيا تثبيت الحزم المطلوبة لعمية البناء وتكون مذكورة في ملف spec امام خانات
BuildRequires وملف spec يكون داخل الحزمة المصدرية ممكن تصفحه أو إستخراجه مثل أي ملف مضغوط.
الأن عملية البناء سبق وتحقق لنا أول شرط عندما نفذنا البناء من خلال rpmbuild -bs أو rpmbuild -ba وهنا يكون تحقق أو شرط .
ثاني الشرط ممكن تحقيقه من خلال dnf كما في الصورة في الأسفل وممكن بشكل يدوية من خلال تصفح ملف spec .
نلاحظ أمر بدأ عملية البناء .
نلاحظ نجاح العملية سنجد الحزمة في مجلد RPMS .