امروزه اکثر سیستم عاملهای شبه یونیکس، هر کدام مکانیزم متمرکزی به منظور یافتن نرم افزارهای مختلف و نصب آنها بر روی سیستم ارائه نمودهاند. سیستم عامل لینوکس نیز از این قاعده مستثنی نمیباشد. نرم افزارها معمولا در قالب بستههایی (Packages) ارائه شده و در مخازن (Repositories) نگه داری میشوند. کار با این بستهها را اصطلاحاً مدیریت بسته Package Management میگویند. این بستهها گاهی اجزای پایهای از یک سیستم عامل را تشکیل میدهند؛ و یا میتوانند شامل کتابخانهها، برنامههای کاربردی، سرویسها و مستندات مختلف باشند.
مدیریت بسته Package Management
یک مدیر بسته (Package Manager)، میتواند کاری بیش از نصب یک نرم افزار بر روی سیستم انجام دهد (برای مثال، میتواند نرم افزارهای نصب شده بر روی سیستم را به روز رسانی کند). مخازن بستهها (Package Repositories)، به ما این اطمینان را میدهند که بستههای موجود در آنها، به طور کامل توسط توسعه دهندگان مختلف بررسی و تایید شده است. اما ممکن است مخازن رسمی یک توزیع لینوکس، پاسخ گوی نیازهای ما نباشد؛ چرا که برخی از بستهها در نسخههای پایدار یک توزیع لینوکس، ممکن است منسوخ شده باشند (درحالی که ما به آخرین نسخهی یک نرم افزار نیاز داریم). با این اوصاف، مدیریت بستهها یک مهارت اساسی برای هر برنامه نویس و مدیر سیستم (System Administrator) است که قصد استفاده از لینوکس را دارد.
نگاهی کوتاه به مدیر بستههای مختلف
یک بستهی نرم افزاری، آرشیوی از فایلهای باینری کامپایل شده، منابع مورد نیاز برای ساخت نرم افزار و اسکریپتهایی به منظور نصب و راه اندازی نرم افزار است. یک بسته، همچنین شامل لیستی از بستهها در قالب وابستگیهایی (Dependencies) میباشد که برای اجرای نرم افزار مورد نظر، ابتدا باید آن وابستگیها بر روی سیستم نصب شوند. اکثر ابزارهایی که در ادامه آنها را معرفی میکنیم، در هنگام نصب یک بسته، آن را از مخازن دریافت کرده و وابستگیهایش را رفع میکنند و سپس به نصب آن میپردازند.
در حالی که قابلیتها و امکانات این مدیر بستهها بسیار شبیه به یکدیگر است، اما فرمت بستهها، ابزارها و دستورات آنها متفاوت میباشد.
در دبیان (Debian) و توزیعهای مبتنی بر آن مانند اوبونتو (Ubuntu) و مینت (Mint)، فرمت بستهها deb میباشد. ابزار APT (Advanced Packaging Tool) دستوراتی به منظور کارهای مختلف با بستهها – از جمله نصب، به روز رسانی، حذف و یافتن بستهها در مخازن – را فراهم کرده است. دستورات مربوط به APT، به عنوان دستورات front-end و سطح بالا برای ابزارِ سطح پایین dpkg عمل میکنند (با استفاده از dpkg میتوان فایل بستههایی که بر روی سیستم قرار دارند را نصب نمود). همچنین میتوان از دستورات apt-get و apt-cache (نسخهی قدیمیِ دستور apt) برای مدیریت بستهها در اکثر توزیعهای مبتنی بر دبیان استفاده کرد.
فدورا (Fedora) و سنت او اس (CentOS) و سایر توزیعهای خانوادهی Red Hat از بستههایی با فرمت rpm استفاده میکنند. در CentOS از ابزار yum به منظور مدیریت بستههای موجود در مخازن و همچنین بستههای موجود بر روی سیستم استفاده میشود (از ابزار سطح پایین rpm نیز میتوان فایل بستههایی که بر روی سیستم قرار دارند را نصب نمود). در نسخههای اخیر فدورا (فدورا ۲۲ به بعد) از دستور dnf بجای yum استفاده میشود. البته dnf در نسخهی ۱۸ فدورا معرفی شد و در نسخهی ۲۲ به صورت پیشفرض از آن استفاده میشود.
توزیعهای SLES و OpenSUSE نیز از بستههایی با فرمت rpm استفاده کرده و از دستور rpm در این توزیعها هم میتوان استفاده نمود. در این توزیعها از ابزارهای YaST و Zypper برای مدیریت بستهها استفاده میشود (در این مقاله با کارایی zypper آشنا میشویم).
بستههایی با فرمت tar.xz یا tar.gz و یا tar.bz2 نیز وجود دارند که آنها را میتوان بر روی تمام توزیعها نصب نمود. آرچ (Arch) و توزیعهای مبتنی بر آن مانند مانجارو (Manjaro) نیز از بستههایی با فرمت pkg.tar.gz یا pkg.tar.xz و یا pkg.tar.bz2 استفاده میکنند. به منظور مدیریت بستهها در این توزیعها از ابزار pacman استفاده میشود.
در ادامه با دستورات مختلف این مدیر بستهها آشنا میشویم.
به روز رسانی بستهها
اکثر توزیعها از یک پایگاه دادهی محلی بر روی خود استفاده میکنند که در آن لیست بستههای موجود در مخازنی که باید بستهها از آنها دریافت شوند، قرار دارد. بهتر است قبل از نصب یک بسته بر روی سیستم، این لیست به روز شود. البته ابزارهای yum و dnf به طور خودکار قبل از نصب هر بستهای، عمل به روز رسانی را انجام میدهند. همچنین بهتر است تمام نرم افزارهای نصب شده بر روی سیستم به روز باشند. پس از به روز رسانی لیست بستههای موجود در مخازن، باید عمل به روز رسانی بستههای نصب شده بر روی سیستم انجام گیرد. با استفاده از دستورات زیر، میتوان این کار را انجام داد:
# Debian/Ubuntu sudo apt update; sudo apt upgrade # CentOS/Fedora 22- sudo yum update # Fedora 22+ sudo dnf upgrade # OpenSUSE/SLES sudo zypper update # Arch/Manjaro sudo pacman -Syu
پیدا کردن یک بسته
بسیاری از توزیعها، دارای یک نرم افزار با محیط گرافیکی میباشند که با استفاده از آن میتوان به جستوجوی بستههای مختلف در مخازن پرداخت و بستههای دلخواه خود را نصب نمود. با این حال، سریعترین راه برای پیدا کردن یک بسته، استفاده از دستورات در خط فرمان است. میتوان با استفاده از دستورات زیر این کار را انجام داد:
# Debian/Ubuntu apt search search_string # CentOS/Fedora 22- yum search search_string # Fedora 22+ dnf search search_string # OpenSUSE/SLES zypper search search_string # Arch/Manjaro pacman -Ss search_string
مشاهدهی مشخصات کامل یک بسته
گاهی لازم است پیش از نصب بسته، برای دستیابی به اطلاعات بیشتر، توضیحات کاملی از یک بسته را مطالعه کنیم. این توضیحات میتواند شامل نسخهی نرم افزار، لیست وابستگیهای آن و سایر اطلاعات مفید دیگر نیز باشد. همچنین میتوان اطلاعات مربوط به بستههای نصب شده بر روی سیستم را نیز به راحتی بدست آورد. با استفاده از دستورات زیر، میتوان این اطلاعات را استخراج نمود:
# Debian/Ubuntu apt show package # Display remote package information dpkg -s package # Display local package information # CentOS/Fedora 22- yum info package # Display remote package information rpm -qi package # Display local package information # Fedora 22+ dnf info package # Display remote package information rpm -qi package # Display local package information # OpenSUSE/SLES zypper info package # Display remote package information rpm -qi package # Display local package information # Arch/Manjaro pacman -Si package # Display remote package information pacman -Qi package # Display local package information
نصب یک بسته از مخازن
در صورتی که شما نام بستهی مورد نظر خود را بدانید، به راحتی میتوانید آن بسته و وابستگیهایش را تنها با یک دستور از مخازن دانلود کرده و نصب کنید. با استفاده از دستورات زیر، میتوان این کار را انجام داد:
# Debian/Ubuntu sudo apt install package # CentOS/Fedora 22- sudo yum install package # Fedora 22+ sudo dnf install package # OpenSUSE/SLES sudo zypper install package # Arch/Manjaro sudo pacman -S package
نصب یک بسته از روی سیستم فایل محلی (Local Filesystem)
گاهی ممکن است بستهی مورد نظر شما در مخازن رسمی وجود نداشته باشد، اما توسعه دهندهی نرم افزار آن را در اینترنت برای دانلود قرار داده است. در نتیجه به راحتی میتوان این بسته را از سایت مورد نظر دانلود کرده و پس از دریافت آن، تنها با استفاده از یک دستور آن را نصب کنیم:
# Debian/Ubuntu sudo dpkg -i package.deb # or sudo apt install -y gdebi && sudo gdebi package.deb # or sudo apt install package.deb # CentOS/Fedora 22- sudo yum install package.rpm # or sudo rpm -ivh package.rpm # Fedora 22+ sudo dnf install package.rpm # or sudo rpm -ivh package.rpm # OpenSUSE/SLES sudo zypper install package.rpm # or sudo rpm -ivh package.rpm # Arch/Manjaro sudo pacman -U package.pkg.tar.xz
حذف یک بسته از سیستم
از آنجایی که مدیر بسته میداند که چه فایلهایی در هنگام نصب یک بسته بر روی مکانهای مختلف سیستم ایجاد شده است، در زمان حذف آن بسته نیز میتواند به راحتی آن فایلها را از روی سیستم حذف کند. همچنین ممکن است بر روی سیستم بستههایی وجود داشته باشد که هیچ نرم افزاری در سیستم به آنها وابسته نبوده و نیازی به وجود آنها بر روی سیستم نباشد. این بستهها را نیز میتوان به راحتی حذف نمود. با استفاده از دستورات زیر، میتوان این کارها را انجام داد:
# Debian/Ubuntu sudo apt remove package sudo apt-get autoremove # Remove unneeded packages # CentOS/Fedora 22- sudo yum remove package # Fedora 22+ sudo dnf remove package sudo dnf autoremove # Remove unneeded packages # OpenSUSE/SLES sudo zypper remove package sudo zypper rm -u # Remove unneeded packages # Arch/Manjaro sudo pacman -Rs package sudo pacman -Qdtq | sudo pacman -Rs - # Remove unneeded packages
شما میتوانید با خواندن مستندات هر کدام از این مدیر بستهها در سیستم خود، اطلاعات جامع تری از قابلیتهای مختلف هر کدام از آنها و نحوهی کار با آنها بدست آورید. با استفاده از دستور man میتوانید به این مستندات دست یابید:
# Debian/Ubuntu man apt man dpkg # CentOS/Fedora 22- man yum # Fedora 22+ man dnf # OpenSUSE/SLES man zypper man rpm # Arch/Manjaro man pacman
این موارد تنها دستورات اساسی و پایهای برای مدیریت بستهها در توزیعهای لینوکس میباشند که با استفاده از آنها میتوانید به یافتن، نصب، به روز رسانی و یا حذف یک بسته در توزیع لینوکس خود بپردازید.