شرح تحزيم سكربت بايثون (rpm)

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته




شرح تحزيم سكربت بايثون (rpm) .

 




سأقوم بتحزيم  سكربت بايثون مع ملف README  و ملف الرخصة الخاص به , عملية التحزيم ستكون بسيطة جدا لا يوجد بناء من المصدر ولن أستخدم setup.py install المعتادة في بايثون فقط عملية نقل الملفات لمكانها الذي أريده , هذا الدرس سيكون جيد كبادية ربما لاحقا أكتب عن هذا الامر بشكل متدرج .

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

https://arfedora.blogspot.com/2016/09/rpm.html

https://arfedora.blogspot.com/2017/09/rpm.html




مقدمة :


لأقوم بتحزيم أي شيء أحتاج ان اعرف هذه الأشياء :

1-رابط تنزيل مصدر البرنامج .

2-معلومات عن البرنامج مثل رخصته رقم إصداره تعريف عنه رابط موقعه الرسمي ..إلخ .

3-أحتاج ان أعرف الحزم التي توفر الأشياء الضرورية لعملية البناء أي كما ذكرت في المواضيع التي ذكرتها سابقا BuildRequires ,لاكن في هذا الشرح لن نحتاج هذا.

4-أحتاج أن أعرف الحزم التي توفر الأشياء التي سيحتاجها البرنامج أثناء عمله أي Requires .

5-أحتاج أن أعرف كيف تتم عملية البناء , إن كان الامر فقط يحتاج نقل أشياء لمكانها الصحيح مثل تحزيم ثيمات أو أيقونات أو صور خلفية للشاشة wallpapers وهنا مجرد نقل ملفات لمكانها الصحيح ,أو إن إحتاج الأمر عملية بناء من خلال make و غيرها  وطبعا ممكن الإثنين معا .

6-قد أحتاج أحيانا ذكر أوامر ليتم تنفيذها  بعد التثبيت الحزمة أو بعد التحديث أو بعد حذف الحزمة ,لاكن في هذا الشرح لن نحتاج هذا.





لنبدأ ساضع الصورة وأسفلها الشرح .


 في مجلد rpmbuild لدينا هذه المجلدات.

1-مجلد SOURCES سنضع داخله الملفات المصدرية للبرنامج المراد تحزيمه .

2-مجلد BUILD أثناء التحزيم وفي أول مرحلة prep% سيتم فك الضغط عن الملف المصدري إلى هذا المجلد ثم الدخول عليه من خلال cd ثم إذا حددنا أي امر في مرحلة prep% سيتم تنفيذه في هذا المجلد .

3-مجلد BUILDROOT سيحتوي هذا المجلد مجلد أخر بإسم البرنامج ثم داخله إذا صح التعبير محاكي لشجرة ملفات لينكس أي أين سيتم نقل الملفات لنفترض مثلا
 home/youcef/rpmbuid/BUILDROOT/myprogram-x86_64-03/usr/bin/myprogram.py/ 
ستتوضح الامور أثناء الشرح في الأسفل .

4-مجلد RPMS سيحتوي الحزم النهائية إن كانت noarch أو x86_64 أو غيرها.

5-SRPMS سيحتوي الحزم المصدرية src.rpm سبق وتكلمت عنها.

6-مجلد SPECS سنضع داخله ملفات spec التي سبق وتكلمت عنها .





هذا رابط السكربت الذي ساقوم بتحزيمه دخلت عليه وأخذت بعص المعلومات .

 1-رخصة البرنامج .

2-إسمه .

3-رقم إصداره.

4-تعريف بسيط عنه .

5-رابط الموقع الرسمي للبرنامج أو السكربت  .



 دخلت على مجلد SPECS وقمت بإنشاء ملف spec بإسم البرنامج ملاحظة سيتم إنشاء ملف spec بقالب جاهز مسبقا ثم نقوم نحن بالتعديل عليه .

نستخدم أي محرر نصوص انا إستخدمت gedit .





هذا هو ملف spec قبل التعديل عليه .




 نحصل على رابط الملف المصدري للبرنامج وهو ملف مضغوط .



 نقوم بالتعديل على ملف spec .

1-رقم إصدار البرنامج .

2-رقم الإطلاق بالنسبة ل {dist}% سيتم تعويضها على حسب رقم إصدار فيدورا الذي تعمل منه مثلا إذا كنت تعمل من فيدورا 27 سيتم تعويض {dists}% ب f27 ستظهر f27 في إسم الحزمة النهائية ,بالنسبة لمعنى release تعريبها إطلاق أي رقم الإطلاق أي لنفترض قمت بتحزيم برنامج رقم إصداره 10 ثم إكتشفت انك إرتكبت خطأ في التحزيم أو وجدت علة في البرنامج وتم توفير patch لحل المشكلة لذات الإصدار وسبق ورفعت الحزمة على المستودع الخاص بك هنا تحتاج إصلاح التحزيم أو ترقيع البرنامج وتحزيمه من جديد ,وعندها تقوم بزيادة رقم release بواحد لأنه لا يمكنك أن تغير رقم إصدار البرنامج من نفسك ,أنت فقط تقوم بتغير رقم الإطلاق وعندها مدير الحزم سيعرف ان هناك حزمة ثانية بذات الإصدار لها رقم إطلاق أعلى وسيتم تحديث الحزمة لأخر رقم إطلاق متوفر.

 3-تعريف قصير .

4-الرخصة .رابط فيه الرخص الحرة المقبولة من فيدورا رابط طبعا أنت غير ملزم بها إذا لم تكن تتحزم بشكل رسمي في فيدورا.

5-الرابط الرسمي للبرنامج .

6-رابط الملف المصدر وممكن  إسم الملف المصدري فقط.

7-هنا ممكن وضع تعريف أطول لاكني إكتفيت بهذا ,ونسيت أن أضع نقطة في أخر الفقرة على عكس Summary كان يجب ان أضع نقطة .




الأن من موقع البرنامج حصلت على الحزم التي يحتاجها ملاحظة إسم الحزم قد يختلف من توزيعة لأخرى ,إذا صح التعبير خاصة بين الدبيانيات والريدهاتيات , إذا كان مذكور فقط أسماء الحزم لدبيان مثلا أو أبونتو ممكن البحث في مدير الحزم عن  شيء قريب منهم وقد يكونو ذات الإسم يعني على حسب على العموم من خلال dnf ممكن إستخدام search و info للتعرف على أسماء الحزم وعملها.

ملاحظة قمت بحذف BuildRequires لأن كما ذكرت سابقا لن نحتاجها لهذا البرنامج .



 اﻷن أمر أو ماكرو autosetup% سيقوم بفك الضغط عن الملف المصدري الذي سيكون موجود في مجلد SOURCES  إلى مجلد BUILD ثم سيقوم بالدخول على مجلد BUILD ثم مجلد بإسم البرنامج زائد علامة ناقص زائد رقم الإصدار أي إفتراضيا سيدخل على مثلا
 home/youcef/rpmbuild/BUILD/linux-tor-browser-installer-0.3 أي أنه سيفترض ان في الملف المصدر المضغوط هناك مجلد بهذا الإسم لاكن الأمر لا يكون هكذا دائما أحيانا يكون بإسم مختلف لهذا ممكن تنزيل الملف المصدري والدخول عليه والتأكد من الإسم إذا لم يكن بصيغة الإسم زائد علامة ناقص زائد رقم الإصدار ممكن إستخدام خيار n- وتحديد الإسم بدقة طبعا لن نحتاج الأمر في هذا الموضوع فقط وضعته كمثل وطبعا هناك خيارات أخرى لن أذكرها الان حتى لا يطول الشرح أكثر.


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

1 و 2 من خلال التعليقات وضحت ما ذكرته سابقا عن فك الضغط عن الملف المصدري و...إلخ

3 و 4 في مرحلة prep% يمكن القيام ببعض التعديلات مثل ترقيع البرامج patch أو حذف شيء إعادة تسمية ...إلخ وهنا أردت إعادة تسمية ملف السكربت من خلال امر mv المعروف للجميع ,كل شيء ممكن أن تكتبه بالترمينال يمكنك ان تكتبه هنا لتنفيذه على العموم {name}% سيتم تعويضها تلقائيا بإسم السكربت المذكور في Name ,لماذا قمت بهذا وهل يمكن كتابة إسم البرنامج بشكل مباشر ؟ الجواب هكذا أفضل في حال قمت لاحقا بتغير إسم السكربت يكفي أن أغيره في Name ونعم ممكن كتابة الإسم بشكل مباشر.

ملاحظة بما أن السكربت سيعمل على أي معمارية أضفت سطر BuildArch: noarch و {version}% سيتم تعويضها برقم الإصدار الموجود في Version .



مرحلة install% .
الأن كما ذكرت سابقا سيتم في مجلد BUILDROOT إنشاء شيء مثل محاكي لشجرة الملفات في لينكس ثم سأقوم بنقل الملفات إلى مكانها الصحيح في هذا المحاكي .

1 و 2 للتأكد أني لا أعمل على شيء موجود مسبقا سيقوم هذا الأمر بحذف المجلد الذي بداخله المحاكي إن وجد.

3 و 4 داخل هذا المحاكي قمت من خلال أمر mkdir بإنشاء مجلد usr/bin/ ال {bindir_}% ستعوض ب usr/bin/ بالمناسبة كان بإمكاني بكل بساطة كتابة usr/bin/ إلى جانب {buildroot}% .

5 و 6 من خلال أمر install وهو شيء ممكن إستخدامه من خلال الترمينال بشكل عادي أي أنه ليس شيء خاص بالتحزيم بشكل حصري بل هو أمر مثل أمر cp لاكن ممكن النقل وتحديد الصلاحيات نلاحظ صلاحيات 755 (لا ننسى اننا داخل المجلد الذي يحتوي الكود المصدري بعد فك الضغط عنه ) .




مرحلة files%  .

1 و 2 هذه ماكرو خاصة ستنقل ملفات الوثائق و ملف الرخصة إلى مكانها الصحيح وهي ماكرو توفر الكثير من الجهد يكفي ذكر أسمائهم لا ننسى أن هذه الملفات موجودة مع الكود المصدر .

3 و 4 نصرح أن هناك ملف بهذا المسار لا ننسى ان {name}% سيتم تعويضها بإسم السكربت الموجود في Name و {bindir_}% سيتم تعويضها ب usr/bin/ طبعا أيضا كان بالإمكان كتابة المسار بشكل مباشر .


5-وضعت تعليق أني قمت بتحزيم الأولي لفيدورا 27 طبعا هذا تعليق للمحزم يمكننا أن نضع ما نراه مناسب لاكن الأفضل ان يدل على المضمون .






 عملية التحزيم سبق وذكرتها في المواضيع التي وضعت رابطها أول هذا الموضوع .


 في حال تثبيت هذه الحزمة هذه هي الملفات ومساراتها نلاحظ ملفات ال doc أي الوثائق مثل ملف README  و ملف الرخصة كيف تم إعداداهم ونقلهم إلى مكانهم الصحيح من دون تدخل منا ونلاحظ مسار السكربت في usr/bin/ .




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





أخر ملاحظات :


الافضل تثبيت برنامج rpmlint ثم من خلاله نقوم بتفحص ملف spec قبل علمية التحزيم وتفحص الحزم النهائية بعد عملية التحزيم يمكننا تجاهل الملاحظات التي تظهر لاكن ما يهمنا عدم وجود أخطاء errors.

sudo dnf install rpmlint

rpmlint ~/rpmbuild/SPECS/linux-tor-browser-installer.spec

rpmlint ~/rpmbuild/SRPMS/linux-tor-browser-installer-0.3-1.fc27.src.rpm

rpmlint ~/rpmbuild/RPMS/noarch/linux-tor-browser-installer-0.3-1.fc27.noarch.rpm 







يمكننا ان نعرف ماهي هذه الماكرو من خلال شيء كهذا أظن سبق وذكرت الامر في المواضيع القديمة لاكن لا بأس أن أعيد ذكرها .





في حال قمنا بتغير الإصدار أو رقم الإطلاق الأفضل أن نضيف تعليق جديد يذكر بشكل موجز ماهي التغيرات وإسم المحزم وبريده و التاريخ ممكن تسهيل الأمر مثلا من خلال هذا الأمر وضعت إسمي وبريدي و تعليق صغير يشرح مثلا أن هذا التعديل لإصلاح علة وهذا رقم العلة على http://bugzilla.redhat.com طبعا هذا إذا كانت تحزم بشكل رسمي في مشروع فيدورا لاكن لا بأس من ذكر بعض هذه الأشياء هناك الكثير من الشروط لتقبل منها مثلا إسم الحزمة وسياسة فيدورا من حبث البرمجيات الحرة والكثير من التفاصيل المذكروة بالتفصيل في وثائق فيدورا .

rpmdev-bumpspec --userstring "youcef sourani <youssef.m.sourani@gmail.com>" --comment "Release 2 Fix Bug #4565" linux-tor-browser-installer.spec





أخيرا أمر rpmbuild ليس هو الوحيد المستخدم لبناء الحزم هناك أشياء أخرى أكثر تقدما مثل mock وغيره ,لهذا في الأدوات الأخرى قد تختلف الأمور قليلا مثل أماكن المجلدات مثل SOURCES  و BUILDROOT و...إلخ لاكن مبدأ التحزيم واحد وقد تختلف بعض التفاصيل الصغيرة من توزيعة لأخرة مثلا في Mageia لا يوجد ماكرو {dist}% يوجد شيء مشابه نسيته بالتحدد لاكن يعوض بشيء كهذا magi5 mag6 أو شيء كهذا بدل f26 f27  الخاصة بفيدورا ...إلخ  وبالإضافة لأمر rpmbuild قد يكون لكل توزيعة اداة خاصة  إضافية  لاكن كما ذكرت المبدأ هو هو .

شارك الموضوع

مواضيع ذات صلة

التسميات

2016 (1) 23 (1) 24 (3) 25 (1) 26 (1) 27 (1) 28 (1) 29 (1) 30 (1) 31 (1) إتصال (1) إختراق (2) أدة (1) أدوات (1) إرسال (1) أرش (1) إسترجاع (1) إستعلام (1) أشياء (7) أشياء تفعلها (8) إصدارات (1) إصلاح (6) إصلاحrealtek (1) إضافات (1) إضافة (1) أعجوبة (1) أعجوية (1) إعداد (1) إقاف (2) أقسام (1) ألعاب (2) الفرق (1) الفلاشة (1) القسم هوم (1) الكتابة بالعربية (1) إلى جانب (1) أندرويد (1) إنشاء (1) إنشاء مستودع (1) أيات (1) أيزو (1) أيقومات (1) أيقونات (1) ايقونات (2) باتش (1) بارامتر (1) بايثون (16) برامج (56) برامج إسلامية (2) برنامج (19) برودباند (1) بعد (7) بعد التثبيت (8) بلوتوث (1) بناء (1) بناء توزيعة (1) بيئة عمل (1) تثبيت (29) تجهيز (2) تجهيو من دون (2) تحزيم (2) تحقق (1) تحويل (1) تخصيص (5) ترجمة (2) ترقية (1) تسجيل الشاشة (1) تشغيل (3) تعريف (13) تعطيل (2) تعلم (6) تفعلها (7) تفعيل (2) تقطع الأحرف (1) تقعيل (1) تنزيل (2) تورنت (1) توزيعة (1) توسعة (1) ثيم (5) ثيمات (1) جافا (1) جماليات (7) جنوم (1) حجم (1) حرق (2) حزمة (1) حل (2) دالة (1) دورة (1) روتر (1) ريدهات (2) سكربت (2) شرح (11) صورة متحركة (1) فايرفوكس (1) فتح منفذ (1) فصل (1) فلاشة (3) فيدورا (29) فيدورا بالعربي (1) قاموس (1) كالي (2) كتاب (2) كتب (2) كرت (1) كروت الشاشة (1) كلمة المرور (2) كورس (1) كورورا (1) لعبة (1) لينكس (2) لينكسو (1) ماهو (6) متغير البيئة (1) مجانا (1) محاكات (2) محاكي (1) محمل الإقلاع إصلاح (1) محمول (1) مستودعات (1) مشكلة (2) ملف نصي (1) من إصدار (1) نظام ملفات (1) نمط (2) نواة (1) هجين (4) واجهات (1) وايرلس (1) وهمي (2) ويندوز (2) access token (1) active (2) add (1) after (7) alias (1) andoid studio (1) android (2) android studio (1) Apache (2) appstream (1) arboot (1) arboot fix (1) arch (3) archiso (1) arfedoraccframework (3) arfedoracontrolcenter (3) arfedy (1) atari (1) atom (1) ayat (1) bicon (1) blivet (1) blivet-gui (1) bls (1) bluetooth (1) book (2) books (2) bootloader fix (1) boxes (3) broadband (1) broadcom (1) broadwayd (1) bugzilla (1) build (2) builddep (1) bumblebee (1) bumbleebe (2) burn (2) byzanz (1) c# (1) calamares (1) camera (1) cannot open display (1) cannot open display: :0 (1) ccna (1) cd (2) centos (1) change (2) chsh (1) cisco (1) clion (1) clone (1) code.org (1) command (2) command line (2) commands (2) comps (1) connect (1) contra (1) convert (1) copr (1) could not connect to the debugger (1) cpu (1) cpufreq (1) createrepo (1) csharp (1) css (1) curlew (1) custom (2) dbus (3) dconf (1) dd (1) Decryption (1) defragment (2) desktop (1) desktop entry (1) dictionary (1) Digital signature (1) disks (1) dnf (14) do (7) docker (1) dolphine (1) download (2) downloads manager (1) dply (1) DRI PRIME (1) driver (9) dukto (1) e2fsck (1) efi (4) el forkane (1) elforkane (1) elif (1) emergency (3) emergency mode (3) emulator (1) enable (2) Encryption (1) entries (1) error mounting /dev/sd (1) ext4 (1) extend (1) extensions (2) fakenes (1) fast startup (2) fceux (1) fedora (45) fedora 25 alpha (1) fedora cloude (1) fedora28 (1) fedoraوفيدورا (1) fedy (1) fgmac (2) fgmac-24 (1) file (1) find (1) firefox (2) fix (10) flash mem (1) flash memory (2) flashplayer (1) flatpak (4) forward (1) fpaste (1) free (1) freebsd (1) freevpn (1) function (1) game (3) games (2) gedit (1) genymotion (1) gettext (1) gif (1) gimp (1) gio (1) github (5) github.io (1) glibc-common (1) gmaclinux (2) gnome (16) gnome boxes (1) gnome disk (1) gnome shell (13) gnome terminal (1) gnome-disks (1) gnu (1) godot (1) goldendict (1) google web designer (1) gpg (2) gradio (1) group (2) grub (7) grub2 (1) grubenv (1) gstreamer (1) gtk (8) gtk+ (1) gvrecord (1) hack (2) hash (4) hdmi (3) hibernate (1) home (2) hosspot (1) html (1) http (1) hybrid (2) icon (2) icons (3) ide (1) if (1) install (32) installf (9) installing (7) intellij idea (1) internet downlaod manager (1) iso (2) java (3) jdk (2) jetbrains (1) jetbrains toolbox (1) kali (2) kde (3) kernel (1) kernel parameters (1) key (1) kickstarts (3) korora (1) krita (1) kvm (2) kvm switches (1) lamp (1) laps (1) learn (1) legacy (1) legacy bios (3) libreoffice (2) libvirt (1) life is trange (1) linux (8) lutris (1) lv (1) lvm (2) mac (4) macros (1) mageia (1) make distro (1) mariadb (1) MariaDB and PHP Lamp Server (1) markdown (2) mate terminal (1) mbr (1) md5sum (1) mirro (1) mkconfig (1) mo (1) mono (2) monodevelop (2) mount (1) mp4 (1) multi screen (1) mumble (1) murmur (1) natron (1) nautilus (2) nes (1) netbeans (1) netcut (1) nintendo (1) ntfs (2) nvidia (8) objdesktop (1) ojuba (2) oop (1) opensuse (1) openvpn (1) opera (1) optirun (2) oracle (1) os.path (1) package (2) page (1) pages (1) pantheon (1) parameter (1) parameters (1) password (2) patch (1) path (2) pdf (1) peek (1) photoshop (1) php (1) phpstorm (1) plasma (2) plugin (3) plugins (1) plymouth (1) po (1) polkit (1) port (1) portable (1) portmatp (1) PostinstallerF (1) pot (1) powerline (2) powerline-go (1) preset (1) preview (1) primary display (1) primeos (1) primus (1) primusrun (1) private key (1) programs (3) protonvpn (1) pubg (1) public key (1) put (1) pv (1) pycharm (2) pygobject (4) pygtk (5) python (56) pythonk (1) qdbus (1) qemu (3) qemu-kvm (1) query (1) radio (1) raspberry pi (4) raspbian (2) reclaim space (2) record (1) redhat (3) remix (1) remix os (1) repo (4) repofrompath (1) repository (1) reset (1) resize2fs (1) rhel (1) router (1) rpm (7) rpmbuild (1) rtl8188ee (1) rtl8192c (1) rtl8192ce (1) rtl8192cu (1) rtl8192de (1) rtl8192ee (1) rtl8192se (1) rtl8723ae (1) rtl8723be (1) rtl8723com (1) rtl8821ae (1) rubymine (1) salix (1) scratch (2) scratch2.scratch 2 (1) screencast (1) script (2) seconday display (1) self (1) send (1) server (1) settings (2) sha1256sym (1) sha256sum (1) share desktop (1) shell (2) shortcut (1) shutter (1) skel (1) skel ماهو (1) skype (1) skype.برامج (1) slackware (1) software (1) soundcloud (1) source code (1) spec (2) spin (1) sqlmap (1) ssh (3) sshd (2) st-trans (1) steam (2) store (1) su (1) sudo (2) sudoers (1) swap (2) switch (2) Switchable Graphics (1) synergy (1) systemd (1) systemd preset (1) teamviewer (1) terminal (2) theme (5) things (7) thomson (1) thread (2) threading (2) thumbnails (1) to (8) tor (2) tor browser (1) torrent (1) transfer closed with 736700 bytes remaining to read (1) translation (1) turn off (2) tuxcut (1) txt (1) ubuntu (1) uefi (5) unable to mount location (1) unity (1) unity3d (1) upgrade (1) usb (1) useradd (2) utf-8 (1) vega (1) verify (1) vg (1) vgaوتبديل (1) vi (1) video (1) vim (1) vino (1) virsh (1) virt-install (1) virt-manger (1) virtual (1) virtual box (1) virtualbox (3) vmware (3) vnc server (1) vokoscreen (1) vpn (1) web server (1) webstorm (1) wifi (1) windows (4) windows-1256 (1) wine (1) woeusb (1) X Error: BadAccess (1) X Error: BadDrawable (1) xdg-mime (1) xdman (1) xfce (1) xfconf-query (1) yum (2) zeal (1) zealdocs (1)