![]() |
![]() |
![]() |
PackageKit Reference Manual | ![]() |
---|
PackageKit does not ask the user questions when the transaction is running. It also supports a fire-and-forget method invocation, which means that transactions will have one calling method, and have many signals going back to the caller.
Each transaction is a new path on the org.freedesktop.PackageKit
service, and to create a path you have to call GetTid
on the base
interface which creates the new DBUS path, and returns the new path for you to connect to.
In the libpackagekit binding, PkControl
handles the base interface,
whilst PkClient
handles all the transaction interface stuff.
The org.freedesktop.PackageKit.Transaction
interface can be used
on the newly created path, but only used once.
New methods require a new transaction path (i.e. another call to GetTid
)
which is synchronous and thus very fast.
A typical successful transaction can be seen below.
A typical simple transaction failure case can be seen below. The user is not given the change to requeue the transaction as it is a fatal error.
In this non-trivial example, a local file install is being attempted.
First the InstallFile
is called with the trusted
flag set.
This will fail if the package does not have a valid GPG key, and ordinarily the transaction
would fail. What the client can do, e.g. using gnome-packagekit
, is
to re-request the InstallFile
with non-trusted
.
This will use a different PolicyKit authentication, and allow the file to succeed.
So why do we bother calling trusted
in the first place?
Well, the trusted PolicyKit role can be saved in the gnome-keyring, or could be
set to the users password as the GPG key is already trusted by the user.
The non-trusted
action would likely ask for the administrator password,
and not allowed to be saved. This gives the user the benifit of installing trusted local
files without a password (common case) but requiring something stronger for untrusted or
unsigned files.
If the package is signed, and a valid GPG signature is available, then we need to ask the user to import the key, and re-run the transaction. This is done as three transactions, as other transactions may be queued and have a higher priority, and to make sure that the transaction object is not reused.
If the package is signed, and a valid GPG signature is available, then we need to ask the user to import the key, and re-run the transaction. This is done as three transactions, as other transactions may be queued and have a higher priority, and to make sure that the transaction object is not reused.