مدیریت بسته Snap اوبونتو
در دروس قبلی استفاده از Advanced Packaging Tool (APT) برای نصب و بهروزرسانی بستههای نرمافزاری در یک سیستم اوبونتو را بررسی کردیم. در سالهای اخیر، یک سیستم مدیریت بسته جدید به نام Snap توسط تیم اوبونتو در Canonical، Ltd در دست توسعه بوده است. اگرچه هیچ برنامه رسمی برای جایگزینی کامل APT با Snap وجود ندارد، لیست بستههایی که اکنون میتوانند بهعنوان «snaps» نصب شوند، در حال رشد است.
هدف این درس معرفی سیستم Snap، برجسته کردن مزایای کلیدی آن نسبت به سیستم APT و تشریح نحوه استفاده از ابزار خط فرمان snap برای نصب و مدیریت بستههای نرمافزاری مبتنی بر Snap است.
مدیریت نرمافزار با Snap
ابزار apt نرمافزاری را نصب میکند که در فایلهای .deb بستهبندی شده است. بستهای که با استفاده از apt نصب میشود، اغلب به بستههای دیگری وابسته است که برای کارکرد باید نصب شوند. در طول نصب، apt این وابستگیهای بسته اضافی را نیز دانلود و نصب میکند. یک برنامه طراحی گرافیکی را در نظر بگیرید که به یک کتابخانه تصویربرداری خاص بستگی دارد. در حین نصب، apt بسته برنامه گرافیکی را علاوه بر بسته حاوی کتابخانهای که به آن بستگی دارد نصب میکند. حال، فرض کنید که کاربر تصمیم دارد ابزار گرافیکی دیگری را نصب کند که به همان کتابخانه گرافیکی نیز متکی است. معمولاً این مشکلی ایجاد نمیکند زیرا برنامهها هر دو کتابخانه یکسانی را به اشتراک میگذارند، اما اگر دو برنامه به نسخههای مختلف کتابخانه متکی باشند ممکن است مشکلاتی رخ دهد. بنابراین، نصب برنامه دوم ممکن است مانع از کارکرد صحیح برنامه اول شود. یکی دیگر از محدودیتهای بستههای apt و .deb این است که نصب دو نسخه مختلف از یک ابزار یا برنامه به صورت موازی روی یک سیستم دشوار است. برای مثال ممکن است یک کاربر بخواهد نسخه 1.0 برنامه گرافیکی را نصب کرده و در عین حال آخرین نسخه بتا نسخه 2.0 را امتحان کند. پس از آزمایش نسخه 2.0، کاربر ممکن است بخواهد نسخه 1.0 را حذف کند و نسخه جدید را نصب کند، کاری که دستیابی به آن با استفاده از apt دشوار است.
سیستم Snap به طور خاص برای رفع این نوع کاستیها طراحی شده است. ابزار snap بستههای .snap را نصب میکند که شامل تمام کتابخانهها و داراییهایی است که برای عملکرد نرمافزار مورد نیاز است. این از نیاز به نصب هر گونه وابستگی به عنوان بستههای جداگانه و مستقل جلوگیری میکند. هنگامی که یک Snap نصب شد در یک مکان مستقل قرار می گیرد تا هیچ وابستگی با سایر بستهها به اشتراک گذاشته نشود. برای مثال، برنامههای گرافیکی فرضی ما، هر کدام نسخههای مخصوص به خود را از نسخه کتابخانه تصویربرداری دقیق مورد استفاده توسط توسعهدهنده برنامه دارند که نمیتوان آنها را حذف کرد، با نسخهای ناسازگار جایگزین کرد یا با نصب بستههای دیگر بازنویسی کرد.
البته استفاده از snaps منجر به فایلهای بسته بزرگتر میشود که منجر به طولانیتر شدن زمان دانلود بسته، عملکرد نصب کندتر و افزایش استفاده از فضای دیسک میشود.
Snap همچنین از مفهوم کانالهایی پشتیبانی میکند که به توسعهدهندگان برنامه اجازه میدهد نسخههای مختلف یک برنامه را منتشر کنند. کانالهای Snap مکانیزمی هستند که توسط آن چندین نسخه از یک نرمافزار به صورت موازی نصب میشوند.
فرمانهای اولیه Snap
اگرچه بسیاری از بستههای نرمافزاری هنوز در قالب .deb ارائه میشوند و با استفاده از apt نصب میشوند، تعداد برنامهها و ابزارهایی که اکنون در قالب snap ارائه میشوند به سرعت در حال افزایش است. در واقع، تمام نرمافزارهای فهرست شده در ابزار نرمافزار اوبونتو با استفاده از snap بستهبندی و نصب میشوند. نرم افزارهای مبتنی بر Snap نیز ممکن است با استفاده از ابزار خط فرمان snap نصب شوند که در این قسمت به اصول اولیه آن پرداخته خواهد شد.
برای فهرست کردن بستههای snap که برای دسته خاصی از نرمافزارها در دسترس هستند، فرمانی مشابه فرمان زیر را اجرا کنید:
1 2 3 4 5 6 |
# snap find "image editor" Name Version Publisher Notes Summary gimp 2.10.18 snapcrafters - GNU Image Manipulation Program paintsupreme-3d 1.0.41 braindistrict - PaintSupreme 3D . . |
فرمان بالا تمام بستههای Snap موجود برای دانلود و نصب حاوی نرمافزارهای مرتبط با ویرایش تصویر را فهرست میکند. یکی از این نتایج ویرایشگر تصویر gimp خواهد بود. جزئیات مربوط به gimp snap را میتوان به شرح زیر یافت:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ snap info gimp name: gimp summary: GNU Image Manipulation Program publisher: Snapcrafters store-url: https://snapcraft.io/gimp contact: https://github.com/snapcrafters/gimp/issues license: GPL-3.0+ description: | Whether you are a graphic designer, photographer, illustrator, or scientist, GIMP provides you with sophisticated tools to get your job done. You can further enhance your productivity with GIMP thanks to many customization options and 3rd party plugins. This snap is maintained by the Snapcrafters community, and is not necessarily endorsed or officially maintained by the upstream developers. Upstream Project: https://www.gimp.org/snapcraft.yaml Build Definition: https://github.com/snapcrafters/gimp/blob/master/snap/snapcraft.yaml snap-id: KDHYbyuzZukmLhiogKiUksByRhXD2gYV channels: latest/stable: 2.10.18 2020-03-03 (252) 182MB latest/candidate: ↑ latest/beta: ↑ latest/edge: 2.11.02 2020-04-28 (265) 184MB - |
دستور snap find همچنین میتواند برای یافتن یک بسته خاص با نام، همراه با سایر بستههایی که ویژگیهای مشابهی را ارائه میدهند، استفاده شود. برای مثال، جستجوی برنامه پخشکننده رسانه VLC، بستههای نرمافزاری مشابه را نیز فهرست میکند:
1 2 3 4 5 6 7 8 |
# snap find vlc Name Version Publisher Notes Summary vlc 3.0.10 videolan - The ultimate media player mjpg-streamer 2.0 ogra - UVC webcam streaming tool audio-recorder 3.0.5+rev1432+pkg-7b07 brlin - A free audio-recorder for Linux (EXTREMELY BUGGY) tundra 0.1.0 m4tx - MyAnimeList scrobbler dav1d 0.6.0 videolan - AV1 decoder from VideoLAN peerflix v0.39.0+git1.df28e20 pmagill - Streaming torrent client for Node.js |
گزینه خط فرمان snap list را میتوان برای به دست آوردن لیستی از بستههای snap که قبلا روی یک سیستم نصب شدهاند استفاده کرد:
1 2 3 4 5 6 7 8 |
$ snap list Name Version Rev Tracking Publisher Notes canonical-livepatch 9.5.5 95 latest/stable canonical core 16-2.44.3 9066 latest/stable canonical core core18 20200427 1754 latest/stable canonical base gnome-3-28-1804 3.28.0-16-g27c9498.27c9498 116 latest/stable canonical . . |
برای نصب یک بسته snap (مثلا برای نصب ابزار Remmina Remote Desktop)، فرمان snap را با گزینه install و سپس نام بسته مورد نظر اجرا کنید:
1 |
$ snap install remmina |
برای حذف یک بسته snap، به سادگی نام بسته را هنگام اجرای snap با گزینه remove مشخص کنید:
1 |
# snap remove remmina |
کار با کانالهای Snap
اگر هنگام اجرای نصب هیچ کانالی مشخص نشده باشد، snap به طور پیش فرض روی کانال stable خواهد بود. این تضمین میکند که آخرین نسخه قابل اعتماد نرمافزار نصب شده است. برای انجام نصب از یک کانال دیگر، با شناسایی کانالهایی که در حال حاضر برای بسته مورد نیاز در دسترس هستند، با استفاده از گزینه snap info شروع کنید:
1 2 3 4 5 6 7 8 9 10 |
# snap info remmina name: remmina summary: Remote Desktop Client . . channels: latest/stable: v1.4.3+git13.688f5f75 2020-04-20 (4139) 37MB - latest/candidate: ↑ latest/beta: ↑ latest/edge: v1.4.3+git27.1bd753df 2020-05-01 (4150) 37MB - |
از خروجی بالا میبینیم که در حالی که نسخه stable برنامه Remmina v1.4.3+git13.688f5f75 است، نسخه جدیدتر در کانال edge موجود است.
البته کانالهای candidate، beta و edge دسترسی به نرمافزار را به شکلهای ناپایدار (که سطح ریسک نامیده میشود) فراهم میکنند، اما اگر میخواهید نسخه دسترسی زودهنگام از ویژگیهای آینده یک بسته را امتحان کنید، با ریسک بالاتر نصب کنید. مثلا:
1 |
# snap install --channel=edge remmina |
انتخاب کانال همچنین ممکن است به اختصار –stable، –candidate، –beta یا –edge باشد، برای مثال:
1 |
# snap install --edge remmina |
اگر بسته قبلا نصب شده باشد، سطح ریسک را میتوان با استفاده از گزینه switch تغییر داد:
1 |
# snap switch channel=edge remmina |
با این کار کانالی که Snap برای بسته مشخص شده ردیابی میکند تغییر میکند. کانال فعلی که برای یک بسته ردیابی میشود را میتوان با استفاده از فرمان snap info شناسایی کرد:
1 2 3 4 5 6 7 |
# snap info remmina name: remmina . . tracking: latest/edge . . |
اجرای ساده فرمان snap switch بلافاصله بسته را برای استفاده از کانال جدید تازه نمیکند. برای درک اینکه چگونه این کار میکند، بررسی snap refresh schedule کمک میکند.
Snap Refresh Schedule
سیستم Snap شامل یک سرویس پسزمینه به نام snapd است که مسئول تازهسازی اسنپهای نصبشده بر اساس کانالهایی است که آنها ردیابی میکنند. به طور پیش فرض، snapd عملیات refresh را در فواصل زمانی منظم (معمولاً چهار بار در روز) انجام میدهد. برای تشخیص اینکه آخرین رفرش چه زمانی انجام شده است و چه زمانی قرار است انجام شود، فرمان زیر را اجرا کنید:
1 2 3 4 |
# snap refresh --time timer: 00:00~24:00/4 last: today at 07:23 EDT next: today at 14:25 EDT |
خروجی بالا همچنین شامل اطلاعات تایمر است که نشان می دهد در هر بازه زمانی 24 ساعته رفرش چهار بار انجام میشود:
1 2 3 4 5 |
. . timer: 00:00~24:00/4 . . |
فرمان snap همچنین میتواند برای بهروزرسانی تمام بستههای snap نصب شده به شرح زیر استفاده شود:
1 |
# snap refresh |
روش دیگر، برای تازه کردن یک بسته خاص:
1 |
# snap refresh remmina |
برای تغییر یک بسته به یک کانال دیگر بدون نیاز به منتظر ماندن برای تازه کردن سرویس snapd بعدی، به سادگی فرمان snap refresh را به صورت زیر اجرا کنید و کانال مورد نظر را مشخص کنید:
1 |
# snap refresh remmina --channel=edge |
سیستم snap همچنین دارای مجموعهای از چهار ویژگی است که ممکن است برای تنظیم زمانبندی بهروزرسانی مورد استفاده توسط snapd اصلاح شوند:
- refresh.timer: برنامه و فرکانس بهروزرسانی فعلی را ذخیره میکند.
- refresh.hold: برای به تاخیر انداختن عملیات بهروزرسانی تا روز و ساعت مشخص شده (در قالب RFC 3339) استفاده میشود.
- refresh.metered: هنگامی که دسترسی به شبکه از طریق یک اتصال اندازهگیری شده (مانند اتصال داده تلفن همراه) باشد، عملیات بهروزرسانی را متوقف میکند.
- refresh.retain: برای پیکربندی تعداد بازبینیهای هر نصب Snap که باید حفظ شود استفاده میشود.
برای مثال، برای برنامهریزی بهروزرسانی در روزهای هفته بین ساعت 1:00 صبح تا 2:00 بامداد:
1 |
# snap set system refresh.timer=mon-fri,1:00-2:00 |
به طور مشابه، فرمان زیر هر روز دو بار رفرش را پیکربندی میکند تا بین ساعات 6:00 صبح تا 7:00 صبح و 10:00 شب و 11:00 شب رخ دهد:
1 |
snap set system refresh.timer=6:00-7:00,22:00-23:00 |
توضیح کامل فرمت تایمر و نحو آن را میتوان به صورت آنلاین در آدرس اینترنتی زیر یافت:
پس از ایجاد تغییر در تایمر، حتما تنظیمات را به صورت زیر بررسی کنید:
1 2 3 4 |
# snap refresh --time timer: mon-fri,1:00-2:00 last: today at 07:23 EDT next: tomorrow at 01:00 EDT |
برای توقف رفرش، تاریخ و زمانی که قرار است رفرش از سر گرفته شود باید با استفاده از قالب RFC 3339 مشخص شود که جزئیات آن را میتوانید در URL زیر پیدا کنید:
به طور خلاصه، تاریخ و زمان باید از قالب زیر استفاده کنند:
1 |
YYYY-MM-DDTHH:MM.SS<UTC offset> |
به عنوان مثال، برای تعیین زمان توقف تا 12 اکتبر 2020 در ساعت 3:20 صبح برای سیستمی واقع در نیویورک، تاریخ و زمان به صورت زیر قالببندی میشود:
1 |
2020-10-12T03:20:50.0-05:00 |
توجه داشته باشید که از آنجایی که نیویورک از زمان استاندارد شرقی (EST) استفاده میکند، از زمان هماهنگ جهانی (UTC-5:00) -5 ساعت فاصله دارد. پس از قالببندی تاریخ و زمان، از فرمان زیر برای تنظیم نگه داشتن استفاده میشود:
1 |
# snap set system refresh.hold="2020-10-12T03:20:50.0-05:00" |
برای بررسی تنظیمات نگهداری فعلی، از snap با گزینه system get استفاده کنید:
1 2 |
# snap get system refresh.hold 2020-10-12T03:20:50.0-04:00 |
برای حذف hold، به سادگی یک مقدار null به ویژگی اختصاص دهید:
1 |
# snap set system refresh.hold=null |
ویژگی refresh.retain را میتوان روی هر مقداری بین 0 تا 20 تنظیم کرد، به عنوان مثال:
1 |
# snap set system refresh.retain=10 |
در نهایت، برای توقف موقت بهروزرسانیهای رفرش در حالی که سیستم در یک اتصال اندازهگیری شده است، تازهسازی را تنظیم کنید. دارایی اندازه گیری شده به شرح زیر نگهداری شود:
1 |
# snap set system refresh.metered=hold |
همانند ویژگی hold، این تنظیم را با اختصاص یک مقدار null به ویژگی غیرفعال کنید:
1 |
# snap set system refresh.metered=null |
سرویسهای Snap
شایان ذکر است که برخی از بستههای Snap شامل سرویسهای مخصوص به خود هستند که هنگام نصب بسته در پسزمینه اجرا میشوند (مثل سرویسهای systemd که در دروس قبلی بدان پرداخته شده است). برای به دست آوردن لیستی از خدمات snap که در حال حاضر در یک سیستم در حال اجرا هستند، فرمان snap را با گزینه services اجرا کنید:
1 2 3 |
# snap services Service Startup Current Notes canonical-livepatch.canonical-livepatchd enabled active - |
خروجی بالا نشان داد که سرویس LivePatch snap در حال حاضر فعال و در دسترس است. برای توقف یا آغاز یک سرویس میتوان از فرمان زیر استفاده کرد:
1 2 |
# snap start canonical-livepatch.canonical-livepatch # snap stop canonical-livepatch.canonical-livepatch |
به طور مشابه، گزینههای snap enable و disable ممکن است برای کنترل اینکه آیا یک سرویس به طور خودکار در هنگام راهاندازی سیستم شروع میشود یا نه استفاده میشود:
1 2 |
# snap enable canonical-livepatch.canonical-livepatch # snap disable canonical-livepatch.canonical-livepatch |
اگر سرویس snap یک فایل log تولید کند، آن فایل را میتوان به صورت زیر مشاهده کرد:
1 2 3 4 5 |
# snap logs canonical-livepatch 2020-05-06T13:21:58Z canonical-livepatch[763]: No payload available. 2020-05-06T13:21:58Z canonical-livepatch[763]: during refresh: cannot check: No machine-token. Please run 'canonical-livepatch enable'! . . |
همچنین هنوز امکان مدیریت سرویسهای Snap با استفاده از فرمان systemctl وجود دارد. این معمولا شامل پیشوند نام سرویس با “snap.” است. مثلا:
1 |
# systemctl status snap.canonical-livepatch.canonical-livepatchd |
خلاصه
تا همین اواخر، تمام بستههای نرمافزاری اوبونتو در فایلهای .deb ذخیره میشدند و با استفاده از Advanced Packaging Tool (APT) نصب میشدند. تعداد فزایندهای از بستهها اکنون برای نصب با استفاده از Snap در دسترس هستند، یک سیستم مدیریت بسته توسعهیافته توسط Canonical, Ltd. این تضمین میکند که بسته نرمافزاری با نسخهای از تمام کتابخانهها و داراییهای مورد نیاز برای اجرا در خود محفوظ است. این امر از تضادهای بالقوه بستههای متکی بر نسخههای مختلف داراییها و کتابخانههای مشترک مشابه جلوگیری میکند. سیستم Snap همچنین امکان نصب نسخههای مختلف بستههای مشابه را به صورت موازی میدهد. همه نرمافزارهای فهرست شده در ابزار نرمافزار اوبونتو به عنوان بستههای Snap عرضه میشوند. علاوه بر این، snap میتواند برای نصب، حذف و مدیریت بستهها از خط فرمان استفاده شود.
منبع: answertopia.comدرباره فرشید نوتاش حقیقت
همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرمافزارهای آزاد/ متنباز و سیستمعامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.
نوشتههای بیشتر از فرشید نوتاش حقیقتاین سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش میشوند.
دیدگاهتان را بنویسید