نصب کننده نرمافزار یا Installer چگونه عمل میکند
سیستمعاملهای مدرن روشهای بسیار سادهی نصب نرمافزار را برای کاربران فراهم کردهاند. این روشها شامل پکیجهای نصب یا فرمانهایی میشوند که اجزای مختلف نرمافزار را به شکل یکجا نصب میکنند. آیا میدانید هنگام اجرای این فایلها یا فرمانهای نصب، دقیقا چه اتفاقی در پس زمینه سیستمعامل رخ میدهد؟ در این مقاله قصد داریم به نحوهی نصب نرمافزارها در سه سیستمعامل دسکتاپ مطرح یعنی ویندوز، مک و لینوکس نگاهی داشته باشیم.
شیوههای نصب
روشهای مختلفی برای نصب و اجرای نرمافزار جدید روی کامپیوتر وجود دارد که به ترتیب پیچیدگی عبارتند از:
کامپایل نرمافزار (Software Compilation) که بیشتر مورد استفاده کاربران حرفهای است و به فرآیند ایجاد برنامه از طریق کد منبع آن گفته میشود.
آرشیو نرمافزار (Software Archives) که به باز کردن فایلهایی مانند ZIP و اجرای نرمافزار گفته میشود.
پکیج نصب (Installer Packages) که به فرایند اجرای فایل نصب (Installer) گفته میشود.
فروشگاه/مدیر نرمافزار (Software Managers/Stores) که به انتخاب نرمافزار مورد نظر از یک رابط کاربری و نصب آسان آن گفته میشود؛ مانند آنچه در نصب بازیهای کامپیوتری از نرمافزار استیم اتفاق میافتد.
در این مقاله بیشتر بر شیوه پکیج نصب تمرکز خواهیم داشت؛ زیرا فروشگاه/مدیر نرمافزار هم بر همین شیوه و استفاده از همین پکیجها در پسزمینه سیستمعامل اتکا دارد. با نگاهی به سیستمعاملهای مطرح امروز، یعنی ویندوز، مک و لینوکس چگونگی ایجاد این پکیجها را تشریح خواهیم کرد. همچنین در این مطلب اتفاقاتی که هنگام نصب و اجرای این پکیجها رخ میدهد بررسی خواهیم کرد.
ویندوز
در سیستمعامل ویندوز، کاربران معمولا با دو پکیج نصب نرمافزار مواجه میشوند؛ اولین دسته، فایلهای اجرایی (EXE) نامیده میشوند که قادر به کپی کردن فایلها در محل مورد نظر و اعمال تغییرات لازم در رجیستری ویندوز هستند. به دومین نوع، پکیجهای نصب MSI گفته میشود که علاوه بر ویژگیهای فایلهای EXE، قادر به فراهم کردن استانداردهای دیگری از قبیل uninstall نرمافزار هستند.
برای مشاهده محتوای آرشیو فایلهای نصب EXE و MSI، میتوان از نرمافزار 7-Zip استفاده کرد. برای مثال اگر با استفاده از این نرمافزار به فایل نصب خود 7-Zip نگاهی داشته باشیم، فایلهای متفاوتی قابل رؤیت است.
این فایلها درون فایل نصب پوشهبندی نشدهاند و توسعهدهندگان نرمافزار هر فایل را به دایرکتوری خاصی برای نصب ارجاع میدهند. بیشتر این فایلها در محل نصب پیشفرض ویندوز (C:\Program Files\program name یا C:\Program Files (x86)\your new app) کپی میشوند.
توسعهدهندگان نرمافزار با استفاده از ابزاری حرفهای مانند نرمافزار InstallShield، میتوانند فرایند نصب را سفارشی و جزئیات آن را مشخص کنند. برای مثال توسعهدهندگان قادر هستند نسخه ویندوزی که نرمافزار روی آن نصب میشود مشخص کنند، برای نرمافزار در منوی استارت یا دسکتاپ میانبر (shortcut) ایجاد کنند و اقدام به ثبت اطلاعات کاربران نظیر نام، آدرس و... کنند. در نمونه پروژهای که در تصویر زیر به نمایش گذاشته شده است، صفحهای از نرمافزار InstallShield را مشاهده میکنید که بخش تنظیمات بهروزرسانی یا ایجاد رکورد جدید در رجیستری ویندوز را نشان میدهد.
نرمافزار InstallShield فایلهای مورد نظر و سایر تنظیمات نصب را در قالب فایلی با نام setup.exe ذخیره میکند. با باز کردن این فایل بهوسیله نرمافزار 7-Zip، یک فایل نصب MSI قابل مشاهده است که فرآیند نصب را مشابه آنچه برای اکثر کاربران آشنا است به اجرا میگذارد. حال نگاهی به جزئیات فرایند نصب نرمافزار در ویندوز خواهیم داشت.
فرایند نصب در ویندوز
نصب کننده نرمافزار یا Installer در ویندوز مراحل زیر را طی میکند و ترتیب مراحل به تنظیمات اعمالشده توسط توسعهدهندگان نرمافزار مرتبط است:
هر Installer ممکن است شامل آرشیوها یا فایلهای نصب دیگری مانند MSI یا CAB باشد. در مرحله اول Installer تمامی محتوا را در محلی موقت کپی میکند.
در مرحله بعد Installer تمامی ملزوماتی که فرایند نصب و اجرای برنامه به آن وابسته است بررسی میکند. در صورتی که هر کدام از این ملزومات در دسترس نباشند، Installer اقدام به دانلود آنها میکند یا در صورتی که چنین امکانی وجود نداشته باشد، پیغام خطایی برای کاربر صادر میکند.
اگر فرایند نصب نیازمند برنامه خاصی باشد که در دسترس نیست، ابتدا آن برنامه نصب میشود و بعد از آن فرآیند نصب اصلی آغاز میشود. از جمله این موارد میتوان به فرایند نصب NET Framework. پیش از نصب برخی برنامهها اشاره کرد.
سپس Installer اقدام به کپی فایلهای نرمافزار در مکانهای تعیینشده آنها میکند.
در این مرحله اگر توسعهدهندگان Installer برای نرمافزار خود میانبری در نظر گرفته باشند، میانبر مورد نظر ایجاد میشود. فایل میانبر، فرمان کاربر جهت اجرای برنامه را به فایل اصلی اجرای برنامه ارجاع میدهد. این مرحله در هنگام نصب قابل شخصیسازی و تغییر است.
اگر نیاز به تغییری در رجستری ویندوز باشد در این مرحله تغییرات لازم اعمال میشوند.
در مرحله نهایی نصب، ممکن است از کاربر خواسته شود اطلاعاتی نظیر نام یا آدرس وبسایت خود را وارد کند.
همه این مراحل در فرایند نصب نرمافزار روی سیستمعامل ویندوز ممکن است در مقایسه با فرایند نصب در سیستمعامل بعدی این لیست پیچیده به نظر برسند.
macOS
فرآیند نصب نرمافزار در ویندوز شامل مراحل زیادی در پسزمینه سیستمعامل میشود. در نقطه مقابل، نصب نرمافزار در macOS معمولا شامل دانلود برنامه مورد نظر، باز کردن فایل DMG یا Apple Disk Image و طی کردن چند مرحله ساده است. حتی در برخی موارد فایل نصب، قابلیت کشیدن و رها کردن (Drag and Drop) و نصب برنامه به شکلی بسیار آسان را برای کاربران فراهم میسازد. در این فایلها کاربر معمولا با عبارت Drag here مواجه میشود. در ادامه به فایلهای نصب APP و PKG در سیستمعامل macOS نگاهی خواهیم داشت.
ساختار پکیج نصب در macOS
فرایند نصب نرمافزار با استفاده از فایل نصب APP، از دو جهت بسیار سادهتر از چیزی است که در ویندوز رخ میدهد؛ ابتدا این که فایل APP در واقع یک پوشه استاندارد است. تنها تفاوتی که در این فایل وجود دارد پسوند APP. این فایل است. اگر این فایل روی ویندوز دانلود شود، کاربران آن را مانند یک پوشه معمولی ویندوز میبینند. دلیل دوم این است که فایل APP تمامی ملزومات و مواردی را که یک برنامه برای اجرا به آن نیاز دارد شامل میشود و دیگر نگرانی در مورد فایلهای ناقص یا فرایند دانلود قبل از نصب برنامه وجود ندارد.
این فایلها شامل سه بخش اساسی در پوشه نصب هستند:
فایل Info.plist که شامل متادیتای برنامه نظیر نام، زبان، شماره نسخه و... است.
دایرکتوری MacOS که در بردارنده فایلهای اصلی برنامه است.
دایرکتوری منابع (Resources)، که شامل مواردی مانند آیکون اصلی برنامه و... است که برنامه برای اجرا به آنها نیاز دارد.
پوشههای اختیاری دیگری نیز ممکن است در این فایلها مشاهده شوند که در ادامه به چند مورد از آنها اشاره میکنیم. پوشه Frameworks که شامل موارد عمومی است که برخی برنامهها برای عملکرد به آن نیاز دارند یا Plug-Ins که شامل ویژگیهایی از برنامه میشود که نیاز به اجرای مجزا ندارند و همچنین SharedSupport که شامل دادههایی فرعی مانند templates میشود.
بر خلاف فایلهای APP، فایل نصب PKG در macOS، دارای فرآیند نصبی مشابه ویندوز با ساختاری یونیکسی است. امکان مشاهده محتویات فایل PKG که با فرمت xar فشرده شده است به وسیله نرمافزار 7-Zip وجود دارد. داخل این فایل یک یا چندین فایل اصلی به شکل آرشیو وجود دارد. برای خارج کردن محتوای فایل PKG از فرمان زیر در ترمینال مک یا لینوکس استفاده میشود. Cpio یک فرمت آرشیو و برنامهای برای اعمال تغییرات بر فایلهای آرشیو است. بعد از اجرای این فرمان، کاربر قادر به مشاهده دایرکتوری خواهد بود؛ مشابه چیزی که در یونیکس رواج دارد.
cat Payload | gunzip -dc | cpio -i
در مثال زیر، برای نشان دادن محتوای یک فایل PKG از نرمافزار تبدیل کننده Pandoc استفاده شده است. این نرمافزار شامل اطلاعات باینری در مسیر /usr/local/bin و فایلهای دیگری در مسیر /usr/local/share/man است. برای این که پی ببریم این فایلها چطور روی مک نصب میشوند، نگاهی به فرآیند نصب در سیستمعامل شرکت اپل خواهیم داشت. همانطور که در تصویر مشاهده میکنید، برای نمایش محتویات فایل، از نسخه ویندوز 7-Zip به جای نسخه لینوکسی و مبتنی بر خط فرمان آن استفاده شده است.
فرآیند نصب فایل APP در macOS
هنگامی که کاربر فایل APP را به پوشه Applications مک کپی میکند تغییرات زیادی ایجاد نمیشود. آنطور که پیشتر گفته شد، تمامی موارد مورد نیاز برای اجرای برنامه در این فایل موجود است. تنها تفاوتی که این فرایند با یک عمل کشیدن و رها کردن معمولی با سایر فایلها دارد، ثبت شدن فایل Info.plist برنامه جدید در سیستم است.
ثبت فایل Info.plist تنظیماتی برای اجرای برنامه، نمایش آیکونی خاص، فایلهایی که در این برنامه پشتیبانی میشوند و... به وجود میآورد. بهغیر از این موارد، برنامه مورد نظر کاربر که در مثال زیر فایل APP نسخهای از برنامه ویرایش متن Atom است، آماده به کار خواهد بود.
فرآیند نصب فایل PKG در macOS
باز کردن فایل PKG در سیستمعامل دسکتاپ اپل باعث شروع فرآیندی میشود که به wizard نصب در ویندوز شباهتهایی دارد. در برنامههای ساده، این فایل معمولا به نصب اجزای برنامه میپردازد که شامل مراحل زیر است:
اجرای اسکریپتهای پیش از نصب
کپی کردن محتوای اصلی برنامه در کامپیوتر
اجرای اسکریپتهای پس از نصب
توسعهدهندگان در فایلهای PKG قادر هستند اجزای دیگری را به فرآیند نصب محصولات خود اضافه کنند. این بخشها شامل نمایش توافقنامه مجوز کاربر نهایی (EULA)، جمعآوری اطلاعاتی درباره کاربر و انتخاب بخشهای مختلف نرمافزار جهت نصب میشود. در خلال همین موارد فایل نصب به شکل مرحله به مرحله در پسزمینه سیستمعامل اقدام به نصب نرمافزار مورد نظر کاربر میکند.
لینوکس اوبونتو و فدورا
دو پکیج نصب DEB و RPM هر کدام در دنیای سیستمعامل لینوکس طرفداران پروپا قرص خود را دارند و همانطور که بحث بر سر برتری vi یا emacs و همچنین KDE یا GNOME همواره در جریان است، مجادله در مورد برتری DEB و RPM همواره داغ است.
ساختار فایل پکیج لینوکس
برای مشاهده محتویات فایل DEB میتوان از برنامههای مدیریت آرشیو مبتنی بر رابط گرافیکی کاربر استفاده کرد یا بهجای آن استفاده از فرمان ar نیز امکانپذیر است. با وارد کردن فرمانی که در زیر مشاهده میکنید در ترمینال لینوکس، محتویات پکیج دبیان خارج میشود.
ar -x name-of-your-package.deb
در نتیجه اجرای این فرمان سه فایل قابل مشاهده است:
فایل control.tar.gz که خود حاوی فایل اصلی دیگری به نام Control است. فایل کنترل شامل متادیتای پکیج مانند نام رسمی، نسخه و عواملی که برنامه به آنها وابسته است، میشود. این فایل همچنین ممکن است شامل بخشهای دیگری مانند اسکریپتهای قابل اجرا در حین فرآیند نصب و فایلهای تنظیمات پیشفرض باشد.
فایل data.tar.gz، که شامل فایلهای اصلی برنامه میشود که در آرشیو TAR.GZ وجود دارند. تمامی اطلاعات باینری، پروندهها و تنظیمات پیشفرض در این بخش وجود دارند. همانطور که مشاهده میکنید، فایل نمونه kde-service-menu-encfs_0.5.2_all.deb که در تصویر زیر آمده، شامل فایلها و دایرکتوریهای مختلفی است.
فایل debian-binary، که در آن توضیحاتی در مورد نسخه پکیج دبیان فایل وجود دارد. در سیستمعاملهای جدید، این توضیحات صرفا شامل یک خط و عدد 2.0 میشود.
در لینوکس فدورا، برای خارج کردن محتوای پکیج RPM میتوان از فرمانهای rpm2cpio و cpio استفاده کرد.
rpm2cpio name-of-your-package.rpm | cpio -idvm
برای پکیج نمونه kde-cli-tools-5.9.4-2.fc26.x86_64.rpm، فایلهایی مشابه با DEB قابل رؤیت هستند؛ با این تفاوت که پکیج RPM شامل فایلهای متادیتا نمیشود. در این مورد کاربر باید فایل منبع RPM یا SRC.RPM. متناسب با نسخه باینری خود را دانلود کند. در این فایل، فایلی با نام SPEC وجود دارد که شامل موارد مشابهی با فایل Control در پکیج دبیان میشود. حال که به شکل مختصر با ساختار پکیجهای لینوکس آشنا شدیم، فرآیند نصب را در این پکیجها بررسی میکنیم.
فرآیند نصب پکیج در لینوکس
هنگامی که کاربر اقدام به نصب یکی از پکیجهای DEB یا RPM میکند، بر خلاف تفاوتهای ظاهری که بین این دو وجود دارد، مراحل زیر رخ میدهند:
سیستم پکیج به بررسی محتوای پکیج میپردازد تا از وجود تمامی ملزومات نصب برنامه اطمینان حاصل شود. با توجه به ابزاری که برای این کار استفاده میشود، پیغام خطایی برای کاربر صادر میشود یا در صورت امکان فایلهای مورد نیاز دانلود میشوند.
اگر پکیج شامل اسکریپتهای پیش از نصب باشد، ابتدا آنها اجرا میشوند.
سپس سیستم پکیج اقدام به خارج کردن فایلهای اصلی میکند.
بعد از این که فایلها در محل مورد نظر کپی شدند، اسکریپتهای پس از نصب اجرا میشوند.
در مرحله نهایی، پکیج با استفاده از متادیتاها در سیستم ثبت میشود و امکان uninstalled برنامه در آینده، از این طریق فراهم میشود.
اهمیت آگاهی از مراحل و فرآیند نصب نرمافزار
به سبب آن که توسعهدهندگان سیستمعاملها و نرمافزارها تلاش زیادی برای سادهسازی فرآیند نصب نرمافزار میکنند، نیازی به آگاهی از جزئیات این فرایند حس نمیشود؛ اما آگاهی از فرایند نصب به کاربر کمک میکند تا از نصب شدن فایلها به شکل درست و ایمن روی کامپیوتر خود اطمینان حاصل کند. احتمال نصب بدافزارها یا فایلهای ناخواسته با افزایش آگاهی کاربر، کمتر میشود. همچنین آگاهی از مراحل نصب در رفع نقصها و اشکالات سیستم هم کارایی بسزایی دارد.
نظرات