إدارة حزم لينكس باستخدام Snaps: حلول متكاملة لتوزيع التطبيقات
مقدمة في إدارة حزم لينكس وتحدياتها
تُعد إدارة البرمجيات وتثبيتها جزءًا حيويًا من مهام مسؤولي أنظمة 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) بعض التساؤلات حول استخدام مساحة القرص، فإن الفوائد من حيث سهولة التوزيع والتحديث والأمان تفوق هذه الاعتبارات. إنه حل قوي للمطورين الذين يسعون لنشر تطبيقاتهم على نطاق واسع، وللمسؤولين الذين يطمحون إلى تبسيط عمليات الصيانة والتحديث.