1YUM2DNF(8) DNF YUM2DNF(8)
2
3
4
6 yum2dnf - Changes in DNF compared to YUM
7
9 For install command:
10
11 The --skip-broken option is an alias for --setopt=strict=0. Both op‐
12 tions could be used with DNF to skip all unavailable packages or pack‐
13 ages with broken dependencies given to DNF without raising an error
14 causing the whole operation to fail. This behavior can be set as de‐
15 fault in dnf.conf file. See strict conf option.
16
17 For upgrade command:
18
19 The semantics that were supposed to trigger in YUM with --skip-broken
20 are now set for plain dnf update as a default. There is no need to use
21 --skip-broken with the dnf upgrade command. To use only the latest ver‐
22 sions of packages in transactions, there is the --best command line
23 switch.
24
26 Invoking dnf update or dnf upgrade, in all their forms, has the same
27 effect in DNF, with the latter being preferred. In YUM yum upgrade was
28 exactly like yum --obsoletes update.
29
31 The clean_requirements_on_remove switch is on by default in DNF. It can
32 thus be confusing to compare the "remove" operation results between DNF
33 and YUM as by default DNF is often going to remove more packages.
34
36 The YUM version of this command is maintained for legacy reasons only.
37 The user can just use dnf provides to find out what package provides a
38 particular file.
39
41 An alternative to the YUM deplist command to find out dependencies of a
42 package is dnf repoquery --deplist using repoquery command.
43
44 NOTE:
45 Alternatively there is a YUM compatibility support where yum deplist
46 is alias for dnf repoquery --deplist command
47
49 YUM only respects excludes during installs and upgrades. DNF extends
50 this to all operations, among others erasing and listing. If you e.g.
51 want to see a list of all installed python-f* packages but not any of
52 the Flask packages, the following will work:
53
54 dnf -x '*flask*' list installed 'python-f*'
55
57 Inclusion of other configuration files in the main configuration file
58 is no longer supported.
59
61 After UsrMove there's no directory /bin on Fedora systems and no files
62 get installed there, /bin is only a symlink created by the filesystem
63 package to point to /usr/bin. Resolving the symlinks to their real path
64 would only give the user a false sense that this works, while in fact
65 provides requests using globs such as:
66
67 dnf provides /b*/<file>
68
69 will fail still (as they do in YUM now). To find what provides a par‐
70 ticular binary, use the actual path for binaries on Fedora:
71
72 dnf provides /usr/bin/<file>
73
74 Also see related Fedora bugzillas 982947 and 982664.
75
77 In some distributions DNF is shipped with skip_if_unavailable=True in
78 the DNF configuration file. The reason for the change is that
79 third-party repositories can often be unavailable. Without this setting
80 in the relevant repository configuration file YUM immediately stops on
81 a repository synchronization error, confusing and bothering the user.
82
83 See the related Fedora bug 984483.
84
86 This config option has been dropped. When DNF sees several groups with
87 the same group ID it merges the groups' contents together.
88
90 To simplify things for the user, DNF uses metadata_expire for both ex‐
91 piring metadata and the mirrorlist file (which is a kind of metadata
92 itself).
93
95 The following part of yum.conf(5) no longer applies for the mirrorlist
96 option:
97 As a special hack if the mirrorlist URL contains the word "metalink"
98 then the value of mirrorlist is copied to metalink (if metalink is
99 not set).
100
101 The relevant repository configuration files have been fixed to respect
102 this, see the related Fedora bug 948788.
103
105 Unsupported to simplify the configuration.
106
108 Dropping this config option with blurry semantics simplifies the con‐
109 figuration. DNF behaves as if this was disabled. If the user wanted to
110 upgrade everything to the latest version she'd simply use dnf upgrade.
111
113 Since DNF tolerates the use of other package managers, it is possible
114 that not all changes to the RPMDB are stored in the history of transac‐
115 tions. Therefore, DNF does not fail if such a situation is encountered
116 and thus the force option is not needed anymore.
117
119 Time after time one needs to remove an installed package and replace it
120 with a different one, providing the same capabilities while other pack‐
121 ages depending on these capabilities stay installed. Without (tran‐
122 siently) breaking consistency of the package database this can be done
123 by performing the remove and the install in one transaction. The common
124 way to set up such a transaction in DNF is to use dnf shell or use the
125 --allowerasing switch.
126
127 E.g. say you want to replace A (providing P) with B (also providing P,
128 conflicting with A) without deleting C (which requires P) in the
129 process. Use:
130
131 dnf --allowerasing install B
132
133 This command is equal to yum swap A B.
134
135 DNF provides swap command but only dnf swap A B syntax is supported
136
138 During its depsolving phase, YUM outputs lines similar to:
139
140 ---> Package rubygem-rhc.noarch 0:1.16.9-1.fc19 will be an update
141 --> Processing Dependency: rubygem-net-ssh-multi >= 1.2.0 for package: rubygem-rhc-1.16.9-1.fc19.noarch
142
143 DNF does not output information like this. The technical reason is that
144 depsolver below DNF always considers all dependencies for update candi‐
145 dates and the output would be very long. Secondly, even in YUM this
146 output gets confusing very quickly especially for large transactions
147 and so does more harm than good.
148
149 See the related Fedora bug 1044999.
150
152 When one executes:
153
154 yum provides sandbox
155
156 YUM applies extra heuristics to determine what the user meant by sand‐
157 box, for instance it sequentially prepends entries from the PATH envi‐
158 ronment variable to it to see if it matches a file provided by some
159 package. This is an undocumented behavior that DNF does not emulate.
160 Just typically use:
161
162 dnf provides /usr/bin/sandbox
163
164 or even:
165
166 dnf provides '*/sandbox'
167
168 to obtain similar results.
169
171 DNF supports the throttle and bandwidth options familiar from YUM.
172 Contrary to YUM, when multiple downloads run simultaneously the total
173 downloading speed is throttled. This was not possible in YUM since
174 downloaders ran in different processes.
175
177 Compared to YUM, DNF appends list values from the installonlypkgs con‐
178 fig option to DNF defaults, where YUM overwrites the defaults by option
179 values.
180
182 The boolean deltarpm option controls whether delta RPM files are used.
183 Compared to YUM, DNF does not support deltarpm_percentage and instead
184 chooses some optimal value of DRPM/RPM ratio to decide whether using
185 deltarpm makes sense in the given case.
186
188 DNF will terminate early with an error if a command is executed re‐
189 questing an installing operation on a local .srpm file:
190
191 $ dnf install fdn-0.4.17-1.fc20.src.rpm tour-4-6.noarch.rpm
192 Error: Will not install a source rpm package (fdn-0.4.17-1.fc20.src).
193
194 The same applies for package specifications that do not match any
195 available package.
196
197 YUM will only issue a warning in this case and continue installing the
198 "tour" package. The rationale behind the result in DNF is that a pro‐
199 gram should terminate with an error if it can not fulfill the CLI com‐
200 mand in its entirety.
201
203 DNF will not magically replace a request for installing package X to
204 installing package Y if Y obsoletes X. YUM does this if its obsoletes
205 config option is enabled but the behavior is not properly documented
206 and can be harmful.
207
208 See the related Fedora bug 1096506 and guidelines for renaming and ob‐
209 soleting packages in Fedora.
210
212 DNF offers more predictable behavior of installroot. DNF handles the
213 path differently from the --config command-line option, where this path
214 is always related to the host system (YUM combines this path with in‐
215 stallroot). Reposdir is also handled slightly differently, if one path
216 of the reposdirs exists inside of installroot, then repos are strictly
217 taken from installroot (YUM tests each path from reposdir separately
218 and use installroot path if existed). See the detailed description for
219 --installroot option.
220
222 DNF doesn't provide download functionality after displaying transaction
223 table. It only asks user whether to continue with transaction or not.
224 If one wants to download packages, they can use the 'download' command.
225
227 DNF lists all packages from all repos, which means there can be dupli‐
228 cates package names (with different repo name). This is due to provid‐
229 ing users possibility to choose preferred repo.
230
232 Translations became part of core DNF and it is no longer necessary to
233 manage individual language packs.
234
235 Following sub-commands were removed:
236
237 • langavailable
238
239 • langinstall
240
241 • langremove
242
243 • langlist
244
245 • langinfo
246
247 ┌───────────────────────┬─────────────────────┬─────────────────────────┐
248 │Original YUM tool │ DNF command/option │ Package │
249 ├───────────────────────┼─────────────────────┼─────────────────────────┤
250 │yum check │ dnf repoquery --un‐ │ dnf │
251 │ │ satisfied │ │
252 ├───────────────────────┼─────────────────────┼─────────────────────────┤
253 │yum-langpacks │ │ dnf │
254 ├───────────────────────┼─────────────────────┼─────────────────────────┤
255 │yum-plugin-aliases │ dnf alias │ dnf │
256 ├───────────────────────┼─────────────────────┼─────────────────────────┤
257 │yum-plugin-auto-up‐ │ option in debug‐ │ dnf-plugins-core │
258 │date-debug-info │ info-install.conf │ │
259 ├───────────────────────┼─────────────────────┼─────────────────────────┤
260 │yum-plugin-changelog │ │ dnf-plugins-core │
261 ├───────────────────────┼─────────────────────┼─────────────────────────┤
262 │yum-plugin-copr │ dnf copr │ dnf-plugins-core │
263 └───────────────────────┴─────────────────────┴─────────────────────────┘
264
265 │yum-plugin-fastest‐ │ fastestmirror op‐ │ dnf │
266 │mirror │ tion in dnf.conf │ │
267 ├───────────────────────┼─────────────────────┼─────────────────────────┤
268 │yum-plugin-fs-snap‐ │ │ dnf-plugins-ex‐ │
269 │shot │ │ tras-snapper │
270 ├───────────────────────┼─────────────────────┼─────────────────────────┤
271 │yum-plugin-local │ │ dnf-plugins-core │
272 ├───────────────────────┼─────────────────────┼─────────────────────────┤
273 │yum-plugin-merge-conf │ │ dnf-plugins-ex‐ │
274 │ │ │ tras-rpmconf │
275 ├───────────────────────┼─────────────────────┼─────────────────────────┤
276 │yum-plugin-post-trans‐ │ │ dnf-plugins-core │
277 │action-actions │ │ │
278 ├───────────────────────┼─────────────────────┼─────────────────────────┤
279 │yum-plugin-priorities │ priority option in │ dnf │
280 │ │ dnf.conf │ │
281 ├───────────────────────┼─────────────────────┼─────────────────────────┤
282 │yum-plugin-re‐ │ dnf autoremove │ dnf │
283 │move-with-leaves │ │ │
284 ├───────────────────────┼─────────────────────┼─────────────────────────┤
285 │yum-plugin-show-leaves │ │ dnf-plugins-core │
286 ├───────────────────────┼─────────────────────┼─────────────────────────┤
287 │yum-plugin-tmprepo │ --repofrompath op‐ │ dnf │
288 │ │ tion │ │
289 ├───────────────────────┼─────────────────────┼─────────────────────────┤
290 │yum-plugin-tsflags │ tsflags option in │ dnf │
291 │ │ dnf.conf │ │
292 ├───────────────────────┼─────────────────────┼─────────────────────────┤
293 │yum-plugin-versionlock │ │ python3-dnf-plugin-ver‐ │
294 │ │ │ sionlock │
295 ├───────────────────────┼─────────────────────┼─────────────────────────┤
296 │yum-rhn-plugin │ │ dnf-plugin-spacewalk │
297 └───────────────────────┴─────────────────────┴─────────────────────────┘
298
299 Plugins that have not been ported yet:
300
301 yum-plugin-filter-data, yum-plugin-keys, yum-plugin-list-data,
302 yum-plugin-protectbase, yum-plugin-ps, yum-plugin-puppetverify,
303 yum-plugin-refresh-updatesd, yum-plugin-rpm-warm-cache, yum-plugin-up‐
304 grade-helper, yum-plugin-verify
305
306 Feel free to file an RFE for missing functionality if you need it.
307
308 All ported YUM tools are now implemented as DNF plugins.
309
310 ┌───────────────────┬─────────────────────┬─────────────────────┐
311 │Original YUM tool │ New DNF command │ Package │
312 ├───────────────────┼─────────────────────┼─────────────────────┤
313 │debuginfo-install │ dnf debuginfo-in‐ │ dnf-plugins-core │
314 │ │ stall │ │
315 ├───────────────────┼─────────────────────┼─────────────────────┤
316 │find-repos-of-in‐ │ dnf list installed │ dnf │
317 │stall │ │ │
318 ├───────────────────┼─────────────────────┼─────────────────────┤
319 │needs-restarting │ dnf tracer │ dnf-plugins-ex‐ │
320 │ │ │ tras-tracer │
321 ├───────────────────┼─────────────────────┼─────────────────────┤
322 │package-cleanup │ dnf list, dnf repo‐ │ dnf, dnf-plug‐ │
323 │ │ query │ ins-core │
324 ├───────────────────┼─────────────────────┼─────────────────────┤
325 │repoclosure │ dnf repoclosure │ dnf-plugins-ex‐ │
326 │ │ │ tras-repoclosure │
327 ├───────────────────┼─────────────────────┼─────────────────────┤
328 │repodiff │ dnf repodiff │ dnf-plugins-core │
329 └───────────────────┴─────────────────────┴─────────────────────┘
330
331 │repo-graph │ dnf repograph │ dnf-plugins-ex‐ │
332 │ │ │ tras-repograph │
333 ├───────────────────┼─────────────────────┼─────────────────────┤
334 │repomanage │ dnf repomanage │ dnf-plugins-ex‐ │
335 │ │ │ tras-repomanage │
336 ├───────────────────┼─────────────────────┼─────────────────────┤
337 │repoquery │ dnf repoquery │ dnf │
338 ├───────────────────┼─────────────────────┼─────────────────────┤
339 │reposync │ dnf reposync │ dnf-plugins-core │
340 ├───────────────────┼─────────────────────┼─────────────────────┤
341 │repotrack │ dnf download --re‐ │ dnf-plugins-core │
342 │ │ solve --alldeps │ │
343 ├───────────────────┼─────────────────────┼─────────────────────┤
344 │yum-builddep │ dnf builddep │ dnf-plugins-core │
345 ├───────────────────┼─────────────────────┼─────────────────────┤
346 │yum-config-manager │ dnf config-manager │ dnf-plugins-core │
347 ├───────────────────┼─────────────────────┼─────────────────────┤
348 │yum-debug-dump │ dnf debug-dump │ dnf-plugins-ex‐ │
349 │ │ │ tras-debug │
350 ├───────────────────┼─────────────────────┼─────────────────────┤
351 │yum-debug-restore │ dnf debug-restore │ dnf-plugins-ex‐ │
352 │ │ │ tras-debug │
353 ├───────────────────┼─────────────────────┼─────────────────────┤
354 │yumdownloader │ dnf download │ dnf-plugins-core │
355 └───────────────────┴─────────────────────┴─────────────────────┘
356
357 Detailed table for package-cleanup replacement:
358
359 ┌───────────────────────────┬────────────────────────────┐
360 │package-cleanup --dupes │ dnf repoquery --duplicates │
361 ├───────────────────────────┼────────────────────────────┤
362 │package-cleanup --leaves │ dnf repoquery --unneeded │
363 ├───────────────────────────┼────────────────────────────┤
364 │package-cleanup --orphans │ dnf repoquery --extras │
365 ├───────────────────────────┼────────────────────────────┤
366 │package-cleanup --problems │ dnf repoquery --unsatis‐ │
367 │ │ fied │
368 ├───────────────────────────┼────────────────────────────┤
369 │package-cleanup --cle‐ │ dnf remove --duplicates │
370 │andupes │ │
371 ├───────────────────────────┼────────────────────────────┤
372 │package-cleanup --oldker‐ │ dnf remove --oldinstal‐ │
373 │nels │ lonly │
374 ├───────────────────────────┼────────────────────────────┤
375 │package-cleanup --oldker‐ │ dnf remove $(dnf repoquery │
376 │nels --keep=2 │ --installonly --lat‐ │
377 │ │ est-limit=-2) │
378 └───────────────────────────┴────────────────────────────┘
379
381 DNF does not have a direct replacement of yum-updateonboot and yum-cron
382 commands. However, the similar result can be achieved by dnf automatic
383 command (see DNF Automatic).
384
385 You can either use the shortcut:
386
387 $ systemctl enable --now dnf-automatic-install.timer
388
389 Or set apply_updates option of /etc/dnf/automatic.conf to True and use
390 generic timer unit:
391
392 $ systemctl enable --now dnf-automatic.timer
393
394 The timer in both cases is activated 1 hour after the system was booted
395 up and then repetitively once every 24 hours. There is also a random
396 delay on these timers set to 5 minutes. These values can be tweaked via
397 dnf-automatic*.timer config files located in the /usr/lib/systemd/sys‐
398 tem/ directory.
399
401 repo-rss, show-changed-rco, show-installed, verifytree, yum-groups-man‐
402 ager
403
404 Take a look at the FAQ about YUM to DNF migration. Feel free to file an
405 RFE for missing functionality if you need it.
406
408 See AUTHORS in DNF source distribution.
409
411 2012-2023, Red Hat, Licensed under GPLv2+
412
413
414
415
4164.18.2 Dec 08, 2023 YUM2DNF(8)