[packagekit] help with conary backend

Richard Hughes hughsient at gmail.com
Fri Nov 14 00:44:19 PST 2008


On Fri, 2008-11-14 at 01:25 -0600, zodman wrote:
> Im a foresight developer doing some task for fix the conary backend on
> packagekit.

Excellent! You should probably have commit access to get the very latest
code. If you want this, can you send me (offlist) your public RSA ssh
key, your full name, and your chosen username.

> On the git version the backend are very buggy! some commands not works.
> Im devel and debugg the backend and fix it .

Cool.

> Ken Vandine are noticed  of this. But not a guru of PackageKit have some
>   task what not help me.
> 
> For example on the backend doing a:
> python conaryBackend.py update-packages
> "pastebinit;0.7-1-1;x86;/foresight.rpath.org at fl:2-qa/1222042924.172:0.7-1-1,1#x86"
> 
> the conary update the package Perfthout problems

pkcon != conary where you can do "pkcon update foo" to _install_ foo. In
PackageKit language, an install is different to an update.

> But with packagekit.
> 
> $ ./pkcon update  pastebinit
> Command failed:  This tool could not update 'pastebinit': Internal
> error: Operation not yet supported by backend

I've noticed the option struct was slightly the wrong order -- I've
fixed that in 933fd5ac9f8befc03a54cded23e5ee562707be9c -- although that
shouldn't affect this problem.

> Here the log of packagekitd.
> 
> http://dpaste.com/90666/
> 
> at line 155 the package is found and get the id .... using the method
> resolve of conaryBackend.py
> 
> then make a error what not understand...
> 
> - WhatProvides method called: any, pastebinit
> - Not implemented yet: WhatProvides

Right. This is the clue. The way packagekit "resolves" a name like pastebinit to
"pastebinit;0.7-1-1;x86;/foresight.rpath.org at fl:2-qa/1222042924.172:0.7-1-1,1#x86"
is to internally do:

pkcon --filter "installed" resolve pastebinit

if this doesn't find anything, then it then tries:

pkcon --filter "installed" what-provides pastebinit

if this doesn't find anything, then we return with an error, in this
case, a really unhelpful error. I've improved the error message in
0cd77f708b6996439745cc5489cf9121ec8dba07

I've fixed pkcon in commit 9c25a0936c3c5127664496ad071409b9673b3e35 to
not even try to do WhatProvides if it's not implemented by the daemon.

The reason the resolve failed is obvious from the daemon log:

> - emit package available, pastebinit;0.7-1-1;x86;/foresight.rpath.org at fl:2-qa/1222042924.172:0.7-1-1,1#x86,  
> TI:01:14:50	TH:0x8e8d008	FI:pk-backend.c	FN:pk_backend_message,966
>  - emit message 4, resolve emitted package that was ~installed when the installed filter is in place
> TI:01:14:50	TH:0x8e8d008	FI:pk-transaction.c	FN:pk_transaction_message_cb,708
>  - emitting message backend-error, 'resolve emitted package that was ~installed when the installed filter is in place'

So the Resolve implementation is wrong -- pkcon is asking the backend to
match a package name to a package_id that are already installed, but the
backend returns results that are not installed! This is probably just
the resolve function not respecting the filter settings.

This might be the case where pastebinit isn't installed.

> The method whatprovides are not present on conary backend, so this need
> coded ? or exist other task to do ? What exactly whatprovides do ? whats
> the ouput need for this method ?
> 
> The Method  update-package ( at dispatcher.command as update_packages )
> never executed. Why not ???

Right. The resolve failed (wrong package value in resolve, WhatProvides
not implemented), so we couldn't find a package_id. update-packages
operates on a package_id, not a package name.

> Sorry by poor english im mexican :S

Don't apologise, your English is fine. It's me who should apologise for
the code errors! :-)

Richard.





More information about the PackageKit mailing list