Re: Fedora 31 Self-Contained Change proposal: DNF Make Best Mode the Default

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 27, 2019 at 11:25 AM Ben Cotton <bcotton@xxxxxxxxxx> wrote:
>
> https://fedoraproject.org/wiki/Changes/DNF_Default_Best
>
> == Summary ==
> Currently, DNF prefers clean dependency resolution over package updates;
> a package (almost) silently won't get updated to a newer version if the new
> version has dependency problems. DNF will be changed to prefer updates and fail
> if they have dependency resolution issues, while the failure has a
> temporal or permanent workaround
> hint for users who want to use the older behavior.
>
> == Owner ==
> * Name: [[User:jmracek| Jaroslav Mracek]]
> * Email: jmracek@xxxxxxxxxx
>
>
> == Detailed Description ==
> Change the built-in default value of the `best` configuration option
> from `0` (false) to `1` (true).
>
> As a result, unless `best` is overridden in the `/etc/dnf/dnf.conf`
> file or using `--setopt`, it will default to `1`. As a convenience, we
> will also put the explicit `best=1` assignment in the shipped
> `/etc/dnf/dnf.conf` file for better transparency, and introduce the
> new `--nobest` command-line switch.
>
> The purpose of the `--nobest` switch (as a shorthand for
> `--setopt=best=0`) is to make it easy for the user to override the
> default setting when needed, and it will also be
> [https://github.com/rpm-software-management/dnf/pull/1311/commits/9a3e8fd0da49291d30fd1fef527cffb0bf3f047d#diff-6c823931c6d150295e5011fac6529ab9R144
> suggested] in the DNF output when a dependency error occurs.
>
> Relevant excerpt from the updated `dnf.conf(5)`:
> <pre>
> best  boolean
> When upgrading a package, always try to install its highest version
> available, even only to find out some of its deps are not satisfiable.
> Enable this if you want to experience broken dependencies in the
> repositories firsthand. The default is True.
> </pre>
>
> Relevant excerpt from the updated `dnf(8)`:
> <pre>
> --nobest
> Set best option as false, therefore transactions are not limited to
> only best candidates.
> </pre>
>
> '''Change in DNF output - missing vim-enhanced-2:8.1.1561-1.fc30'''
>
> Original output. DNF succeed with return code 0:
> <pre>
> sudo dnf upgrade
> Last metadata expiration check: 2:16:40 ago on Mon 24 Jun 2019 04:27:16 PM CEST.
> Dependencies resolved.
>
>  Problem: package vim-enhanced-2:8.1.1471-1.fc30.x86_64 requires
> vim-common = 2:8.1.1471-1.fc30, but none of the providers can be
> installed
>   - cannot install both vim-common-2:8.1.1561-1.fc30.x86_64 and
> vim-common-2:8.1.1471-1.fc30.x86_64
>   - problem with installed package vim-enhanced-2:8.1.1471-1.fc30.x86_64
>   - cannot install the best update candidate for package
> vim-common-2:8.1.1471-1.fc30.x86_64
>   - package vim-enhanced-2:8.1.1561-1.fc30.x86_64 is excluded
> ===================================================================================================================================
>  Package                        Architecture               Version
>                            Repository                   Size
> ===================================================================================================================================
> Skipping packages with conflicts:
> (add '--best --allowerasing' to command line to force their upgrade):
>  vim-common                     x86_64
> 2:8.1.1561-1.fc30                      updates                     6.7
> M
>
> Transaction Summary
> ===================================================================================================================================
> Skip  1 Package
>
> Nothing to do.
> Complete!
> </pre>
>
> Output after the change. DNF fails with return code 1, but proposing
> `--nobest` option as an option to resolve the issue:
> <pre>
> sudo dnf upgrade
> Last metadata expiration check: 2:16:36 ago on Mon 24 Jun 2019 04:27:16 PM CEST.
> Error:
>  Problem: package vim-enhanced-2:8.1.1471-1.fc30.x86_64 requires
> vim-common = 2:8.1.1471-1.fc30, but none of the providers can be
> installed
>   - cannot install both vim-common-2:8.1.1561-1.fc30.x86_64 and
> vim-common-2:8.1.1471-1.fc30.x86_64
>   - problem with installed package vim-enhanced-2:8.1.1471-1.fc30.x86_64
>   - cannot install the best update candidate for package
> vim-common-2:8.1.1471-1.fc30.x86_64
>   - package vim-enhanced-2:8.1.1561-1.fc30.x86_64 is excluded
> (try to add '--allowerasing' to command line to replace conflicting
> packages or '--skip-broken' to skip uninstallable packages or
> '--nobest' to use not only best candidate packages)
> </pre>
>
> '''Q&A'''
>
> Can be a default of the best configuration option overwritten easily
> and permanently by user?
> Yes, just add `best=false` to `/etc/dnf/dnf.conf`
> <pre>
> [main]
> best=False
> </pre>
>
> Can be a default of the best configuration option overwritten easily
> from commandline?
> Yes, just add `--nobest` to command
> <pre>
> dnf upgrade --nobest
> </pre>
>
> What about PackageKit and Gnome Software?
> <pre>
> PackageKit and Gnome Software will be not affected by the change. In
> case that the same behavior will be desired for PackageKit, It will
> require changes in PackageKit code.
> </pre>
>
> What about Microdnf?
> <pre>
> Microdnf will be not affected by the change. There is a plan to unify
> functional parity and behavior DNF with Microdnf but not before Fedora
> 33.
> </pre>
>
>
> == Benefit to Fedora ==
>
> This change allows the users to be properly notified when a package
> cannot be upgraded to the latest version, instead of silently ignoring
> it as an upgrade candidate.
>
> Right now, when DNF runs in `best=0` mode, if a package cannot be
> upgraded due to dependency problems, it is skipped and a warning is
> printed in the transaction summary table. However, this poses a risk
> of important security fixes being overlooked by the user in case they
> are broken for some reason, such as due to a repository
> misconfiguration or inconsistency within the metadata itself.
>
> Moreover, since DNF always exits with the return code `0` (success)
> when in `best=0` mode, this mode is especially risky in automated
> scripts invoking DNF in `assumeyes` mode in which case such
> unsuccessful package upgrades could easily go unnoticed unless the
> logs are manually examined after the fact.
>
> The new behavior is also more in line with the generally accepted
> software development practice of failing early and failing fast.
>
> As a secondary benefit, broken upgrade paths in the Fedora
> repositories will hopefully be noticed, reported and therefore fixed
> sooner. Although, we would prefer if such problems would be detected
> before we ship them to users.
>
> '''Summary of benefits:'''
>
> # No silently passed problems with updates
> # Broken dependencies faster disappear from Fedora distribution
> # Problems will be reported more often - opportunity to fix issues
> # Increase in stability of Fedora distribution
> # Less issues after branching
> # Identical behavior of DNF in all distributions - Fedora/RHEL/Mageia/OpenSuse
>
> == Scope ==
> * Proposal owners:
> The change is already part of the upstream (dnf-4.1.0) and reverted in
> Fedora downstream. The change was composed by following pull requests:
>
> https://github.com/rpm-software-management/libdnf/pull/678<br>
> https://github.com/rpm-software-management/dnf/pull/1311<br>
> https://github.com/rpm-software-management/dnf/pull/1316<br>
> https://github.com/rpm-software-management/dnf/pull/1319
>
> We would like to stop the reverting the changes.
>
> * Other developers: N/A (not a System Wide Change)
> * Policies and guidelines: N/A (not a System Wide Change)
> * Trademark approval: N/A (not needed for this Change)
>
> == Upgrade/compatibility impact ==
> N/A (not a System Wide Change)
>
> == How To Test ==
> N/A (not a System Wide Change)
>
> == User Experience ==
> Broken upgrades are recognized early, enabling the users to act upon
> them by double-checking their repository configuration or filing bugs,
> instead of assuming no upgrades are available.
>

So, while it *is* true that Mageia, OpenMandriva, and openSUSE are
shipping with this feature for DNF, the experience isn't what I
consider optimal. I would like to see user experience improvements as
part of making this change. Specifically, when such a dependency error
occurs, I would like to see it prompt the user on what to do, rather
than forcing them to re-run the whole thing over again with a switch
like `--no-best` (which is a terrible name...) or `--allowerasing`.

Zypper offers this capability, so I know libsolv provides a way to do
it. There's no reason DNF can't do that too.

Moreover, this change impacts all consumers of the DNF Python API,
including dnfdragora (through dnfdaemon). The behavior change needs to
be validated with that tool as well, and there's no way to run a
transaction with another flag from that program, so adjustments are
likely necessary there.




--
真実はいつも一つ!/ Always, there's only one truth!
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux