packagekit/docs/html/pk-using.html
2012-10-29 22:02:56 +01:00

164 lines
5.9 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>PackageKit - How do I use PackageKit?</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<link rel="stylesheet" href="style.css" type="text/css" media="screen"/>
</head>
<body>
<table align="center" class="title">
<tr>
<td><img src="img/packagekit.png" alt=""/></td>
<td width="95%" valign="middle"><p class="title">How do I use PackageKit?</p></td>
<td><img src="img/packagekit.png" alt=""/></td>
</tr>
</table>
<p>Back to the <a href="index.html">main page</a></p>
<h1>How do I use PackageKit?</h1>
<p style="background-color:#ffdddd; padding:25px;">
If you are writing an application that wants to install packages on demand,
and don't care about the low level details, there's a
<a href="pk-faq.html#session-methods">session helper API</a>
that you should use.
It's much simpler than using PackageKit directly.
</p>
<h2>Using the command line</h2>
<p>
The <code>pkcon</code> text-mode program allows you to interact with
PackageKit on the command line. For example:
</p>
<pre>
[hughsie@laptop ~]$ pkcon get-updates
[hughsie@hughsie-work PackageKit]$ pkcon get-updates
security bluez-utils-3.35-3.fc9 Bluetooth utilities
bugfix xterm-236-1.fc9 Terminal emulator for the X Window System
bugfix kernel-devel-2.6.25.14-108.fc9 Development package for building kernel modules to match the kernel
enhancement kde-filesystem-4-17.fc9 KDE filesystem layout
enhancement subversion-1.5.1-1.fc9 Modern Version Control System designed to replace CVS
</pre>
<p>or</p>
<pre>
[hughsie@hughsie-work PackageKit]$ pkcon --filter=~devel search name power
installed DeviceKit-power-001-0.8.20080811git.fc9 Power Management Service
installed gnome-power-manager-2.23.4-1.118.20080801svn.fc9.hughsie GNOME Power Manager
installed powerman-2.1-1.fc9 PowerMan - Power to the Cluster
installed powertop-1.9-3.fc9 Power consumption monitor
available gnome-power-manager-2.22.1-1.fc9 GNOME Power Manager
available kadu-powerkadu-0.6.0-3.fc9 PowerKadu
available kadu-powerkadu-0.6.0.1-1.fc9 PowerKadu
available kpowersave-0.7.3-3.fc9 KPowersave is the KDE frontend for powermanagement
available powerman-1.0.32-5.fc9 PowerMan - Power to the Cluster
available powermanga-0.90-3 Arcade 2D shoot-them-up game
</pre>
<p>
The <code>pkmon</code> program allows you to monitor what PackageKit is
doing on the command line and is mainly used for debugging.
</p>
<p>
The <code>pkgenpack</code> program allows you to generate
<a href="pk-faq.html#service-pack">Service Packs</a> with a package and its dependencies.
</p>
<h2>Using graphical tools:</h2>
<p>
<code>gnome-packagekit</code> provides a rich set of GTK tools for
automatically updating your computer and installing software.
See the <a href="pk-screenshots.html">screenshots page</a> for more details.
</p>
<h2>Using libpackagekit:</h2>
<p>
The <a href="gtk-doc/PkTask.html">libpackagekit gobject library</a>
wraps the DBus interface in a nice glib-style API.
This makes designing programs that use libpackagekit can concentrate on
core functionality rather that the DBus and PackageKit internals.
PkTask in libpackagekit can be used as easily as:
</p>
<pre>
GError *error = NULL;
PkError *error_code = NULL;
PkResults *results = NULL;
GPtrArray *array = NULL;
PkPackage *item;
gchar **values = NULL;
gchar **package_ids = NULL;
uint i;
PkTask *task;
task = pk_task_new ();
/* resolve the package name */
values = g_new0 (gchar*, 1 + 1);
values[0] = g_strdup ("openoffice-clipart");
values[1] = NULL;
results = pk_task_resolve_sync (task, PK_FILTER_ENUM_NOT_INSTALLED, values, NULL, NULL, NULL, &amp;error);
/* check error code */
error_code = pk_results_get_error_code (results);
if (error_code != NULL) {
g_printerr ("%s: %s, %s\n", "Resolving of packages failed",
pk_error_enum_to_string (pk_error_get_code (error_code)),
pk_error_get_details (error_code));
goto out;
}
/* get the packages returned */
array = pk_results_get_package_array (results);
package_ids = g_new0 (gchar *, array->len+1);
for (i = 0; i &lt; array->len; i++) {
item = g_ptr_array_index (array, i);
package_ids[i] = g_strdup (pk_package_get_id (item));
}
/* install the packages */
results = pk_task_install_packages_sync (task, package_ids , NULL, NULL, NULL, &amp;error);
/* check error code */
error_code = pk_results_get_error_code (results);
if (error_code != NULL) {
g_printerr ("%s: %s, %s\n", _("Error installing package(s)!"),
pk_error_enum_to_string (pk_error_get_code (error_code)),
pk_error_get_details (error_code));
goto out;
}
out:
g_strfreev (values);
g_object_unref (task);
if (error_code != NULL)
g_object_unref (error_code);
if (array != NULL)
g_ptr_array_unref (array);
if (package_ids != NULL)
g_strfreev (package_ids);
if (results != NULL)
g_object_unref (results);
</pre>
<h2>Using the raw DBus API:</h2>
<p>
Using the DBus methods and signals directly means that no glib or
gobject dependency is needed, although this means you will have to
manage the transaction_id multiplexing in any client program.
This is not difficult, although does require more code than just using
libpackagekit.
The latest interface is available in the source tree or <a href="http://gitorious.org/packagekit/packagekit/blobs/master/src/org.freedesktop.PackageKit.xml">on-line</a>.
</p>
<p>Back to the <a href="index.html">main page</a></p>
<p class="footer">
Copyright <a href="mailto:richard@hughsie.com">Richard Hughes 2007-2010</a><br/>
<a href="http://validator.w3.org/check/referer">Optimized</a>
for <a href="http://www.w3.org/">standards</a>.
</p>
</body>
</html>