Git Bundle’s

في إحدى المرات طُلب مني تثبيت نظام يجري تطويره لاحدى الشركات في خادم غير متصل بالانترنت (لإسباب امنيه).

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

  1. لايوجد سجل للتغييرات وفي حالة حدوث خطاء فادح لا يمكن الرجوع الى اقرب نسخه مستقره.
  2. نقل الملفات التي تم تحديثها طريقه غير عمليه ولايمكن الاعتماد عليها لما تسببه من اخطاء في حالة نسيان احدى الملفات.
  3. نقل المشروع بالكامل في كل مره يتم تحديثه يتطلب وقت اطول لنقله وإعداده.

ولحسن الحظ فإن Git توفر حل لمثل هذه الحالات وهو الامر bundle

مايقوم به الامر السابق هو تحزيم كامل للمشروع مع ما يحتويه من tags,history,branches في ملف قابل للنقل والاستخدام كما لو كنت تتعامل مع خادم Git.

إنشاء حزمه جديده

لإنشاء حزمه من المشروع الحالي بالامر التالي

git bundle create project.git master development

سيقوم الامر السابق بإنشاء حزمه للمشروع للفرعين master و development.

ولإنشاء حزمه لجميع الفروع مرر الخيار all كالتالي

git bundle create project.git --all

سينتج ملف بأسم project.git قابل للنقل.

يٌفضل إنشاء tag لتعليم اخر نسخه قُمت بتحزيمها بالامر التالي

git tag v0.1.5-alpha

ولإستيراد الحزمه نفذ الامر التالي

git clone project.git project

سيقوم الامر السابق بإستيراد المشروع في المجلد project. ويمكنك التعامل مع المشروع كما لو كنت تتعامل مع خادم Git.

وعند تنفيذ الامر git remote -v . سيعرض لي المصادر التي يعتمد عليها المشروع كالتالي

origin	/home/USER/lab/git/test/project.git (fetch)
origin	/home/USER/lab/git/test/project.git (push)

في المره القادمه عند إنشاء حزمه جديده للمشروع ضعها في المسار/home/USER/lab/git/test/project.git.

عند وجود تحديثات جديده, امامنا خيارين

  1. إعادة تحزيم المشروع من جديد (إذا كانت تعديلاتك معقده وفي عدة فروع).
  2. إنشاء Patch (إذا كانت تعديلاتك مقتصره على فرع واحد وتحتوي على عدة commits).

إعادة تحزيم المشروع

بما ان v0.1.5-alpha هو اخر tag قُمت بإنشائه. سأنفذ الامر التالي

git bundle create project.git v0.1.5-alpha..master --since=3.days.ago development

والذي بدوره سيقوم بتحزيم

  • التعديلات التي طرئت في الفرع master منذ إنشاء v0.1.5-alpha حتى اخر تعديل
  • التعديلات التي طرئت على الفرع development خلال اخر 3 ايام.

وانقل الملف الى المسار المطلوب.

وللتاكد من صلاحية الملف وتوافقه مع المشروع الحالي نفذ الامر التالي

git bundle verify /home/USER/lab/git/test/project.git

ثم git pull لسحب اخر التعديلات .

يتبع Git Patch

Aria2

اذا كُنت حديث الانتقال من نظام Windows الى Linux فأنت غالباً تبحث عن بديل لبرنامج IDM وهناك بديل فعال وقوي له وهي اداة Aria2 وهي اداة غنيه عن التعريف مع مزايا لاتتوفر في IDM والاهم انها مجانيه.

بعض من مزاياها بأختصار

  1. تتدعم تعدد الـ Threads
  2. تدعم التنزيل من عدة بروتوكولات منها HTTP/S , FTP ,SFTP,BitTorrent
  3. تدعم تنزيل عدة ملفات من عدة مصادر وبروتوكولات في أنً واحد
  4. يمكن التعامل مع Aria2 من الطرفيه او عن طريق المتصفح او عن طريق الواجهة الرسوميه
  5. تعمل على عدة أنظمة تشغيل Linux ,Windows,macOS,Android الخ

وسأقوم بتغطية التعامل مع Aria2 عبر الطرفيه

اولاً تثبيت Aria2 في توزيعة فيدورا

sudo dnf install aria2

والتعامل مع Aria2 سيكون عبر الأمر

aria2c

لتنزيل ملف سيكون الأمر كالتالي

aria2c http://speedtest.xs4all.net/files/10mb.bin

لتنزيل عدة ملفات

aria2c http://speedtest.xs4all.net/files/10mb.bin http://speedtest.xs4all.net/files/25MB.bin

لتنزيل ملف من عدة مصادر

aria2c http://speedtest.xs4all.net/files/10mb.bin https://mirror.nforce.com/pub/speedtests/10mb.bin

ستقوم Aria2 بتنزيل الملف 10mb.bin من الخادمين في أنً واحد وسيتم توزيع الحمل عليهما


عند تنزيل ملف سيتم حفظه في نفس مجلد العمل بشكل افتراضي ولتحديد مجلد حفظ الملفات قم بتمرير الخيار dir

aria2c --dir=/tmp/ http://speedtest.xs4all.net/files/10mb.bin

لحفظ الملف بأسم مختلف قم بتمرير الخيار out

aria2c --dir=/tmp/ --out=test.bin http://speedtest.xs4all.net/files/10mb.bin

لتنزيل عدة ملفات في أنً واحد , قم بوضعهم جميعاً في ملف نصي. كل رابط في سطر كالاتي

  • إذا اردت تنزيل ملف من عدة مصادر ضع روابط الملف في نفس السطر وافصل بينهم بفراغ كما في السطر الاول
  • اذا اردت تمرير خيارات مختلفه لكل ملف قم بوضع كل خيار في سطر جديد يلي الرابط مثل السطر ال 2 و 3 سيتم حفظ الملف في مجلد /tmp/

وفي الاسطر 4 ,5 ,6 سيتم حفظ الملف بأسم test.bin في مجلد /tmp/downloads/


لتحديد عدد الملفات المراد تنزيلهم كل مره, قم بتمرير الخيار max-concurrent-downloads

aria2c --max-concurrent-downloads=2 http://speedtest.xs4all.net/files/10mb.bin http://speedtest.xs4all.net/files/25MB.bin https://speed.hetzner.de/100MB.bin

ستقوم Aria2 بتنزيل عدد 2 ملفات في آنً واحد


دائماً مايحدث إنقطاع في الإتصال اثناء التنزيل , ولمواصلة تنزيل الملف قم بتمرير الخيار continue

aria2c --continue http://speedtest.xs4all.net/files/10mb.bin

في حالة إنقطع الاتصال اعد تنفيذ الامر وسيتم مواصلة التنزيل


لتحديد عدد الثواني قبل ان تعلن Aria2 فشل الإتصال قم بتمرير الخيار connect-timeout

aria2c --connect-timeout=120 http://speedtest.xs4all.net/files/10mb.bin

ستعلن Aria2 فشل الإتصال بالخادم بعد 120 ثانيه


لتحديد عدد الثواني قبل ان تعلن Aria2 فشل تنزيل الملف قم بتمرير الخيار timeout

aria2c --connect-timeout=10 --timeout=90 http://speedtest.xs4all.net/files/10mb.bin

ستعلن Aria2 فشل الإتصال بالخادم بعد مرور 10 ثواني , وفي حالة نجح الإتصال ستعلن Aria2 فشل تنزيل الملف بعد مرور 90 ثانيه


لتحديد عدد الإتصالات لكل ملف يتم تنزيله قم بتمرير الخيار max-connection-per-server

aria2c --max-concurrent-downloads=2 --max-connection-per-server=8 http://speedtest.xs4all.net/files/10mb.bin http://speedtest.xs4all.net/files/25MB.bin

ستقوم Aria2 بأنشاء 8 إتصالات لكل ملف , وهنا ستقوم بإنشاء 16 إتصال لعدد 2 ملفات يجري تنزيلهم في آنً واحد


عند تنزيل ملف تقوم Aria2 بتقسيم الملف الى عدة اجزاء وحجم كل جزاء بشكل افتراضي 20MB وذلك يؤثر على عدد الاتصالات , فإذا كان حجم الملف المراد تنزيله 10MB وقد وضعت عدد الاتصالات 8 فسيتم انشاء اتصال واحد لان حجم الملف اصغر من اقل جزاء للتقسيم.

ولتحديد اقل جزاء للتقسيم قم بتمرير الخيار min-split-size

aria2c --max-concurrent-downloads=2 --max-connection-per-server=8 --min-split-size=1M http://speedtest.xs4all.net/files/10mb.bin http://speedtest.xs4all.net/files/25MB.bin

يمكنك استخدام K للاشارة الى Kilobyte او M للاشارة الى Megabyte


لتحديد عدد مرات إعادة الإتصال بعد فشله قم بتمرير الخيار max-tries

aria2c --max-tries=10 http://speedtest.xs4all.net/files/10mb.bin

ستقوم Aria2 بإعادة المحاولة 10 مرات , وفي حالة الفشل ستقوم بتنزيل الملف التالي او الخروج


لتحديد وقت الإنتظار قبل كل محاوله قم بتمرير الخيار retry-wait

aria2c --max-tries=10 --retry-wait=3 http://speedtest.xs4all.net/files/10mb.bin

ستقوم Aria2 بإعادة المحاوله 10 مرات , والإنتظار 3 ثواني كل مره


في حالة اردت التحقق من صحة الملف بعد التنزيل قم بتمرير الخيار checksum يحتوي على نوع الهاش بالإضافه للهاش كالاتي

aria2c --checksum=sha-256=bd5c9ee34b7698eb0852a320da4fbdf616222a493d99f6054aa96afa96207bfb http://mirror.0x.sg/fedora/linux/releases/28/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-28-1.1.iso

في حالة نجح التحقق ستكون حالة الخروج = 0 ,وفي حالة فشل التحقق ستكون حالة الخروج = 32

يمكن التحقق من حالة الخروج عبر طباعة المتغير $?

تحتوي Aria2 على عدة احداث يتم تنفيذهم في اوقات معينه ومنهم

  • on-download-pause يتم تنفيذه عند إيقاف التنزيل من قبل المستخدم
  • on-download-complete يتم تنفيذه عند إنتهاء التنزيل
  • on-download-start يتم تنفيذه عند بداء التنزيل
  • on-download-error يتم تنفيذه عند حدوث خطاء
  • on-download-stop يتم تنفيذه عند توقف التنزيل بشكل عرضي

فإذا اردت إيقاف تشغيل الحاسوب بعد إنتهاء التنزيل سيكون الأمر كالأتي

aria2c --on-download-complete=shutdown http://speedtest.xs4all.net/files/10mb.bin

ولتنفيذ عدة اوامر او تمرير عدة خيارات للامر المنفذ في الحدث , قم بحفظ الأمر في ملف bash واستدعي الملف بنفس الطريقه


ولتفادي اعادة كتابة الخيارات في كل مره تقوم بتنزيل ملف قم بحفظ الخيارات في ملف aria2.conf (بدون -- في البدايه)

واحفظ الملف في المسار

$HOME/.aria2/

لماذا الثعلب الناري؟

كثيرا ماتلقى هذا السؤال!

لماذا Firefox ، مالمميز؟ متصفح Chrome هو الاسرع!حسنا سؤالك بهذا الشكل يشعرني بأن Firefox وليد الامس.

فمتصفح Firefox تم اطلاقه لاول مره في الربع الاخير لسنة 2002 والذي تقوم بتطويره مؤسسة Mozilla (مؤسسه غير ربحيه) والتي تسعى لجعل الانترنت امن. بعكس متصفح Chrome والذي اُطلق في الربع الاخير لسنة 2008 والتي تقوم بتطويره شركة Google والتي تهدف بشكل اساسي لجمع بيانات المستخدمين لبيع اعلانات عالية الجوده لعملائها.

بعيدا عن مسألة الولاء. لدي عدة اسباب.

  • انا اهتم لخصوصياتي وFirefox يحمي بياناتي, بينما متصفح Chrome يقوم بمشاركة كل انشطتك مع Google.
  • Firefox يسمح لي بتخصيصه لاقصى درجة كتعطيل خاصية WebRTC والتي تسمح بتخطي الVPN + Proxy ويسمح بتسريب IP الشبكة المحلية لجهاز المستخدم، نعم يمكنك تعطيلها في Chrome لكنك ستحتاج لتثبيت اضافه خارجيه, لكن هل ستبقى تلك الاضافه مدعومة في الاصدارات القادمه؟ ماذا عن Battery status , Clipboard events؟
  • Firefox يسمح لي بتعطل الاجزاء في المواقع والتي تقوم بتتبع تصفحي بينما Chrome فلا ، ويجب علي تثبيت اضافة AdBlock
  • Firefox سلس وسريع وخفيف على الجهاز ، بينما Chrome لايكاد يكفيه اي مقدار من الذاكره العشوائيه.
  • وكشخص اقوم بفتح مئات الالسنه Firefox يتوفر على شريط تمرير للالسنه وذلك لترك فسحه لكل لسان لاتمكن من قراءة بداية العنوان ومعرفة اي لسان اود الانتقال اليه ، بينما متصفح Chrome لن تتمكن من رؤية شيئ.
  • كمستخدم انترنت فانت تستخدم منتجات قوقل ، كمحرك بحث قوقل واليوتيوب. اذا قمت باستخدم متصفح Chrome فبلا ادنى شك ستلاحظ السرعه الخارقه في تحميل منتجات قوقل (وهذا ماسيجعلك تظن ان متصفح Chrome هو الاسرع على الاطلاق)، لكن ماذا عن بقية مواقع الانترنت؟ لن تجد تلك السرعه مطلقا.
  • Firefox يوفر اضافه لانشاء حاويات لعزل مواقع من اختيارك عن تتبع نشاطك في الانترنت فإذا كنت احد مستخدمي Facebook فيمكنك انشاء حاويه لعزل نشاطك في الانترنت عن موقع Facebook والذي يتتبع نشاطك لغرض جمع بيانات عنك.
  • اذا قمت بزيارة موقع فغالبا هدفي هو قراءة المحتوى، متصفح Firefox يعرض كل جزاء من الصفحه حالما يتم تحميله (والذي يمكنني من استغلال وقت الانتظار بقراءة ماتم تنزيله) بعكس متصفح Chrome والذي لايعرض الصفحه قبل اتمام تنزيلها بالكامل.
  • عند تحديد جزاء من الصفحه يقوم متصفح Chrome بتحديد فراغات ولا اعلم سببها وهذا امر يثير جنوني. واذا قمت بنسخ النص فسيقوم المتصفح باضافة فراغات في البدايه والنهايه.

اذا كنت احد مستخدمي متصفح Chrome ووصلت الى هنا في القراءه فأليك متصفح Firefox وهنا كيف تزيل متصفح Google Chrome.