إدارة حزم لينكس باستخدام Snaps: حلول متكاملة لتوزيع التطبيقات

دقائق القراءة: 6

مقدمة في إدارة حزم لينكس وتحدياتها

تُعد إدارة البرمجيات وتثبيتها جزءًا حيويًا من مهام مسؤولي أنظمة Linux، لا سيما عند التعامل مع الخوادم البعيدة. ففي كثير من الأحيان، تحتاج إلى دفع تحديثات أو إصلاح مشكلات دون الحاجة إلى التواجد الفعلي أمام الجهاز. بينما يمكن حل العديد من المشكلات عبر Bash scripts، إلا أن هناك حالات لا غنى فيها عن الثنائيات (binaries) التقليدية.

تخيل أن بعض أنظمتك البعيدة تتطلب تثبيت تطبيقات جديدة لتمكين أعضاء الفريق من أداء وظائف عمل معينة. هنا، يمكن للاستفادة من تكامل وأتمتة أحد أنظمة مستودعات Linux الرئيسية – مثل Debian أو RPM – أن يُسهّل مهام الإدارة بشكل كبير. في هذا المقال، سنستكشف نظامًا حديثًا ومستقلًا لإدارة الحزم يُدعى Snap.

كما يُذكرنا Linus Torvalds باستمرار، تكمن مشكلة العديد من أنظمة إدارة برمجيات Linux في كثرتها المفرطة. لقد أصبح تطوير التطبيقات وحتى اعتماد Linux أكثر تعقيدًا على مر السنين. فالوقت والجهد الذي تستثمره في إعداد برمجياتك لمستودعات Debian، على سبيل المثال، لن يفيدك إذا كنت ترغب في إدخالها إلى أنظمة RPM. ولن يساعد أي منهما في مدير SUSE المسمى zypper.

يُقدم حل واعد لمشكلة «عزل البرمجيات» (software silo problem) في توزيع التطبيقات مع بيئاتها المستقلة التي ستعمل على أي توزيعة Linux. المعياران الرئيسيان في هذا المجال الناشئ والمتنامي هما AppImage و snap. سنبدأ باستكشاف Snaps.

العمل مع نظام Snaps: بيئات مستقلة للتطبيقات

يقوم نظام snap – تحت إشراف شركة Canonical، الراعية لتوزيعة Ubuntu – بتثبيت كل تطبيق على نظامك ضمن قسمه الافتراضي الخاص. صحيح أن هذه الأقسام الحلقية (loop partitions) تُحدث بعض الفوضى في مخرجات أمر df، لكنها تمثل أيضًا نهجًا منطقيًا لتوزيع إصدار واحد من البرمجيات عبر جميع تثبيتات Linux.

$ df
Filesystem     1K-blocks      Used Available Use% Mounted on
udev             7101884         0   7101884   0% /dev
tmpfs            1432092      3936   1428156   1% /run
/dev/sda2      479152840 183520724 271222724  41% /
tmpfs            7160452    329336   6831116   5% /dev/shm
tmpfs               5120         4      5116   1% /run/lock
tmpfs            7160452         0   7160452   0% /sys/fs/cgroup
/dev/loop2           384       384         0 100% /snap/gnome-characters/539
/dev/loop4         56320     56320         0 100% /snap/core18/1705
/dev/loop5         56320     56320         0 100% /snap/core18/1754
/dev/loop3        145664    145664         0 100% /snap/slack/23
/dev/loop0          2560      2560         0 100% /snap/gnome-calculator/730
/dev/loop6         15360     15360         0 100% /snap/aws-cli/130
[...]
/dev/loop21       521216    521216         0 100% /snap/onlyoffice-desktopeditors/38
/dev/loop22       145664    145664         0 100% /snap/slack/22
/dev/loop23       185472    185472         0 100% /snap/spotify/36
/dev/loop25        96128     96128         0 100% /snap/core/8935
/dev/loop26       319104    319104         0 100% /snap/onlyoffice-desktopeditors/43
/dev/loop27         1152      1152         0 100% /snap/drawing/16
/dev/loop24        56192     56192         0 100% /snap/gtk-common-themes/1502
/dev/loop31         2560      2560         0 100% /snap/gnome-calculator/748
/dev/sda1         523248      6152    517096   2% /boot/efi
tmpfs            1432088        12   1432076   1% /run/user/121
tmpfs                100         0       100   0% /var/lib/lxd/shmounts
tmpfs                100         0       100   0% /var/lib/lxd/devlxd
tmpfs            1432088        68   1432020   1% /run/user/1000

تعبئة تطبيق GitHub كـ Snap

في هذا العرض التوضيحي، سنوضح لك كيفية تعبئة تطبيق يستند إلى GitHub كـ snap. نظريًا، بهذه الحزمة، ستتمكن من إرسالها إلى متجر snap الرسمي، حيث ستكون متاحة مجانًا لأي شخص في العالم إذا تم قبولها. على الرغم من وجود أدلة إرشادية ممتازة على موقع snapcraft.io، والتي توجهك خطوة بخطوة، إلا أننا سنتناول العملية عبر سطر الأوامر لضمان فهم أعمق.

المتطلبات الأساسية: Multipass و Snapcraft

للبدء، ستحتاج أولاً إلى التأكد من تثبيت مدير الأجهزة الافتراضية Multipass بشكل صحيح، حيث يستخدمه snap لإنشاء الأجهزة الافتراضية التي سيتم بناء الصور فيها. بالطبع، Multipass نفسه متاح كـ snap. وبالمثل، ستحتاج إلى حزمة snapcraft. بعد تثبيت snapcraft، يجب عليك تشغيل الأمر hash -r لتحديث قائمة الأماكن التي سيبحث فيها الـ shell الخاص بك عن البرامج المعروفة.

$ sudo snap install multipass --classic
$ sudo snap install snapcraft --classic
$ hash -r

إعداد المشروع وتعديل ملف YAML

بما أننا اخترنا Python كلغة للمثال، فقد قمنا بالاستعانة بمشروع Python مفتوح المصدر للنسخ الاحتياطي للبريد الإلكتروني يُدعى OfflineIMAP من موقع GitHub. يمكنك بالطبع استبدال هذا المشروع بمشروعك الخاص. بعد استنساخ المشروع محليًا، سننتقل إلى دليل offlineimap الجديد. بعد ذلك، سنستخدم wget لتنزيل الإصدار الخاص بلغة Python من ملف التكوين YAML. بما أن هناك بالفعل ملفًا بهذا الاسم في الدليل، سيحصل هذا الملف على اسم بديل، لذا سنقوم ببساطة بالكتابة فوق النسخة القديمة عن طريق تغيير اسم الملف الجديد. ثم سنفتح الملف ونحرر الأماكن الثلاثة التي تظهر فيها كلمة "name" بين قوسين معقوفين، وسنستبدلها بالاسم الذي نود استخدامه فعليًا.

$ git clone https://github.com/snapcraft-docs/offlineimap
$ cd offlineimap
$ wget https://snapcraft.io/first-snap/python/snapcraft.yaml

عملية التعبئة والتثبيت المحلي

من هنا، سيتولى تشغيل أمر snapcraft عملية التعبئة. يمكن أن تكون هذه العملية طويلة، خاصة إذا كانت هناك برمجيات تحتاجها – مثل Multipass – لم يتم تثبيتها وإعدادها بعد. قد ترى بعض الأخطاء، ولكن من المرجح أن يقوم نص التثبيت بإصلاحها تلقائيًا أثناء التنفيذ. عندما تنتهي العملية، يمكنك تثبيت الـ snap محليًا باستخدام أمر snap install العادي، ولكن ستحتاج إلى إضافة الخيارين --devmode و --dangerous لأن هذا ليس snap رسميًا ومدعومًا، لذا، من الناحية الفنية، لا أحد يعرف ما قد يحدث عند تشغيله. يمكنك إثبات تثبيته عن طريق تشغيل snap list ثم التأكد من أن كل شيء يعمل عن طريق تشغيل الأمر test-offlineimap-mysnap مع الخيار -h للحصول على شاشة المساعدة.

$ snapcraft
$ sudo snap install --devmode --dangerous *.snap
$ snap list
$ test-offlineimap-mysnap -h

إذا كنت مهتمًا بمعرفة كيفية إدارة snaps ضمن بيئة Linux الخاصة بك، فقد تستمتع أيضًا بمقالات أخرى مثل: "كيفية إدارة Ubuntu Snaps: الأشياء التي لا يخبرك بها أحد" و "snapd يجعل إدارة Nextcloud سهلة".

التعامل مع مديري الحزم البديلة: Flatpak و AppImages

لقد ألقينا نظرة جيدة على snaps، ولكن ربما حان الوقت للاعتراف بأننا أغفلنا بعض اللاعبين الكبار الآخرين في عالم مديري الحزم البديلة، ولا سيما Flatpak و AppImages. بينما نناقش AppImages بعمق في مقالات أخرى، فإن كلمة سريعة أو اثنتين عن Flatpak لن تكون في غير محلها هنا.

الهدف الأساسي لـ Flatpak هو السماح للمطورين ببناء تطبيقاتهم في حزمة واحدة ثم توزيعها على أي توزيعة Linux. كمستخدم نهائي، ستقوم بتثبيت نظام Flatpak باستخدام مدير البرامج العادي الخاص بك – مثل Apt على Ubuntu أو Yum على CentOS. يتم تثبيت Flatpak افتراضيًا على Fedora. من هناك، تصبح الأمور سهلة للغاية.

هل يحل Flatpak جميع المشكلات الصحيحة؟ ربما. لقد كان هناك بعض الانتقادات الأخيرة حول نقاط ضعف أمنية محتملة (ومهمة) في التصميم الأساسي لـ Flatpak. سأترك لك القرار بنفسك.

الخلاصة التقنية

يمثل نظام Snap قفزة نوعية في حل تحديات إدارة الحزم في بيئات Linux المتنوعة. من خلال توفير بيئات معزولة ومكتفية ذاتيًا، يقلل Snap من تعقيدات التبعيات ويضمن توافق التطبيقات عبر التوزيعات المختلفة. بينما قد تثير الأقسام الحلقية (loop partitions) بعض التساؤلات حول استخدام مساحة القرص، فإن الفوائد من حيث سهولة التوزيع والتحديث والأمان تفوق هذه الاعتبارات. إنه حل قوي للمطورين الذين يسعون لنشر تطبيقاتهم على نطاق واسع، وللمسؤولين الذين يطمحون إلى تبسيط عمليات الصيانة والتحديث.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *