From Fedora Project Wiki

Revision as of 16:18, 28 June 2011 by Jlaska (talk | contribs) (Adjusted wording in problem resolution section)

What Is Depcheck?

Depcheck was created to detect packages with broken dependencies. As the test matures, it will eventually be a part of the rel-eng process to prevent broken packages from being pushed to the testing or stable package repositories.

How Does Depcheck Work?

Describing exactly how depcheck functions is outside the scope of this page but the basic idea is to trick yum into thinking that all available packages are installed and attempt to install the package under test. If there are problems installing that package, depcheck assumes that those errors are dependency problems and fails the error-causing package.

For more detailed information on depcheck, there are several blog posts about its internals ([1] [2] [3] [4]).

Understanding Failures

Missing requirements

Looking at an example log, we see the following highlight:

matahari-lib-0.4.1-2.fc14.i686 from pending has depsolving problems
  --> Package: matahari-lib-0.4.1-2.fc14.i686 (pending)
  -->     Requires: libsigar.so

In this case, matahari requires the shared library libsigar.so. At the time the test ran, the shared library libsigar.so was not provided by any available package.

"Not Found" errors

Look at the following excerpt:

SKIPBROKEN:  --> Package: erlang-js-0.5.0-2.fc15.x86_64 (f15)
  -->     Requires: libjs.so.1()(64bit)
  -->     Removing: js-1.70-13.fc15.x86_64 (f15)
  -->         libjs.so.1()(64bit)
  -->     Updated By: 1:js-1.8.5-6.fc15.x86_64 (pending)
  -->         Not found

Build erlang-js-0.5.0-2.fc15.x86_64 has broken dependencies. It requires libjs.so.1()(64bit) which is provided by js-1.70-13.fc15.x86_64. But the js package is about to be updated (as part of this or some other update request) to 1:js-1.8.5-6.fc15.x86_64. And the latter build does not provide libjs.so.1()(64bit), thus it is marked as Not found.

Let's confirm:

$ repoquery -q --provides js-1.70-13.fc15.x86_64  | grep libjs
libjs = 1.70-13.fc15
libjs.so.1()(64bit)
$ repoquery -q --provides js-1.8.5-6.fc15.x86_64  | grep libjs
libjs = 1.8.5-6.fc15

As you can see, by updating the js package the dependencies of erlang-js would be broken and that it the reason why depcheck rejected this update.

Fixing Failures

Fortunately, the fixes for depcheck errors tend to be relatively straight-forward and tend to fall into one of two categories listed below.

  1. Problems caused by your package
    Examine any changes to Provides, Requires or BuildRequires. Ensure correct spelling of all dependencies and confirm that any changed requirements do resolve for the appropriate release. The command repoquery is helpful to track dependencies. If the dependencies of your package have not changed, it's possible that other packages are no longer satisfying the dependencies as expected. Read below for further guidance.
  2. Problems caused by other package(s)
    If your package failed because the dependencies of other packages changed (features they were providing changed or were removed), update the requirements of your package or consult with maintainers of the corresponding packages.

Getting Help

If you still don't understand why your update failed the test, if you think there's something wrong in our test or its documentation or if you have any other suggestions, please contact us.

Additional Information