m (Consistent punctiation) |
("Not Found" errors) |
||
Line 11: | Line 11: | ||
= Understanding Failures = | = Understanding Failures = | ||
== Missing requirements == | |||
Looking at an [http://tflink.fedorapeople.org/autoqa/prettylog/depcheck_example_error.html example log], we see the following highlight: | Looking at an [http://tflink.fedorapeople.org/autoqa/prettylog/depcheck_example_error.html example log], we see the following highlight: | ||
<pre> | <pre> | ||
matahari-lib-0.4.1-2.fc14.i686 from pending has depsolving problems | matahari-lib-0.4.1-2.fc14.i686 from pending has depsolving problems | ||
--> Package: matahari-lib-0.4.1-2.fc14.i686 (pending) | --> Package: matahari-lib-0.4.1-2.fc14.i686 (pending) | ||
--> Requires: libsigar.so | --> Requires: libsigar.so | ||
</pre> | </pre> | ||
In this case, {{package|matahari}} requires the shared library {{filename|libsigar.so}}. At the time the test ran, the shared library {{filename|libsigar.so}} was not provided by any available package. | In this case, {{package|matahari}} requires the shared library {{filename|libsigar.so}}. At the time the test ran, the shared library {{filename|libsigar.so}} was not provided by any available package. | ||
== "Not Found" errors == | |||
Look at the following excerpt: | |||
<pre> | |||
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 | |||
</pre> | |||
Build {{filename|erlang-js-0.5.0-2.fc15.x86_64}} has broken dependencies. It requires <code>libjs.so.1()(64bit)</code> which is provided by {{filename|js-1.70-13.fc15.x86_64}}. But the {{package|js}} package is about to be updated (as part of this or some other update request) to {{filename|1:js-1.8.5-6.fc15.x86_64}}. And the latter build does not provide <code>libjs.so.1()(64bit)</code>, thus it is marked as '''Not found'''. | |||
Let's confirm: | |||
<pre> | |||
$ rpm -q --provides -p js-1.70-13.fc15.x86_64.rpm | grep libjs | |||
libjs = 1.70-13.fc15 | |||
libjs.so.1()(64bit) | |||
$ rpm -q --provides -p js-1.8.5-6.fc15.x86_64.rpm | grep libjs | |||
libjs = 1.8.5-6.fc15 | |||
</pre> | |||
As you can see, by updating the {{package|js}} package the dependencies of {{package|erlang-js}} would be broken and that it the reason why depcheck rejected this update. | |||
= Fixing Failures = | = Fixing Failures = |
Revision as of 15:11, 27 June 2011
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:
$ rpm -q --provides -p js-1.70-13.fc15.x86_64.rpm | grep libjs libjs = 1.70-13.fc15 libjs.so.1()(64bit) $ rpm -q --provides -p js-1.8.5-6.fc15.x86_64.rpm | 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.
- Add missing dependencies
The missing dependencies could come from packages that have not yet been built or updated, in which case waiting for those packages is a good solution. Otherwise, the missing dependencies need to be added to an existing package or a new one. - Remove incorrect dependencies
Removing the problem-causing dependency would also fix the problem, assuming that it wasn't actually needed.
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.