NAME

RPM::Database - Access to the RPM database of installed packages

SYNOPSIS

use RPM::Database;

tie %RPM, "RPM::Database" or die "$RPM::err";

for (sort keys %RPM)
{
    ...
}

DESCRIPTION

The RPM::Database package provides access to the database of installed packages on a system. The database may be accessed as either a tied hash or as a blessed reference to a hash. The keys of the hash represent packages on the system. The order in which they are returned by any of keys, each or values, is determined by the internal database ordering. Unlike the keys in RPM::Header (see RPM::Header), the keys here are in fact case-sensitive.

The return value corresponding to each key is a reference to a RPM::Header object. The header object is marked read-only, as the RPM database is not directly modifiable via this interface.

There are also a number of class methods implemented, which are described in the next section.

USAGE

Creating an Object

An object may be created one of two ways:

tie %D, "RPM::Database";

$dataref = new RPM::Database;

The latter approach offers more direct access to the class methods, while also permitting the usual tied-hash operations such as fetching:

$dataref->{package}    # Such as "rpm" or "perl"

Class Methods

The following methods are available to objects of this class, in addition to the tied-hash suite of operations. If the object is a hash instead of a hash reference, it can be used to call these methods via:

(tied %hash)->method_name(...)
new

Creates a tied hash using a lexically-scoped hash table, then returns a reference to it (the return value of the tie operation). This reference prevents the hash table from going out of scope. If a hash-reference of options is passed to this constructor, they are passed along to the tie of the hash. If a single scalar argument is passed, it is assumed to be an alternate database root to be used in opening the RPM database. The hash-reference currently only supports a single key, root, which serves the same purpose. The hash-reference approach leaves open the possibilty of future options being added.

init

This causes a complete initialization of the RPM database. It must be run with sufficient permissions to create/update the relevant files. It must also be called as a static method, to avoid having any file descriptors open on the database at the time.

rebuild

This rebuilds the database (same as "rpm --rebuilddb"). As with init above, this requires adequate permissions and must be invoked as a static method.

find_by_file(file)

Returns a list of RPM::Header objects that correspond to the package(s) claiming ownership of the file "file".

find_by_group(group)

Returns of a list of headers for all packages flagged as being in the group specified.

find_what_provides(provides)

Search as above, but based on which package(s) provide the functionality specified as "provides".

find_what_requires(requires)

Return a list of headers for the packages that directly depend on the specified package for installation and operation. The specified package should be just the name, no version or release information.

find_what_conflicts(conflicts)

List those packages that have conflicts based on the value of "conflicts".

find_by_package(package)

This performs the search by a specific package name. This is the API call used by the FETCH tied-hash method, but this differs in that if there is in fact more than one matching record, all are returned.

Any of the find_* routines can take an RPM::Header object as an argument, in which case the package name will be retrieved and used for the argument. In some cases (such as find_by_file), this is probably not what you want. But in other cases such as find_what_requires, it may be exactly what you want.

Importable Defaults

Given that there may be only one concurrent process with the rpm database open, and given that such would lead to a lot of program code starting with the same sequence of use/tie or use/new, the following identifiers may be imported from the package:

%RPM

A hash pre-tied to the RPM::Database package (and thus the rpm database).

$RPM

A RPM::Database object, referencing a hash tied to the rpm database.

DIAGNOSTICS

Direct binding to the internal error-management of rpm is still under development. At present, most operations generate their diagnostics to STDERR.

CAVEATS

This is currently regarded as alpha-quality software. The interface is subject to change in future releases.

SEE ALSO

RPM, RPM::Header, perl, rpm

AUTHORS

Randy J. Ray <rjray@blackperl.com>, Alexey Tourbin <at@altlinux.org>.