به نام خدا
قبل از نوشتن این مطلب داشتم فکر میکردم که چجوری به ساده ترین شکل ممکن و بدون پیچیدگی، اون چیزی که در ذهنم هست رو توضیح بدم :) چون احساس میکنم که یه مقدار وسواس دارم در توضیح مطالب، چون همیشه دوس دارم همه چیز رو خیلی کامل و جامع توضیح بدم، تا حتی کاربران تازه وارد لینوکس هم مطالبم رو بگیرن، پس اگر مطالب رو تکراری گفتم یا زیاده گویی کردم ببخشید :) ، بگذریم :)
در این مقاله (و مقاله های بعدی)، می خوام هر چی رو که درباره پکیج های اسنپ (snap) در اوبونتو یاد گرفتم رو خیلی ساده برای شما هم توضیح بدم، چون درباره پکیج های اسنپ یه مقدار سردرگمی و ابهام برای کاربران ایرانی وجود داره و همچنین در منابع فارسی چیز زیادی در این باره وجود نداره و منابع انگلیسی هم زیاد سر راست و شفاف نوشته نشدن. برای همین من سعی کردم این مطلب رو بنویسم تا بلکه یه مقدار این مطلب رو تونسته باشم انتقال بدم.
همونطور که قبلا در این پست هم مختصری توضیح دادم، روش فعلی نصب نرم افزار در سیستم عامل های لینوکسی به این شکل هست که، توسعه دهندگان، برنامه های خودشون رو مینویسن و سورس نرم افزارشون رو روی اینترنت قرار میدن. حالا سازندگان توزیع های مختلف(مثل اوبونتو و غیره)، میان این سورس ها رو برای توزیع خودشون کامپایل میکنن و سپس پکیج بندی میکنن و روی مخازن (repository) خودشون قرار میدن و سپس ما به عنوان کاربر نهایی میایم و از داخل توزیعی که استفاده میکنیم، توسط نرم افزار پکیج منیجر package manager، با یک دستور ( مثلا دستور sudo apt-get install در اوبونتو )، یک نرم افزار رو به همراه وابستگی هاش (depedency ) نصب میکنیم. البته اگه دیپندنسی داشته باشه (که در اغلب موارد داره).
پس سیستم فعلی نصب نرم افزار در اغلب توزیع های لینوکسی به این شکل هست:
1- هر توزیعی (مثلا اوبونتو)، یک مخزن (repository) داره و سازندگان اون توزیع، میان نرم افزارهای اوپن سورس رو کامپایل میکنن، پکیج بندی میکنن، و روی مخازن قرار میدن
2- کاربران نهایی ( مثل من و شما)، میایم و با استفاده از نرم افزار پکیج منیجر package manager، (که هر توزیعی برای خودش یک پکیج منیجر مستقل داره، برای مثال در توزیع اوبونتو apt پیکیج منیجر هست و در فدورا پکیج منیجر RPM وجود داره)، برنامه مورد نظر خودمون رو نصب میکنیم.
این روش، تقریبا چند سال هست که برای توزیع های مختلف وجود داره اما یک سری ایرادات اساسی داره که من به چند نمونه اشاره میکنم:
1- بزرگترین ایرادی که این روش نصب نرم افزار داره وجود پیکیج های اشتراکی هست. به این مفهوم که نرم افزار های مختلف ممکنه از یک پکیج ( یا لایبرری) بصورت مشترک استفاده کنن. حالا اگه اون پکیج مشترک اپدیت بشه، ممکنه اون دو نرم افزار ( یا یکیشون) به مشکل بربخوره، ممکنه هم به مشکل بر نخوره. ولی ریسکش وجود داره.( بارها برای خود من اتفاق افتاده که پکیج های سیستمم رو اپدیت کردم و سیستم کرش کرده و بوت نشده :) )
2- مشکل بعدی که وجود داره سازندگان نرم افزار، باید بیان برای تک تک توزیع ها پکیج درست بکنن و تست بکنن، چون پکیج های deb که مال اوبونتو هست روی مثلا فدورا کار نمیکنه، چون این دو توزیع پکیج منیجر جداگانه ای دارن، و این کار وقت و انرژی مضاعف میگیره ( فکرش رو بکنید باید برای حداقل 5 یا 6 تا توزیع مهم پکیج درست بکیند، ببینید چقد وقتتون رو میگیره! )
- و مشکلات دیگه ای وجود داره که من بهش اشاره نمیکنم
اما شرکت کانونیکال (سازنده ی توزیع اوبونتو)، اومده و یک نرم افزار پکیج منیجر جدید به نام اسنپی (snappy) درست کرده که علاوه بر حل مشکلات بالا، مزایای دیگه ای هم داره. به طور ساده بخام بگم، تمرکز اسنپی روی این هست که تمام دیپندسی های یک نرم افزار رو به همراهش نصب کنه و دیگه مفهموم پکیج اشتراکی از بین بره. در واقع شرکت کانونیکال میخواد با پکیج منیجر جدیدش، یک انقلابی در نصب نرم افزار ها در سیستم عامل لینوکس بوجود بیاره.
و اما بریم سراغ ساختار و سیستم اسنپی:
خیلی ساده بخوام بگم، اسنپی دو قسمت مهم داره
1- سایت snapcraft.io
2- نرم افزار snapd
و اما این دوتا کارشون چیه:
در واقع سایت بالا به عنوان یک مخزن یا همون repository عمل میکنه. اکه شما یک برنامه اوپن سورس نوشتید و میخاید نرم افزارتون رو بصورت پکیج های اسنپ منتشر کنید، کافیه برید در سایت بالایی ثبت نام کنید و توسط توضیحات و ابزار هایی که در سایت گفته شده، پکیج خودتون رو در اون سایت منتشر بکنید.
و همچنین نرم افزار snapd که همون خود پکیج منیجر هست و توسط اون شما میتونید نرم افزار ها ( که بصورت پکیج های اسنپ snap هستند) رو نصب کنید، حذف کنید، جستجو کنید، اپدیت کنید و خلاصه هر کاری رو با بسته های اسنپ انجام بدید. نرم افزار snapd بصورت پیش فرض روی اوبونتو نصب هست ولی روی سایر توزیع ها باید خودتون نصب بکنید (البته در اینده احتمالا همه ی توزیع ها دیگه برن به سمت پکیج های اسنپ)
و اما میرسیم به مزایای پکیج های اسنپ:
در اینترنت و سایت های مختلف مزایای زیادی برای این پکیج منیجر جدید گفته شده و من الان اونهایی که یادمه رو به شما میگم:
1- اولین و مهمترین مزیتی که پکیج های اسنپ دارن اینه که از لایبرری اشتراکی استفاده نمیکنن، بدین معنی که یک نرم افزار که بصورت اسنپ منتشر میشه تمام فایل ها و لایبرری های مورد نیاز خودش رو داره و در واقع کل نرم افزار داخل یک پکیج اسنپ snap قرار میگیره. این باعث پایداری اپلیکشن ها میشه. چرا؟ چون همونطور که در قسمت معایب پکیج های deb گفتم، اگه یه لایبرری اپدیت بشه، ممکنه با نرم افزار هایی که روی سیستم نصب هستن سازگار نباشه و در نتیحه بعد اپدیت، نرم افزار هایی که به اون لایبرری وابسته هستن ممکنه کرش کنن. ولی در پکیج های اسنپ همچین مشکلی وجود نداره. پیکج های اسنپ یه عیب دارن و اون اینه که چون یک نرم افزار تمام فایل ها و دیپندنسی های خودش رو داخل پکیج اسنپ داره، در نتیجه حجم نرم افزار یه مقدار بالا میره ولی خب الان که هاردای ترابایتی تو بازار هستن این مشکل عمده ای به حساب نمیاد.
2- دومین مزیت عمده ای که نصب نرم افزار بصورت پکیج اسنپ داره اینه که نرم افزار ها میتونن بصورت transactional اپدیت بشن ( این اصطلاحی هست که خارجی ها بکار میبرن). بزارید این اصطلاح ترنزکشنال رو بیشتر توضیح بدم. همونطور که در شماره 1 توضیح دادم، یه نرم افزار اسنپی، تمام فایل ها و دیپندنسی های خودش رو به همراه داره و داخل یک بسته ی snap هست و این بسته روی سیستم کاربر نصب میشه. حالا فرض کنید که توسعه دهنده ی نرم افزار، روی نرم افزارش یه سری تغییرات میده و یک سری فایل هاش رو تغییر میده ( مثلا یه قسمتی از سورس کد نرم افزار رو تغییر میده)، حالا شما وقتی بخاید نرم افزار رو آپدیت کنید، دیگه لازم نیست کل فایل های نرم افزار دوباره دانلود کنید :) ، فقط اون فایل هایی که تغییر کردن دانلود میشن :). نتیجه این میشه که، موقع نصب اولیه نرم افزار، حجم دانلود شما زیاده، ولی موقع اپدیت، حجم اپدیت شما خیلی کم میشه چون همه فایل ها دانلود نمیشن :) خارجی ها به این فرایند میگن transactional update
3- یه مزیت بسیار بسیار بسیار بسیار بسیار بسیار :) مهم و عمده ی دیگه ی سیستم اسنپی که یک انقلابی در سیستم عامل لینوکس بوجود اورده اینه که، سازندگان نرم افزار، فقط کافیه یک بار نرم افزارشون رو بصورت snap منتشر کنن و بعدش میتونن روی تمام توزیع ها نصب و استفاده کنن :) به شرطی که اون توزیع از سیستم snappy پشتیبانی کنه ( ینی نرم افزار snapd رو نصب کرده باشه). همونطور که در بالا و در قسمت معایب پکیج های فعلی ( deb, rpm و غیره) گفتم، پکیجی که برای اوبونتو ساخته میشه روی مثلا فدورا قابل استفاده نیست ولی پکیج snap اینجوری نیست. یبار snap بساز، روی تمام توزیع ها نصب کن و استفاده کن :) چقدر در وقت و انرژی صرفه جویی میشه :). در حال حاضر توزیع های مختلف از جمله اوبونتو، مینت، آرچ، فدورا، جنتو، دبیان و ... از بسته های snap پشتیبانی میکنن.
4- مزیت دیگه ای که نرم افزار های اسنپ دارن اینه که بصورت sandbox اجرا میشن. در نتیجه به کل سیستم شما دسترسی ندارن و این ینی امنیت سیستم شما یه مرحله بالاتر میشه ( در این باره زیاد توضیح نمیدم میتونید در اینتترنت جستجو بکنید )
خب دوستان عزیز، این مقاله ای که نوشتم یه مقاله ی مقدماتی درباره سیستم اسنپی بود. امیدوارم مقاله جامع و در عین حال ساده باشه. اگر سوالی داشتید در قسمت کامنت بپرسید :) یا احیانا در مقاله ایرادی بود به من بگید :).
و همچنین مقاله بعدی که درباره اسنپ استور هست رو ببینید :) اینم لینکش