لینوکس

اصول مدیریت پکیج: apt، yum، dnf و pkg

مقدمه

بیشتر سیستم‌عامل‌های مدرن شبه‌یونیکسی، سازوکاری متمرکز برای پیدا کردن و نصب نرم‌افزار فراهم می‌کنند. نرم‌افزار معمولاً به شکل پکیج‌ها توزیع و در مخازن (Repository) نگه‌داری می‌شود. کار با پکیج‌ها، مدیریت پکیج (Package Management) نامیده می‌شود. پکیج‌ها اجزای هسته سیستم‌عامل را—به‌همراه کتابخانه‌های مشترک، اپلیکیشن‌ها، سرویس‌ها و مستندات—فراهم می‌کنند.

از مدیر پکیج سیستم‌تان برای پیدا کردن، نصب و ارتقای نرم‌افزار از مخازن بررسی‌شده استفاده کنید. روی دبیان و اوبونتو از apt و dpkg استفاده می‌کنید؛ روی راکی لینوکس، فدورا و RHEL از dnf (یا yum روی سیستم‌های قدیمی‌تر)؛ و روی FreeBSD از pkg. این راهنما مرجعی سریع برای همان عملیات‌ها بین این ابزارهاست تا بتوانید دستورات را بین سیستم‌ها ترجمه کنید.

نکات کلیدی

  • apt رابط اصلی روی دبیان و اوبونتو است؛ از apt-get برای اسکریپت‌نویسی و از apt-cache برای کوئری‌های سطح-پایین مثل policy و depends استفاده کنید.
  • پیکربندی مخازن: sources.list و add-apt-repository روی دبیان/اوبونتو؛ /etc/yum.repos.d/ و dnf config-manager روی راکی/فدورا/RHEL.
  • روی RHEL و CentOS، dnf جایگزین yum شده؛ از dnf remove (یا yum erase روی سیستم‌های قدیمی) برای حذف پکیج‌ها استفاده کنید.
  • امضای مخازن و پکیج‌ها را تأیید کنید: کلیدهای GPG در /usr/share/keyrings/ یا signed-by= برای apt؛ rpm --import برای dnf/yum.
  • dnf history list و dnf history undo امکان بازگشت (Rollback) نصب‌ها و ارتقاها را می‌دهند؛ apt و pkg بازگشت تراکنش داخلی ارائه نمی‌دهند.
  • مسائل وابستگی را با apt --fix-broken install روی دبیان/اوبونتو و dnf distro-sync روی سیستم‌های مبتنی بر dnf حل کنید—بعد از مرور با Dry Run یا --assumeno.
  • در پروداکشن، همیشه از Dry Run یا --assumeno استفاده کنید، ارتقاها را در پنجره‌های تغییر زمان‌بندی کنید و بعد از اعمال به‌روزرسانی‌ها سرویس‌ها را تأیید کنید.

سیستم‌های مدیریت پکیج: مرور کوتاه

فایل‌های پکیج، آرشیوهایی هستند که شامل اپلیکیشن‌های کامپایل‌شده، منابع و اسکریپت‌های نصب‌اند. متادیتا شامل وابستگی‌ها—فهرست پکیج‌های دیگرِ لازم برای نصب و اجرای آن‌ها—است. قالب‌ها و ابزارها بر اساس پلتفرم متفاوت‌اند:

پلتفرمقالب پکیجابزارهای اصلی
دبیان / اوبونتو.debapt، dpkg
راکی / فدورا / RHEL.rpmdnf (یا yum روی سیستم‌های قدیمی)
FreeBSD.txz (باینری)، Ports (سورس)pkg، مجموعه Ports

روی سیستم‌های مشتق از دبیان (اوبونتو، لینوکس مینت، راسپبیان)، apt رابط کاربری برای بیشتر عملیات‌هاست: جستجوی مخازن، نصب پکیج‌ها و وابستگی‌ها و مدیریت ارتقاها. dpkg سطح-پایین‌تر، فایل‌های .deb منفرد را نصب می‌کند و گاهی مستقیم استفاده می‌شود.

روی راکی لینوکس، فدورا و RHEL، dnf مدیر پکیج پیش‌فرض است. جایگزین yum شده و مجموعه دستورات سازگاری نگه می‌دارد. اگر سیستم‌های قدیمی RHEL یا CentOS را مدیریت می‌کنید، ممکن است هنوز از yum استفاده کنید؛ بخش «درک yum (RHEL و CentOS قدیمی)» را در پایین ببینید.

روی FreeBSD، pkg پکیج‌های باینری (معمولاً .txz) را مدیریت می‌کند. FreeBSD هم‌چنین مجموعه Ports را فراهم می‌کند؛ درختی از Makefileها برای ساخت نرم‌افزار از سورس. از pkg وقتی استفاده کنید که باینری وجود دارد؛ از Ports وقتی که پکیج از-پیش-کامپایل‌شده‌ای موجود نیست یا وقتی باید گزینه‌های زمان-کامپایل را تغییر دهید. کتاب FreeBSD هر دو را مستند کرده است.

apt در مقابل apt-get در مقابل apt-cache: چه زمانی از هر کدام استفاده کنیم

روی اوبونتو و سایر سیستم‌های مبتنی بر دبیان، apt، apt-get و apt-cache را دارید. از apt برای استفاده تعاملی و بیشتر وظایف روزمره استفاده کنید.

apt دستور یکپارچه‌ای است که عملیات‌های رایج را wrap می‌کند. رابط توصیه‌شده برای update، upgrade، install، remove، search و show است. خروجی شفاف‌تری می‌دهد و در نسخه‌های فعلی برای اسکریپت‌ها پایدار است.

از apt-get وقتی استفاده کنید که رفتاری را لازم دارید که فقط آن فراهم می‌کند؛ یا هنگام نوشتن اسکریپت‌هایی که باید روی سیستم‌های قدیمی یا مینیمال اجرا شوند. مثال‌ها: apt-get install -y برای نصب‌های غیرتعاملی، apt-get dist-upgrade برای حل تغییرات وابستگی‌ای که ممکن است پکیج‌ها را اضافه یا حذف کنند؛ و apt-get autoremove برای حذف وابستگی‌های سرگردان.

از apt-cache برای کوئری‌های سطح-پایینی استفاده کنید که apt به همان شکل افشا نمی‌کند. مثال‌ها: apt-cache policy package برای دیدن اینکه کدام نسخه نصب می‌شود و از کدام مخزن؛ و apt-cache depends package برای فهرست وابستگی‌ها. برای search و show، دستورات apt search و apt show معادل apt-cache search و apt-cache show هستند.

برای دیدن اینکه کدام نسخه نصب می‌شود و از کدام مخزن:

apt-cache policy curl
curl:
  Installed: 8.5.0-2ubuntu3
  Candidate: 8.5.0-2ubuntu3.4
  Version table:
     8.5.0-2ubuntu3.4 500
        500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages
 *** 8.5.0-2ubuntu3 100
        100 /var/lib/dpkg/status
apt-cache depends curl
curl
  Depends: libcurl4t64
  Depends: zlib1g
  Suggests: libcurl4-gnutls-dev

برای چک کردن اینکه کدام پکیج‌های نصب‌شده بعد از به‌روزرسانی ایندکس، ارتقای در انتظار دارند:

apt update && apt list --upgradable

خروجی دو بخش دارد. اول، apt update ایندکس را رفرش می‌کند (در پایین نمایش داده شده). سپس apt list --upgradable فهرست پکیج‌های نصب‌شده‌ای را که نسخه جدیدتری موجود است چاپ می‌کند:

Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease ...
...
Listing Done
curl/noble-updates 8.5.0-2ubuntu3.4 amd64 [upgradable from: 8.5.0-2ubuntu3]
libcurl4t64/noble-updates 8.5.0-2ubuntu3.4 amd64 [upgradable from: 8.5.0-2ubuntu3]

مدیریت مخازن

مخازن تعیین می‌کنند مدیر پکیج شما از کجا نرم‌افزار را واکشی می‌کند. آن‌ها را درست پیکربندی کنید تا پکیج‌ها و به‌روزرسانی‌های امنیتی درست را بگیرید.

دبیان و اوبونتو: /etc/apt/sources.list

روی دبیان و اوبونتو، پیکربندی مخازن در /etc/apt/sources.list و فایل‌های زیر /etc/apt/sources.list.d/ قرار دارد. هر خط نوعی (مثلاً deb برای باینری‌ها، deb-src برای سورس)، URL، ریلیز (مثلاً noble) و نام اجزا (مثلاً main universe) را تعیین می‌کند. این فایل‌ها را فقط با احتیاط ویرایش کنید؛ یک خط بد می‌تواند apt update را بشکند.

برای افزودن مخزنی از خط فرمان، از add-apt-repository (از پکیج software-properties-common) استفاده کنید. خط درست را الصاق و می‌تواند اختیاری apt update را اجرا کند:

sudo add-apt-repository ppa:owner/ppa-name
sudo apt update

هشدار: افزودن PPAها یا مخازن شخص ثالث می‌تواند پکیج‌های بررسی‌نشده نصب کند. منابع رسمی یا شناخته‌شده را ترجیح دهید و کلیدهای GPG را تأیید کنید.

برای افزودن دستی مخزن شخص ثالثی با فرمت مدرن signed-by، فایل جدیدی زیر /etc/apt/sources.list.d/ بسازید؛ به‌جای ویرایش مستقیم sources.list. مثلاً برای افزودن مخزن رسمی mainline مربوط به Nginx:

curl -fsSL https://nginx.org/keys/nginx_signing.key \
  | sudo gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg

سپس فایل مخزن را بسازید:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/mainline/ubuntu noble nginx" \
  | sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt update

هر فایل در sources.list.d/ تعریف مخزنِ خودکفایی است. نگه‌داشتن مخازن شخص ثالث در فایل‌های جدا، غیرفعال کردن یا حذف‌شان را بدون دست زدن به sources.list آسان‌تر می‌کند.

راکی، فدورا و RHEL: dnf config-manager

روی سیستم‌های مبتنی بر dnf، کانفیگ‌های مخازن زیر /etc/yum.repos.d/ هستند. مخزن جدیدی با dnf config-manager (از پکیج dnf-plugins-core) اضافه کنید:

sudo dnf config-manager --add-repo https://example.com/repo/repo-name.repo

مخزن موجودی را با نام فعال یا غیرفعال کنید:

sudo dnf config-manager --set-enabled repo-id
sudo dnf config-manager --set-disabled repo-id

شناسه‌های مخزن در فایل‌های .repo در /etc/yum.repos.d/ تعریف شده‌اند.

FreeBSD: /etc/pkg/ و مخازن سفارشی

روی FreeBSD، pkg پیکربندی مخزنش را از /etc/pkg/FreeBSD.conf برای مخزن رسمی پیش‌فرض و از فایل‌های زیر /usr/local/etc/pkg/repos/ برای مخازن سفارشی یا اضافی می‌خواند. FreeBSD.conf را مستقیم ویرایش نکنید؛ با ساخت فایلی در /usr/local/etc/pkg/repos/ آن را Override کنید.

برای افزودن مخزن سفارشی، فایل .confای در آن دایرکتوری بسازید:

sudo mkdir -p /usr/local/etc/pkg/repos
sudo vi /usr/local/etc/pkg/repos/repo-name.conf

فرمت فایل از این ساختار پیروی می‌کند:

repo-name: {
  url: "https://example.com/packages/${ABI}",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/fingerprints/repo-name",
  enabled: yes
}

بعد از افزودن فایل، ایندکس پکیج را به‌روز کنید تا تأیید شود pkg می‌تواند به مخزن جدید برسد:

sudo pkg update
Updating repo-name repository catalogue...
Fetching meta.conf: 100%
Fetching packagesite.pkg: 100%
Processing entries: 100%
repo-name repository update completed.

برای غیرفعال کردن مخزن پیش‌فرض FreeBSD بدون حذفش، فایل Override بسازید:

sudo vi /usr/local/etc/pkg/repos/FreeBSD.conf

این محتوا را اضافه کنید:

FreeBSD: {
  enabled: no
}

هشدار: غیرفعال کردن مخزن رسمی FreeBSD یعنی pkg فقط از منابع سفارشی پیکربندی‌شده‌تان نصب خواهد کرد. قبل از غیرفعال کردن پیش‌فرض، مطمئن شوید مخزن سفارشی‌تان کامل و مورد اعتماد است.

به‌روزرسانی فهرست پکیج‌ها

ایندکس محلی پکیج‌های موجود را قبل از نصب یا ارتقا به‌روز کنید. dnf ممکن است برای برخی عملیات‌ها متادیتا را خودکار رفرش کند؛ اما همیشه می‌توانید صریحاً برای به‌روزرسانی چک کنید.

سیستمدستور
دبیان / اوبونتوsudo apt update
راکی / فدورا / RHELdnf check-update
FreeBSD (پکیج‌ها)sudo pkg update
FreeBSD (Ports)بخش FreeBSD Ports در مقابل pkg را ببینید

مثال روی اوبونتو:

sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Hit:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease
Reading package lists... Done
Building dependency tree... Done

روی سیستم‌های مبتنی بر dnf، dnf check-update وقتی به‌روزرسانی‌ای نیست با کد ۰ و وقتی به‌روزرسانی موجود است با کد ۱۰۰ خارج می‌شود؛ که در اسکریپت‌ها مفید است.

درک yum (RHEL و CentOS قدیمی)

روی RHEL و CentOS ۷ و قدیمی‌تر، yum تنها مدیر پکیج موجود است. روی RHEL ۸، فدورا ۲۲ و نسخه‌های بعدتر، dnf جایگزین yum به‌عنوان پیش‌فرض شد. روی بیشتر سیستم‌های فعلی که dnf را عرضه می‌کنند، باینری yum یک Symlink یا سازوکار سازگاری به dnf اشاره می‌کند؛ پس دستورات yum همچنان کار می‌کنند اما dnf چیزی است که اجرا می‌شود.

فقط در این موارد صریحاً از yum استفاده کنید:

  • روی RHEL ۷، CentOS ۷ یا مشتق قدیمی‌تری هستید که dnf ندارد
  • اسکریپت یا ابزار خودکارسازی‌ای hardcode کرده yum را و نمی‌توانید تغییرش دهید

روی هر سیستمی که dnf موجود است، dnf را ترجیح دهید. مجموعه دستورات برای عملیات‌های رایج سازگار است؛ اما dnf تاریخچه تراکنش، حل وابستگی بهتر و پشتیبانی مخازن ماژولاری را اضافه می‌کند که yum ندارد.

اگر مطمئن نیستید کدام در حال اجراست، چک کنید:

which yum && yum --version
/usr/bin/yum
4.14.0
Installed: dnf-0:4.14.0-1.el9.noarch at ...

اگر خروجی نسخه به dnf ارجاع دهد، yum یک Wrapper است. برای نگاشت کامل دستورات، جدول مقایسه دستورات را در پایین ببینید.

ارتقای پکیج‌های نصب‌شده

مدیران پکیج، ارتقاهای موجود را از مخازن اعمال می‌کنند. اول فهرست پکیج را به‌روز کنید (بخش «به‌روزرسانی فهرست پکیج‌ها» را ببینید).

سیستمدستور
دبیان / اوبونتوsudo apt upgrade
راکی / فدورا / RHELsudo dnf upgrade
FreeBSD (پکیج‌ها)sudo pkg upgrade

روی دبیان و اوبونتو، apt upgrade به‌روزرسانی‌هایی را نصب می‌کند که مجموعه پکیج‌های نصب‌شده را تغییر نمی‌دهند. از apt full-upgrade (یا apt-get dist-upgrade) وقتی استفاده کنید که لازم است وابستگی‌های جدید یا حذف پکیج‌ها مجاز باشند. روی FreeBSD، ارتقای ports می‌تواند تغییرات شکست‌دهنده معرفی کند؛ قبل از ارتقا با ابزارهایی مثل portmaster، فایل /usr/ports/UPDATING را بخوانید.

هشدار: اجرای apt upgrade یا dnf upgrade روی سرور پروداکشن می‌تواند سرویس‌ها را ری‌استارت کند یا به‌روزرسانی‌های کرنلی اعمال کند که ریبوت لازم دارند. از Dry Run و پنجره‌های تغییر استفاده کنید.

پیدا کردن یک پکیج

بر اساس نام یا توضیحات جستجو کنید تا قبل از نصب، نام دقیق پکیج را به دست آورید.

سیستمدستور
دبیان / اوبونتوapt search search_string
راکی / فدورا / RHELdnf search search_string
FreeBSD (پکیج‌ها)pkg search search_string

نکته: روی راکی، فدورا یا RHEL، dnf search all هم نام‌های پکیج و هم توضیحات را جستجو می‌کند. روی FreeBSD، pkg search -D توضیحات را جستجو می‌کند.

apt search nginx
Sorting... Done
Full Text Search... Done
nginx/noble-updates 1.24.0-2ubuntu7 amd64
  small, powerful, scalable web/proxy server

nginx-common/noble-updates 1.24.0-2ubuntu7 all
  small, powerful, scalable web/proxy server - common files

اگر جستجو نتایج زیادی برگرداند، اول با جستجوی نام دقیق پکیج فیلتر کنید؛ سپس فقط در صورت نیاز به جستجوی توضیحات برگردید:

apt search --names-only nginx
Sorting... Done
Full Text Search... Done
nginx/noble-updates 1.24.0-2ubuntu7 amd64
  small, powerful, scalable web/proxy server

روی سیستم‌های مبتنی بر dnf، dnf search پیش‌فرض با نام‌ها و خلاصه‌ها تطبیق می‌یابد. برای شامل کردن توضیحات کامل:

dnf search all nginx

از نام دقیق پکیجِ نتایج جستجو هنگام اجرای دستورات install یا info استفاده کنید. نام‌های پکیج روی همه پلتفرم‌ها به بزرگی و کوچکی حروف حساس‌اند.

دیدن اطلاعات یک پکیج خاص

قبل از نصب، نسخه، توضیحات و وابستگی‌ها را بازرسی کنید.

سیستمدستور
دبیان / اوبونتوapt show package
راکی / فدورا / RHELdnf info package
FreeBSD (پکیج‌ها)pkg info package
FreeBSD (Ports)cd /usr/ports/category/port && cat pkg-descr

مثلاً برای بازرسی پکیج nginx قبل از نصب:

apt show nginx
Package: nginx
Version: 1.24.0-2ubuntu7
Priority: optional
Section: web
Installed-Size: 46.1 kB
Depends: nginx-common (= 1.24.0-2ubuntu7), iproute2
Suggests: fcgiwrap, nginx-doc, ssl-cert
Homepage: https://nginx.net
APT-Sources: http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages

فیلدهایی که قبل از نصب بیشترین اهمیت را دارند:

  • Version: تأیید می‌کند نسخه‌ای را می‌گیرید که انتظارش را دارید؛ نه نسخه قدیمی‌ترِ قابل‌توجهی از مخزن پایه
  • Depends: پکیج‌هایی که مدیر خودکار می‌کشد؛ اگر فضای دیسک محدود است مرورشان کنید
  • APT-Sources: نشان می‌دهد نسخه کاندیدا از کدام مخزن می‌آید؛ مفید وقتی چند مخزن همان نام پکیج را ارائه می‌دهند
  • Priority: مقدار optional برای نرم‌افزار قابل-نصب-توسط-کاربر استاندارد است و اقدامی لازم ندارد

نصب پکیج از مخازن

پکیجی و وابستگی‌هایش را با یک دستور نصب کنید. می‌توانید چند پکیج را فهرست کنید.

سیستمدستور
دبیان / اوبونتوsudo apt install package
راکی / فدورا / RHELsudo dnf install package
FreeBSD (پکیج‌ها)sudo pkg install package

مدیر پکیج وابستگی‌ها را قبل از درخواست تأیید، حل و فهرست می‌کند:

sudo apt install nginx
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libnginx-mod-http-geoip2 libnginx-mod-http-image-filter
  libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream
  libnginx-mod-stream-geoip2 nginx-common
The following NEW packages will be installed:
  libnginx-mod-http-geoip2 libnginx-mod-http-image-filter
  libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream
  libnginx-mod-stream-geoip2 nginx nginx-common
0 upgraded, 8 newly installed, 0 to remove and 12 not upgraded.
Do you want to continue? [Y/n]

نصب پکیج از فایل‌سیستم محلی

وقتی فایل پکیجِ دانلودشده دارید، آن را از دیسک نصب کنید. روی سیستم‌های مشتق از دبیان، dpkg یک .deb منفرد را نصب می‌کند؛ اگر وابستگی‌ها مفقودند، از gdebi استفاده کنید یا بعداً apt install -f را اجرا کنید تا رفع شوند. روی سیستم‌های مبتنی بر dnf، dnf install مسیر .rpm را می‌پذیرد و وابستگی‌ها را از مخازن پیکربندی‌شده حل می‌کند. روی FreeBSD، pkg add پکیج باینری محلی (مثلاً .txz) را نصب می‌کند.

سیستمدستور
دبیان / اوبونتوsudo dpkg -i package.deb
راکی / فدورا / RHELsudo dnf install package.rpm
FreeBSD (پکیج‌ها)sudo pkg add package.txz

نکته: روی دبیان و اوبونتو، اگر dpkg -i وابستگی‌های برآورده‌نشده گزارش کرد، sudo apt install -f را اجرا کنید تا از مخازن نصب‌شان کند؛ یا از gdebi package.deb استفاده کنید تا فایل را نصب و وابستگی‌ها را یک‌جا بکشد.

حذف یک یا چند پکیج نصب‌شده

حذف، پکیج را Uninstall می‌کند و بسته به ابزار و گزینه‌ها، ممکن است فایل‌های پیکربندی یا وابستگی‌های سرگردان را هم حذف کند.

سیستمدستور
دبیان / اوبونتوsudo apt remove package
راکی / فدورا / RHELsudo dnf remove package
FreeBSD (پکیج‌ها)sudo pkg delete package

روی سیستم‌های مبتنی بر dnf، از dnf remove استفاده کنید. روی سیستم‌های قدیمی که فقط yum دارند، yum erase package همین کار را می‌کند. برای حذف پکیج به‌همراه فایل‌های پیکربندی‌اش، از apt purge package استفاده کنید. از purge وقتی استفاده کنید که تخته‌پاک‌کنی می‌خواهید؛ مثلاً قبل از نصب مجدد سرویسی با پیکربندی متفاوت. از remove وقتی استفاده کنید که می‌خواهید فایل‌های کانفیگ موجود بمانند تا اگر دوباره نصب کردید، در دسترس باشند.

تأیید پکیج و امنیت

مخازن و پکیج‌ها اغلب امضا می‌شوند تا مدیر پکیج بتواند مبدأ و یکپارچگی را تأیید کند. کلیدهای بدپیکربندی‌شده یا مفقود می‌توانند به به‌روزرسانی‌های شکست‌خورده یا نصب‌های ناامن منجر شوند.

دبیان و اوبونتو

متادیتای مخزن با کلیدهای GPG تأیید می‌شود. کلیدها در /usr/share/keyrings/ یا /etc/apt/trusted.gpg.d/ ذخیره می‌شوند. افزودن مخزن معمولاً شامل افزودن کلید عمومی آن است. دستور قدیمی apt-key منسوخ شده؛ قرار دادن فایل‌های کلید در /usr/share/keyrings/ و ارجاع به آن‌ها در خط مخزن با signed-by= را ترجیح دهید.

بیشتر مخازن شخص ثالث، کلیدها را به‌صورت فایل‌های .asc با ASCII-armored توزیع می‌کنند. کلید را در یک قدم تبدیل و نصب کنید:

curl -fsSL https://example.com/repo-key.asc \
  | sudo gpg --dearmor -o /usr/share/keyrings/repo-key.gpg

سپس در تعریف مخزن (در sources.list یا فایلی زیر sources.list.d/) استفاده کنید:

deb [signed-by=/usr/share/keyrings/repo-key.gpg] https://example.com/apt release components

راکی، فدورا و RHEL

پکیج‌های RPM و متادیتای مخازن امضا می‌شوند. کلید GPG مخزنی را با rpm ایمپورت کنید:

sudo rpm --import https://example.com/repo-key.asc

کلیدها در دیتابیس rpm ذخیره می‌شوند. فایل‌های repo در /etc/yum.repos.d/ می‌توانند gpgcheck=1 و gpgkey= تعیین کنند تا dnf/yum پکیج‌ها را خودکار تأیید کند.

FreeBSD

pkg پکیج‌ها را با امضای مخزن تأیید می‌کند. مطمئن شوید از پیکربندی مخزن رسمی یا مورد اعتماد استفاده می‌کنید.

چه چیزی می‌تواند خراب شود: اگر apt update با خطای GPG یا امضا شکست بخورد، ممکن است کلید مخزن تغییر کرده یا URL مخزن اشتباه باشد. ورودی مشکل‌دار را در sources.list یا sources.list.d/ رفع یا حذف کنید. روی سیستم‌های dnf، کلید درست را با rpm --import ایمپورت یا مخزن را تا رفع شدن غیرفعال کنید.

بازگشت و تاریخچه

dnf تاریخچه تراکنش را نگه می‌دارد تا بتوانید نصب‌ها و ارتقاهای گذشته را ببینید و Undo کنید.

فهرست تراکنش‌های اخیر:

dnf history list
ID     | Command line             | Date and time    | Action(s)
-------+--------------------------+-----------------+-----------
     5 | install httpd            | YYYY-MM-DD HH:MM | Install
     4 | upgrade                  | YYYY-MM-DD HH:MM | Upgrade

تراکنشی را با شناسه Undo کنید (مثلاً آخرین ارتقا):

sudo dnf history undo id

از dnf history rollback id برای برگشتن به وضعیتِ بعد از تراکنش مشخصی استفاده کنید.

دبیان و اوبونتو apt بازگشت داخلی ارائه نمی‌دهد. می‌توانید نسخه قدیمی‌تری را از کش نصب مجدد کنید اگر هنوز موجود است؛ یا از ابزارهای اسنپ‌شات/بکاپ (مثلاً اسنپ‌شات‌های LVM یا بکاپ‌های سیستم) برای بازیابی وضعیت استفاده کنید. FreeBSD pkg هم تاریخچه تراکنش برای بازگشت ارائه نمی‌دهد؛ به بکاپ‌ها یا نصب مجدد نسخه‌های خاص پکیج تکیه کنید.

حل تعارض وابستگی

وابستگی‌های خراب، نصب یا ارتقای تمیز را مسدود می‌کنند. قبل از ادامه رفع‌شان کنید.

رفع وابستگی‌های خراب (دبیان و اوبونتو)

اگر dpkg یا apt وابستگی‌های خراب گزارش کردند، امتحان کنید:

sudo apt --fix-broken install

این سعی می‌کند پکیج‌هایی را نصب یا حذف کند تا وابستگی‌ها برآورده شوند. اگر مشکل ادامه یابد، apt install ممکن است حذف پکیج‌های متناقض را پیشنهاد کند؛ فهرست را قبل از تأیید مرور کنید. نگه‌داشتن پکیج‌ها با apt-mark hold package می‌تواند از ارتقاهای ناخواسته جلوگیری کند؛ اما اگر پکیج‌های دیگری به نسخه‌های جدیدتر وابسته باشند، می‌تواند به تعارض هم منجر شود.

هم‌راستا کردن با مخازن (راکی، فدورا و RHEL)

بعد از ارتقای ریلیز یا مخازن مخلوط، نسخه‌های پکیج می‌توانند از هم جدا شوند. dnf distro-sync پکیج‌های نصب‌شده را با چیزی که مخزن ارائه می‌کند هم‌راستا می‌کند (با Downgrade یا Upgrade در صورت نیاز):

sudo dnf distro-sync

وقتی استفاده کنید که ریلیز تغییر کرده یا وقتی مخازنی را فعال/غیرفعال کرده‌اید و تعارض وابستگی می‌گیرید. برای مسائل تک-پکیجی، dnf check و dnf repoquery می‌توانند به بازرسی وابستگی‌ها کمک کنند.

هشدار: dnf distro-sync می‌تواند پکیج‌ها را Downgrade کند. اول dnf distro-sync --assumeno را اجرا کنید تا تغییرات پیشنهادی را بدون اعمال‌شان ببینید.

بهترین روش‌های پروداکشن

روی سرورهای پروداکشن، با شبیه‌سازی تغییرات و اعمال به‌روزرسانی‌ها در پنجره‌های کنترل‌شده از غافلگیری اجتناب کنید.

اول Dry Run بگیرید. ببینید چه چیزی نصب یا ارتقا می‌شود بدون اعمال‌اش.

  • دبیان/اوبونتو: apt upgrade --dry-run (فقط شبیه‌سازی؛ apt سیستم را تغییر نمی‌دهد).
  • dnf: sudo dnf upgrade --assumeno (نشان می‌دهد چه انجام می‌شد؛ سپس بدون اعمال خارج می‌شود).
  • FreeBSD: pkg upgrade -n (حالت بدون-نصب).

به‌روزرسانی‌ها را زمان‌بندی کنید. ارتقاها را در پنجره‌های نگهداری اجرا کنید. فرض کنید به‌روزرسانی‌های کرنل یا کتابخانه ممکن است ریبوت یا ری‌استارت سرویس لازم داشته باشند.

بعد از به‌روزرسانی تأیید کنید. بعد از apt upgrade یا dnf upgrade، چک کنید سرویس‌های حیاتی در حال اجرا هستند و هیچ پکیجی به‌دلیل تعارض نگه داشته یا رد نشده. هر مسئله گزارش‌شده‌ای را قبل از ترک پنجره رفع کنید.

استیجینگ. همان مسیر ارتقا را روی سیستم استیجینگ یا سرور غیرحیاتی قبل از اعمال روی هاست‌های حیاتی پروداکشن تست کنید.

مثال: شبیه‌سازی ارتقا روی سیستم dnf بدون اعمالش:

sudo dnf upgrade --assumeno

فهرست پکیج‌ها را مرور کنید؛ سپس وقتی آماده اعمال هستید sudo dnf upgrade را اجرا کنید.

جدول مقایسه دستورات

از این جدول برای ترجمه بین چهار مدیر پکیج برای همان کار استفاده کنید.

کارapt (دبیان/اوبونتو)dnf (راکی/فدورا/RHEL)yum (قدیمی)pkg (FreeBSD)
به‌روزرسانی فهرست پکیج‌هاapt updatednf check-updateyum check-updatepkg update
ارتقای همه پکیج‌هاapt upgradednf upgradeyum updatepkg upgrade
جستجوapt search termdnf search termyum search termpkg search term
اطلاعات پکیجapt show pkgdnf info pkgyum info pkgpkg info pkg
نصب از مخزنapt install pkgdnf install pkgyum install pkgpkg install pkg
نصب فایل محلیdpkg -i file.debdnf install file.rpmyum localinstall file.rpmpkg add file.txz
حذف پکیجapt remove pkgdnf remove pkgyum erase pkgpkg delete pkg
تاریخچه تراکنش / بازگشتبدون داخلیdnf history list/undoمحدودبدون داخلی

FreeBSD Ports در مقابل pkg

pkg پکیج‌های باینری از-پیش-ساخته‌شده را از میرورهای FreeBSD نصب می‌کند. مجموعه Ports، درختی از Makefileها زیر /usr/ports است که نرم‌افزار را از سورس می‌سازد. از pkg وقتی استفاده کنید که باینری موجود است و گزینه‌های کامپایل سفارشی لازم ندارید؛ سریع‌تر است و از وابستگی‌های ساخت اجتناب می‌کند. از Ports وقتی استفاده کنید که باینری وجود ندارد، وقتی لازم است گزینه‌های port را فعال کنید (مثلاً فلگ‌های بیلد)؛ یا وقتی می‌خواهید برای ممیزی یا سفارشی‌سازی از سورس بسازید.

برای استفاده از Ports، درخت ports لازم دارید. portsnap روی نسخه‌های فعلی FreeBSD منسوخ شده. روش توصیه‌شده، نصب درخت از Git یا از رسانه‌های ریلیز است. برای Git:

git clone https://git.freebsd.org/ports.git /usr/ports

برای به‌روزرسانی درخت ports موجودِ Git:

cd /usr/ports && git pull

برای ساخت و نصب یک port، به دایرکتوری‌اش زیر /usr/ports بروید و اجرا کنید:

cd /usr/ports/category/port-name
make install clean
===>  Installing for port-name-version
===>  Registering installation for port-name-version
===>  Cleaning for port-name-version

برای پیکربندی گزینه‌های بیلد قبل از کامپایل:

make config

این منویی باز می‌کند که می‌توانید قابلیت‌های زمان-کامپایل را Toggle کنید. make config را قبل از make install clean اجرا کنید تا گزینه‌ها روی بیلد اعمال شوند.

هشدار: ساخت از Ports از سورس کامپایل می‌کند و می‌تواند به‌طور قابل‌توجهی طولانی‌تر از pkg install باشد؛ به‌ویژه برای پکیج‌های بزرگ مثل دیتابیس‌ها یا مرورگرها. وقتی باینری موجود است و گزینه‌های سفارشی لازم ندارید، از pkg install استفاده کنید.

پکیج‌های باینری از pkg همچنان پیش‌فرض برای بیشتر کاربران می‌مانند. از Ports وقتی استفاده کنید که باینری وجود ندارد یا نیاز به تغییر گزینه‌های زمان-کامپایل دارید.

گرفتن راهنما

صفحات man برای هر مدیر پکیج موجودند. از / برای جستجو درون صفحه و q برای خروج استفاده کنید.

سیستمدستور
دبیان / اوبونتوman apt یا man apt-get
راکی / فدورا / RHELman dnf
FreeBSD (پکیج‌ها)man pkg
FreeBSD (Ports)man ports

سوالات متداول

تفاوت apt و apt-get چیست؟

apt دستور سطح-بالای توصیه‌شده برای استفاده تعاملی است: update، upgrade، install، remove، search و show. apt-get رابط قدیمی‌تر است و همچنان برای اسکریپت‌نویسی (مثلاً apt-get install -y) و عملیاتی مثل dist-upgrade و autoremove استفاده می‌شود. هر دو از همان مخازن و دیتابیس پکیج استفاده می‌کنند.

چرا yum با dnf جایگزین شد؟

dnf (Dandified YUM) برای رفع سرعت حل وابستگی و مصرف حافظه yum و برای استفاده از کتابخانه‌های مدرن نوشته شد. فدورا dnf را به‌عنوان پیش‌فرض پذیرفت؛ RHEL و مشتقاتش (شامل راکی لینوکس) دنبالش کردند. dnf مجموعه دستورات سازگار با yum را نگه می‌دارد تا اسکریپت‌ها و عادت‌های موجود عمدتاً کار کنند.

آیا می‌توانم yum و dnf را به‌جای هم استفاده کنم؟

روی سیستم‌هایی که dnf عرضه می‌کنند، yum اغلب Symlink یا Wrapperای به dnf است؛ پس yum install و dnf install همین کار را می‌کنند. روی سیستم‌های قدیمی که فقط yum دارند، باید از yum استفاده کنید. dnf را جایی که موجود است ترجیح دهید؛ yum را برای RHEL/CentOS قدیمی‌تر یا وقتی ابزاری صریحاً انتظارش را دارد نگه دارید.

تفاوت پکیج‌های RPM و DEB چیست؟

RPM (Red Hat Package Manager) توسط فدورا، RHEL، راکی لینوکس و توزیع‌های مرتبط استفاده می‌شود؛ پکیج‌ها پسوند .rpm دارند. DEB توسط دبیان، اوبونتو و مشتقات استفاده می‌شود؛ پکیج‌ها پسوند .deb دارند. هر دو آرشیوی از فایل‌ها به‌علاوه متادیتا و وابستگی‌ها هستند؛ قابل تبدیل به هم نیستند. هر خانواده ابزارهای خودش را دارد: dnf/yum و rpm برای RPM؛ و apt و dpkg برای DEB.

چطور همه پکیج‌ها را امن روی سرور پروداکشن به‌روز کنم؟

فهرست پکیج‌ها را به‌روز کنید؛ سپس Dry Run بگیرید یا از --assumeno (dnf) یا -n (pkg) استفاده کنید تا ببینید چه چیزی تغییر می‌کند. ارتقای واقعی را در پنجره نگهداری زمان‌بندی کنید. بعد از ارتقا، تأیید کنید سرویس‌های حیاتی در حال اجرا هستند و هیچ مسئله وابستگی یا نگه‌داشته‌شده‌ای نمانده. وقتی ممکن است، همان ارتقا را روی سیستم استیجینگ تست کنید.

pkg در FreeBSD چیست و چه تفاوتی با مدیران پکیج لینوکس دارد؟

pkg مدیر پکیج باینری FreeBSD است. پکیج‌های .txz از-پیش-ساخته‌شده را از مخازن نصب می‌کند؛ از نظر نقش مشابه apt یا dnf. تفاوت‌ها: pkg از apt یا dnf استفاده نمی‌کند؛ فرمت مخزن و کانفیگ خودش را دارد؛ تاریخچه تراکنش برای بازگشت ندارد؛ و FreeBSD هم‌چنین مجموعه Ports را برای ساخت از سورس ارائه می‌دهد که به همان شکل معادل مستقیمی در لینوکس ندارد.

چطور ارتقای پکیج را در dnf برگردانم؟

dnf history list را اجرا کنید تا شناسه‌های تراکنش را ببینید؛ سپس sudo dnf history undo id برای Undo کردن آن تراکنش. از dnf history rollback id برای برگشتن به وضعیت بعد از تراکنش مشخصی استفاده کنید.

اگر وابستگی‌ها تعارض داشته باشند چه اتفاقی می‌افتد؟

مدیر پکیج نصب یا ارتقا را رد می‌کند و تعارض را گزارش می‌دهد. روی دبیان/اوبونتو، sudo apt --fix-broken install را برای تلاش در حل اجرا کنید؛ ممکن است لازم باشد پکیج‌های متناقض را حذف یا نسخه‌شان را تغییر دهید. روی سیستم‌های dnf، dnf distro-sync می‌تواند بعد از تغییر ریلیز، پکیج‌ها را با مخزن هم‌راستا کند؛ اول dnf distro-sync --assumeno برای پیش‌نمایش اجرا کنید.

نتیجه‌گیری و مطالعه بیشتر

این راهنما مرجعی چندپلتفرمی برای مدیریت پکیج با apt، dnf، yum و pkg فراهم می‌کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا