اصول مدیریت پکیج: 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استفاده کنید، ارتقاها را در پنجرههای تغییر زمانبندی کنید و بعد از اعمال بهروزرسانیها سرویسها را تأیید کنید.
سیستمهای مدیریت پکیج: مرور کوتاه
فایلهای پکیج، آرشیوهایی هستند که شامل اپلیکیشنهای کامپایلشده، منابع و اسکریپتهای نصباند. متادیتا شامل وابستگیها—فهرست پکیجهای دیگرِ لازم برای نصب و اجرای آنها—است. قالبها و ابزارها بر اساس پلتفرم متفاوتاند:
| پلتفرم | قالب پکیج | ابزارهای اصلی |
|---|---|---|
| دبیان / اوبونتو | .deb | apt، dpkg |
| راکی / فدورا / RHEL | .rpm | dnf (یا 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 |
| راکی / فدورا / RHEL | dnf 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 |
| راکی / فدورا / RHEL | sudo 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 |
| راکی / فدورا / RHEL | dnf 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 |
| راکی / فدورا / RHEL | dnf 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 |
| راکی / فدورا / RHEL | sudo 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 |
| راکی / فدورا / RHEL | sudo dnf install package.rpm |
| FreeBSD (پکیجها) | sudo pkg add package.txz |
نکته: روی دبیان و اوبونتو، اگر
dpkg -iوابستگیهای برآوردهنشده گزارش کرد،sudo apt install -fرا اجرا کنید تا از مخازن نصبشان کند؛ یا ازgdebi package.debاستفاده کنید تا فایل را نصب و وابستگیها را یکجا بکشد.
حذف یک یا چند پکیج نصبشده
حذف، پکیج را Uninstall میکند و بسته به ابزار و گزینهها، ممکن است فایلهای پیکربندی یا وابستگیهای سرگردان را هم حذف کند.
| سیستم | دستور |
|---|---|
| دبیان / اوبونتو | sudo apt remove package |
| راکی / فدورا / RHEL | sudo 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 update | dnf check-update | yum check-update | pkg update |
| ارتقای همه پکیجها | apt upgrade | dnf upgrade | yum update | pkg upgrade |
| جستجو | apt search term | dnf search term | yum search term | pkg search term |
| اطلاعات پکیج | apt show pkg | dnf info pkg | yum info pkg | pkg info pkg |
| نصب از مخزن | apt install pkg | dnf install pkg | yum install pkg | pkg install pkg |
| نصب فایل محلی | dpkg -i file.deb | dnf install file.rpm | yum localinstall file.rpm | pkg add file.txz |
| حذف پکیج | apt remove pkg | dnf remove pkg | yum erase pkg | pkg 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 |
| راکی / فدورا / RHEL | man 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 فراهم میکند.




