YUM2DNF(8) DNF YUM2DNF(8)

yum2dnf - تغییرات DNF در مقایسه با YUM

برای دستور install:

گزینه --skip-broken یک نام مستعار (alias) برای --setopt=strict=0 است. هر دو گزینه را می‌توان در DNF استفاده کرد تا تمام بسته‌های در دسترس‌نبوده یا بسته‌های با وابستگی‌های خرابِ داده‌شده به DNF بدون ایجاد خطایی که کل عملیات را با شکست مواجه کند، نادیده گرفته شوند. این رفتار را می‌توان به عنوان پیش‌فرض در فایل dnf.conf تنظیم کرد. گزینه پیکربندی strict را ببینید <#strict-label>.

برای دستور upgrade:

رفتاری که قرار بود در YUM با --skip-broken فعال شود، اکنون به طور پیش‌فرض برای dnf update ساده تنظیم شده است. نیازی به استفاده از --skip-broken همراه با دستور dnf upgrade نیست. برای استفاده از تنها جدیدترین نگارش بسته‌ها در تراکنش‌ها، گزینه خط فرمان --best وجود دارد.

اجرای dnf update یا dnf upgrade در تمام اشکال آن‌ها، تأثیر یکسانی در DNF دارد و مورد دوم ترجیح داده می‌شود. در YUM دستور yum upgrade دقیقاً مشابه yum --obsoletes update بود.

گزینه clean_requirements_on_remove <#clean-requirements-on-remove-label> در DNF به طور پیش‌فرض روشن (فعال) است. بنابراین مقایسه نتایج عملیات "remove" بین DNF و YUM ممکن است گمراه‌کننده باشد، زیرا DNF به طور پیش‌فرض اغلب بسته‌های بیشتری را حذف خواهد کرد.

نسخه YUM این دستور صرفاً به دلایل سازگاری با نسخه‌های قدیمی (legacy) حفظ شده است. کاربر می‌تواند به سادگی از dnf provides استفاده کند تا دریابد چه بسته‌ای یک پرونده خاص را ارائه می‌دهد.

یک جایگزین برای دستور deplist در YUM جهت پیدا کردن وابستگی‌های یک بسته، dnf repoquery --deplist با استفاده از دستور repoquery است <#repoquery-command-label>.

نکته:

همچنین یک پشتیبانی سازگاری با YUM وجود دارد که در آن yum deplist نام مستعاری برای دستور dnf repoquery --deplist است.

ابزار YUM استثناها (excludes) را فقط در هنگام نصب و ارتقا اعمال می‌کند. DNF این مورد را به تمام عملیات‌ها، از جمله حذف (erasing) و فهرست‌گیری (listing) تعمیم می‌دهد. اگر برای مثال می‌خواهید فهرستی از تمام بسته‌های نصب‌شده python-f* به جز بسته‌های Flask را مشاهده کنید، دستور زیر کار خواهد کرد:

dnf -x '*flask*' list installed 'python-f*'

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

پس از مهاجرت UsrMove https://fedoraproject.org/wiki/Features/UsrMove، دایرکتوری /bin در سیستم‌های فدورا وجود ندارد و هیچ فایلی در آنجا نصب نمی‌شود؛ /bin صرفاً یک پیوند نمادین (symlink) ایجادشده توسط بسته filesystem است که به /usr/bin اشاره دارد. تبدیل پیوندهای نمادین به مسیر واقعی آنها تنها این احساس نادرست را به کاربر می‌داد که این دستور به درستی کار می‌کند، در حالی که در واقع درخواست‌های provides با استفاده از الگوها (globs) مانند:

dnf provides /b*/<file>

همچنان با شکست مواجه خواهند شد (همان‌طور که اکنون در YUM نیز چنین است). برای پیدا کردن بسته‌ای که یک فایل باینری خاص را ارائه می‌دهد، از مسیر واقعی باینری‌ها در فدورا استفاده کنید:

dnf provides /usr/bin/<file>

همچنین گزارش باگ‌های مربوطه در فدورا به شماره‌های 982947 https://bugzilla.redhat.com/show_bug.cgi?id=982947 و 982664 https://bugzilla.redhat.com/show_bug.cgi?id=982664 را ببینید.

در برخی توزیع‌ها، DNF همراه با skip_if_unavailable=True در فایل پیکربندی DNF عرضه می‌شود <#conf-ref-label>. دلیل این تغییر آن است که مخازن شخص ثالث اغلب ممکن است در دسترس نباشند. بدون این تنظیم در فایل پیکربندی مخزن مربوطه، YUM بلافاصله هنگام بروز خطای همگام‌سازی مخزن متوقف می‌شود که این امر موجب سردرگمی و ناراحتی کاربر می‌گردد.

گزارش باگ مرتبط در فدورا به شماره 984483 را ببینید https://bugzilla.redhat.com/show_bug.cgi?id=984483.

این گزینه پیکربندی حذف شده است. هنگامی که DNF چندین گروه با شناسه گروهی (group ID) یکسان را مشاهده می‌کند، محتویات گروه‌ها را با یکدیگر ادغام می‌کند.

جهت ساده‌سازی امور برای کاربر، DNF از metadata_expire هم برای انقضای فراداده (متادیتا) و هم برای انقضای فایل فهرست آینه‌ها (mirrorlist - که خود نوعی متادیتا است) استفاده می‌کند.

بخش زیر از yum.conf(5) دیگر برای گزینه mirrorlist اعمال نمی‌شود:

به عنوان یک راهکار ویژه (hack)، اگر نشانی URL گزینه mirrorlist حاوی کلمه "metalink" باشد، مقدار mirrorlist در metalink کپی می‌شود (در صورتی که metalink تنظیم نشده باشد).

فایل‌های پیکربندی مخازن مربوطه برای رعایت این موضوع اصلاح شده‌اند؛ گزارش باگ مرتبط در فدورا به شماره 948788 را ببینید https://bugzilla.redhat.com/show_bug.cgi?id=948788.

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

حذف این گزینه پیکربندی با معناشناسی مبهم، موجب ساده‌سازی پیکربندی شده است. DNF به گونه‌ای عمل می‌کند که گویی این گزینه غیرفعال است. اگر کاربر می‌خواست همه چیز را به آخرین نسخه ارتقا دهد، به سادگی از dnf upgrade استفاده می‌کرد.

از آنجا که DNF استفاده همزمان از سایر مدیرهای بسته را مجاز می‌داند، این احتمال وجود دارد که تمام تغییرات اعمال‌شده در پایگاه داده RPM (RPMDB) در تاریخچه تراکنش‌ها ثبت نشده باشند. بنابراین، DNF در صورت مواجهه با چنین شرایطی دچار خطا و توقف نمی‌شود و در نتیجه گزینه force دیگر مورد نیاز نیست.

گاهی اوقات نیاز است که یک بسته نصب‌شده حذف شده و با بسته دیگری که همان قابلیت‌ها را ارائه می‌دهد جایگزین شود، در حالی که بسته‌های دیگر وابسته به این قابلیت‌ها همچنان نصب بمانند. برای انجام این کار بدون از بین بردن (موقت) یکپارچگی پایگاه داده بسته‌ها، می‌توان عملیات حذف و نصب را در قالب یک تراکنش واحد انجام داد. روش معمول برای تنظیم چنین تراکنشی در DNF استفاده از dnf shell یا استفاده از گزینه --allowerasing است.

برای مثال فرض کنید می‌خواهید بسته A (ارائه‌دهنده P) را با بسته B (که آن هم ارائه‌دهنده P است و با A تداخل دارد) جایگزین کنید بدون اینکه در این فرایند بسته C (که نیازمند P است) حذف شود. از دستور زیر استفاده کنید:

dnf --allowerasing install B

این دستور معادل yum swap A B است.

ابزار DNF دستور swap را ارائه می‌دهد اما تنها ساختار دستوری dnf swap A B پشتیبانی می‌شود.

در طول مرحله حل وابستگی‌ها (depsolving)، ابزار YUM خطوطی مشابه موارد زیر چاپ می‌کند:

---> Package rubygem-rhc.noarch 0:1.16.9-1.fc19 will be an update
--> Processing Dependency: rubygem-net-ssh-multi >= 1.2.0 for package: rubygem-rhc-1.16.9-1.fc19.noarch

ابزار DNF چنین اطلاعاتی را در خروجی نمایش نمی‌دهد. دلیل فنی این است که حل‌کننده وابستگی زیربنایی DNF همیشه تمام وابستگی‌ها را برای کاندیداهای به‌روزرسانی بررسی می‌کند و خروجی بسیار طولانی خواهد شد. ثانیاً، حتی در YUM نیز این خروجی به‌سرعت بسیار گیج‌کننده می‌شد (به‌ویژه برای تراکنش‌های بزرگ) و بنابراین آسیب آن بیش از فایده‌اش بود.

گزارش باگ مرتبط در فدورا به شماره 1044999 را ببینید https://bugzilla.redhat.com/show_bug.cgi?id=1044999.

هنگامی که دستوری مانند زیر اجرا می‌شود:

yum provides sandbox

ابزار YUM راهکارهای اکتشافی (heuristics) اضافه‌ای را اعمال می‌کند تا متوجه شود منظور کاربر از sandbox چه بوده است؛ به عنوان مثال مقادیر متغیر محیطی PATH را به صورت متوالی به ابتدای آن اضافه می‌کند تا بررسی کند آیا با فایلی که توسط بسته‌ای ارائه شده مطابقت دارد یا خیر. این یک رفتار مستندنشده است که DNF از آن تقلید نمی‌کند. برای رسیدن به نتایج مشابه معمولاً به سادگی از این دستور استفاده کنید:

dnf provides /usr/bin/sandbox

یا حتی:

dnf provides '*/sandbox'

تا نتایج مشابهی به دست آورید.

ابزار DNF از گزینه‌های throttle و bandwidth که از YUM شناخته شده‌اند پشتیبانی می‌کند. بر خلاف YUM، هنگامی که چندین دانلود به طور همزمان اجرا می‌شوند، سرعت کل دانلود محدود می‌شود. این کار در YUM امکان‌پذیر نبود زیرا فرایندهای دانلودکننده در پروسه‌های متفاوتی اجرا می‌شدند.

در مقایسه با YUM، ابزار DNF مقادیر فهرست‌شده از گزینه پیکربندی installonlypkgs را به مقادیر پیش‌فرض DNF الحاق (append) می‌کند، در حالی که YUM مقادیر پیش‌فرض را با مقادیر این گزینه بازنویسی و جایگزین می‌کند.

گزینه بولی deltarpm مشخص می‌کند که آیا از فایل‌های دلتا آر‌پی‌ام (delta RPM) استفاده شود یا خیر. در مقایسه با YUM، ابزار DNF از گزینه deltarpm_percentage پشتیبانی نمی‌کند و در عوض مقدار بهینه‌ای از نسبت DRPM/RPM را انتخاب می‌کند تا تصمیم بگیرد آیا استفاده از deltarpm در شرایط مشخص‌شده منطقی است یا خیر.

اگر دستوری اجرا شود که درخواست عملیات نصب روی یک فایل محلی .srpm را داشته باشد، DNF با خطا زودتر متوقف خواهد شد:

$ dnf install fdn-0.4.17-1.fc20.src.rpm tour-4-6.noarch.rpm
Error: Will not install a source rpm package (fdn-0.4.17-1.fc20.src).

همین موضوع برای مشخصات بسته‌هایی که با هیچ بسته موجودی مطابقت ندارند نیز صدق می‌کند.

ابزار YUM در این حالت تنها یک هشدار صادر کرده و به نصب بسته "tour" ادامه می‌دهد. منطق پشت این رفتار در DNF این است که یک برنامه در صورتی که نتواند دستور خط فرمان را به‌طور کامل اجرا کند، باید با خطا متوقف شود.

اگر بسته Y بسته X را منسوخ (obsolete) کند، DNF به طور جادویی درخواست نصب بسته X را به نصب بسته Y تغییر نمی‌دهد. ابزار YUM در صورت فعال بودن گزینه پیکربندی obsoletes این کار را انجام می‌دهد، اما این رفتار به درستی مستند نشده و می‌تواند آسیب‌رسان باشد.

گزارش باگ مرتبط در فدورا به شماره 1096506 https://bugzilla.redhat.com/show_bug.cgi?id=1096506 و دستورالعمل‌های تغییر نام و منسوخ‌سازی بسته‌ها در فدورا را ببینید http://fedoraproject.org/wiki/Upgrade_paths_%E2%80%94_renaming_or_splitting_packages.

ابزار DNF رفتار قابل پیش‌بینی‌تری برای installroot ارائه می‌دهد. DNF مسیر را نسبت به گزینه خط فرمان --config متفاوت مدیریت می‌کند، جایی که این مسیر همیشه وابسته به سیستم میزبان (host) است (YUM این مسیر را با installroot ترکیب می‌کرد). مدیریت Reposdir نیز اندکی متفاوت است؛ اگر یکی از مسیرهای reposdirs در داخل installroot وجود داشته باشد، آنگاه مخازن دقیقاً از installroot دریافت می‌شوند (YUM هر مسیر را از reposdir به طور جداگانه بررسی می‌کرد و در صورت وجود، از مسیر installroot استفاده می‌کرد). توضیحات تفصیلی مربوط به گزینه --installroot <#installroot-label> را ببینید.

ابزار DNF پس از نمایش جدول تراکنش قابلیت دانلود را ارائه نمی‌دهد. این ابزار فقط از کاربر می‌پرسد که آیا تراکنش ادامه یابد یا خیر. اگر فردی بخواهد بسته‌ها را دانلود کند، می‌تواند از دستور 'download' استفاده کند.

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

ترجمه‌ها به بخشی از هسته اصلی DNF تبدیل شده‌اند و دیگر نیازی به مدیریت بسته‌های زبان به صورت جداگانه نیست.

زیردستورهای زیر حذف شده‌اند:

  • langavailable
  • langinstall
  • langremove
  • langlist
  • langinfo

دستورات dnf history list و dnf history info در DNF زمانی که نتوانند تراکنش‌هایی را برای بسته مشخص‌شده پیدا کنند، وضعیت خروج صفر (zero exit status) بازمی‌گردانند.

این رفتار متفاوت از دستورات معادل در YUM یعنی yum history package-list و yum history list است که هر دو در صورت عدم یافتن تراکنش برای بسته مشخص‌شده، وضعیت خروج غیرصفر بازمی‌گردانند.


ابزار اصلی YUM دستور/گزینه DNF بسته
yum check dnf repoquery <#repoquery-command-label> --unsatisfied dnf
yum-langpacks dnf
yum-plugin-aliases dnf alias <#alias-command-label> dnf
yum-plugin-auto-update-debug-info گزینه در debuginfo-install.conf dnf-plugins-core
yum-plugin-changelog dnf-plugins-core
yum-plugin-copr dnf copr https://dnf-plugins-core.readthedocs.io/en/latest/copr.html dnf-plugins-core
yum-plugin-fastestmirror گزینه fastestmirror در dnf.conf https://dnf.readthedocs.io/en/latest/conf_ref.html dnf
yum-plugin-fs-snapshot dnf-plugins-extras-snapper
yum-plugin-local dnf-plugins-core
yum-plugin-merge-conf dnf-plugins-extras-rpmconf
yum-plugin-post-transaction-actions dnf-plugins-core
yum-plugin-priorities گزینه priority در dnf.conf https://dnf.readthedocs.io/en/latest/conf_ref.html dnf
yum-plugin-remove-with-leaves dnf autoremove <#autoremove-command-label> dnf
yum-plugin-show-leaves dnf-plugins-core
yum-plugin-tmprepo گزینه --repofrompath dnf
yum-plugin-tsflags گزینه tsflags در dnf.conf https://dnf.readthedocs.io/en/latest/conf_ref.html dnf
yum-plugin-versionlock python3-dnf-plugin-versionlock
yum-rhn-plugin dnf-plugin-spacewalk

پلاگین‌هایی که هنوز منتقل (پورت) نشده‌اند:

yum-plugin-filter-data, yum-plugin-keys, yum-plugin-list-data, yum-plugin-protectbase, yum-plugin-ps, yum-plugin-puppetverify, yum-plugin-refresh-updatesd, yum-plugin-rpm-warm-cache, yum-plugin-upgrade-helper, yum-plugin-verify

اگر به قابلیت خاصی نیاز دارید، می‌توانید یک درخواست ویژگی جدید (RFE) https://github.com/rpm-software-management/dnf/wiki/Bug-Reporting#new-feature-request ثبت کنید.

تمامی ابزارهای پورت‌شده YUM اکنون به عنوان پلاگین‌های DNF پیاده‌سازی شده‌اند.

ابزار اصلی YUM دستور جدید DNF بسته
debuginfo-install dnf debuginfo-install https://dnf-plugins-core.readthedocs.io/en/latest/debuginfo-install.html dnf-plugins-core
find-repos-of-install dnf list installed https://dnf.readthedocs.io/en/latest/command_ref.html dnf
needs-restarting dnf tracer https://dnf-plugins-extras.readthedocs.io/en/latest/tracer.html dnf-plugins-extras-tracer
package-cleanup dnf list <#list-command-label>, dnf repoquery <#repoquery-command-label> dnf, dnf-plugins-core
repoclosure dnf repoclosure https://dnf-plugins-core.readthedocs.io/en/latest/repoclosure.html dnf-plugins-extras-repoclosure
repodiff dnf repodiff https://dnf-plugins-core.readthedocs.io/en/latest/repodiff.html dnf-plugins-core
repo-graph dnf repograph https://dnf-plugins-core.readthedocs.io/en/latest/repograph.html dnf-plugins-extras-repograph
repomanage dnf repomanage https://dnf-plugins-core.readthedocs.io/en/latest/repomanage.html dnf-plugins-extras-repomanage
repoquery dnf repoquery <#repoquery-command-label> dnf
reposync dnf reposync https://dnf-plugins-core.readthedocs.io/en/latest/reposync.html dnf-plugins-core
repotrack dnf download https://dnf-plugins-core.readthedocs.io/en/latest/download.html --resolve --alldeps dnf-plugins-core
yum-builddep dnf builddep https://dnf-plugins-core.readthedocs.io/en/latest/builddep.html dnf-plugins-core
yum-config-manager dnf config-manager https://dnf-plugins-core.readthedocs.io/en/latest/config_manager.html dnf-plugins-core
yum-debug-dump dnf debug-dump https://dnf-plugins-core.readthedocs.io/en/latest/debug.html dnf-plugins-extras-debug
yum-debug-restore dnf debug-restore https://dnf-plugins-core.readthedocs.io/en/latest/debug.html dnf-plugins-extras-debug
yumdownloader dnf download https://dnf-plugins-core.readthedocs.io/en/latest/download.html dnf-plugins-core

جدول تفصیلی جایگزینی برای package-cleanup:

package-cleanup --dupes dnf repoquery --duplicates
package-cleanup --leaves dnf repoquery --unneeded
package-cleanup --orphans dnf repoquery --extras
package-cleanup --problems dnf repoquery --unsatisfied
package-cleanup --cleandupes dnf remove --duplicates
package-cleanup --oldkernels dnf remove --oldinstallonly
package-cleanup --oldkernels --keep=2 dnf remove $(dnf repoquery --installonly --latest-limit=-2)

ابزار DNF جایگزین مستقیمی برای دستورات yum-updateonboot و yum-cron ندارد. با این حال، نتیجه مشابه را می‌توان با استفاده از دستور dnf automatic به دست آورد (به DNF Automatic <> مراجعه کنید).

می‌توانید از میانبر زیر استفاده کنید:

$ systemctl enable --now dnf-automatic-install.timer

یا گزینه apply_updates را در فایل /etc/dnf/automatic.conf روی True تنظیم کرده و از واحد تایمر عمومی استفاده کنید:

$ systemctl enable --now dnf-automatic.timer

تایمر در هر دو حالت، ۱ ساعت پس از بوت شدن سیستم فعال شده و سپس به‌طور تکرارشونده هر ۲۴ ساعت یک‌بار اجرا می‌شود. همچنین یک تاخیر تصادفی به مدت ۵ دقیقه روی این تایمرها تنظیم شده است. این مقادیر را می‌توان از طریق فایل‌های پیکربندی dnf-automatic*.timer واقع در دایرکتوری /usr/lib/systemd/system/ تغییر داد.

repo-rss, show-changed-rco, show-installed, verifytree, yum-groups-manager

به بخش پرسش‌های متداول (FAQ) https://dnf.readthedocs.io/en/latest/user_faq.html درباره مهاجرت از YUM به DNF نگاهی بیندازید. اگر به قابلیتی نیاز دارید که هنوز وجود ندارد، می‌توانید یک درخواست ویژگی جدید (RFE) https://github.com/rpm-software-management/dnf/wiki/Bug-Reporting#new-feature-request ثبت کنید.

فایل AUTHORS را در توزیع کد منبع DNF ببینید.

2012-2020, Red Hat, تحت مجوز GPLv2+

December 17, 2025 4.24.0