Bug 1416518

Summary: anaconda kickstart should ignore package conflicts instead of crashing in transaction check
Product: [Fedora] Fedora Reporter: Edgar Hoch <edgar.hoch>
Component: anacondaAssignee: Anaconda Maintenance Team <anaconda-maint-list>
Status: CLOSED EOL QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: low Docs Contact:
Priority: unspecified    
Version: 25CC: anaconda-maint-list, g.kaviyarasu, jonathan, mkolman, vanmeeuwen+fedora, vponcova
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2017-12-12 10:45:41 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
kickstart file (without sensitive data) none

Description Edgar Hoch 2017-01-25 16:52:46 UTC
Description of problem:

Anaconda should ignore packages with conflicting files and continue the automatic installation but must not crash!

Anaconda should print a warning to the logs, but should continue without these packages, and should not produce a traceback.

The following is an extract of /tmp/anaconda.log of a kickstart installation of Fedora 25 x86_64 booted netinst image from Everything by pxe. I have provided the server dvd extracted to a directory by nfs and defined "repo --name=fedora" and "repo --name=updates". The package list include package groups which contain vim-minimal and vim-common as mandatory packages.


02:40:40,070 DEBUG anaconda: running handleException
02:40:40,072 CRIT anaconda: Traceback (most recent call last):

  File "/usr/lib64/python3.5/site-packages/pyanaconda/threads.py", line 251, in run
    threading.Thread.run(self, *args, **kwargs)

  File "/usr/lib64/python3.5/threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)

  File "/usr/lib64/python3.5/site-packages/pyanaconda/install.py", line 245, in doInstall
    payload.install()

  File "/usr/lib64/python3.5/site-packages/pyanaconda/packaging/dnfpayload.py", line 856, in install
    raise packaging.PayloadError(msg)

pyanaconda.packaging.PayloadError: Payload error - 'quit' was received before 'post': Transaction check error:
  file /usr/share/man/man1/vim.1.gz conflicts between attempted installs of vim-common-2:7.4.1989-2.fc25.x86_64 and vim-minimal-2:8.0.206-1.fc25.x86_64

Error Summary
-------------
Traceback (most recent call last):
  File "/usr/lib64/python3.5/site-packages/pyanaconda/packaging/dnfpayload.py", line 236, in do_transaction
    base.do_transaction(display=display)
  File "/usr/lib/python3.5/site-packages/dnf/base.py", line 591, in do_transaction
    self._trans_error_summary(errstring))
dnf.exceptions.Error: Transaction check error:
  file /usr/share/man/man1/vim.1.gz conflicts between attempted installs of vim-common-2:7.4.1989-2.fc25.x86_64 and vim-minimal-2:8.0.206-1.fc25.x86_64


I currently don't know which of the packages in my kickstart list require the older version vim-common-2:7.4.1989-2.fc25 instead of vim-common-8.0.206-1.fc25. 


Version-Release number of selected component (if applicable):
Fedora 25 x86_64 anaconda 25.20.8-1

How reproducible:
Theoretical sometimes - depending of packages released to updates repository
Actual in the last days - always...

Comment 1 Edgar Hoch 2017-01-25 16:57:12 UTC
Created attachment 1244318 [details]
kickstart file (without sensitive data)

Comment 2 Edgar Hoch 2017-01-25 20:20:00 UTC
I found by try and error that package polymake causes the error described above.

See bug #1415548 .

I think, in this case anaconda should either exclude both packages, or try to find the packages with causes the dependency error and excludes these, or try to determine which packages are mandatory, default and optional and exclude first the optional packages, then the default and at last the mandatory packages from the installation list. Anaconda should try to install the system with the best (greatest?) set of packages from the kickstart file - ignored packages can be installed later. It is much simpler for an admin to install packages on a running system and to search for dependency errors than trying to find the error in a crashed kickstarted system! Moreover the error message of anaconda doesn't show the package that really causes the dependency error!

Comment 3 Edgar Hoch 2017-01-25 21:11:14 UTC
Note:
Excluding polymake in kickstart file ks.cfg with the line

-polymake

was not sufficient to resolve the dependencies. Anaconda has still included polymake in the package installation list (I didn't find out why) and ignores my exclude direction!

I have replaced

@engineering-and-scientific --optional

with

@engineering-and-scientific

now kickstart installs without this error.

I guess that other optional packages of group engineering-and-scientific require polymake...

In this case anaconda should also exclude packages that require polymake (the package causing the conflicting package versions of vim-minimal and vim-common). I know this is not a trivial algorithm...

Comment 4 Edgar Hoch 2017-01-26 02:57:28 UTC
FYI: After installation was done as in comment #3 I did the following:

# dnf group mark remove engineering-and-scientific
# dnf group install with-optional engineering-and-scientific

This told me which packages will be skipped because of conflicts.
Now I had build a new kickstart file with the following exclusions.
Kickstart installation has run successful with this configuration.

@engineering-and-scientific --optional
-Singular
-libqhull_r
-ocaml-tplib-tools
-polymake
-qepcad-B
-qhull
-saclib
-surf-geometry
-sympol-libs

Comment 5 Edgar Hoch 2017-01-26 03:11:28 UTC
I want to mention that I see a similar problem in dnf.

For example, if you want to install all python packages, and want to use

dnf -y install 'python*'

this will not work. dnf terminates with file conflict errors similar to the description of this bug.

In both cases the error occurs in the transaction check, after dnf or anaconda has selected the list of packages to install.

But crashing is still not a good solution. Maybe that dnf and anaconda has to go back a step and do package selection again, excluding conflicting packages (as described in comment #2)?

Comment 6 Fedora End Of Life 2017-12-12 10:45:41 UTC
Fedora 25 changed to end-of-life (EOL) status on 2017-12-12. Fedora 25 is
no longer maintained, which means that it will not receive any further
security or bug fix updates. As a result we are closing this bug.

If you can reproduce this bug against a currently maintained version of
Fedora please feel free to reopen this bug against that version. If you
are unable to reopen this bug, please file a new report against the
current release. If you experience problems, please add a comment to this
bug.

Thank you for reporting this bug and we are sorry it could not be fixed.