Image of Linux Kernel Development (3rd Edition)
Image of Advanced Programming in the UNIX Environment, Second Edition (Addison-Wesley Professional Computing Series)
Image of XSLT 2.0 and XPath 2.0 Programmer's Reference (Programmer to Programmer)
Image of RHCE Red Hat Certified Engineer Linux Study Guide (Exam RH302) (Certification Press)

List or Count Installed RPM Packages

If you are on a RPM-based Linux platform (such as Redhat, CentOS, Fedora, ArchLinux, Scientific Linux, etc.), here are two ways to determine the list of packages installed. Using yum: yum list installed Using rpm: rpm -qa You can also easily get a count of the installed packages by piping the output to wc: yum list installed | wc -l rpm -qa | wc -l

Set up local RPM Installation Repository

There are a number of ways of installing additional RPM packages from installation media. However, if your network is fast and you are installing the same packages on a number of systems, it sometimes is easier to set up a simple local package repository and use yum to install the packages from there. This post shows you how to do this. Copy the new packages, or even the contents of an entire distribution to a suitable subdirectory on a local webserver. For example, if you are using an Apache webserver on RHEL or Fedora, suitable locations would probably be /var/www/html/repos/rhel6/

Automatically Install SRPM Build Dependancies

An RPM spec file, among other things, enumerates a list of required packages under the BuildRequires tag. Every package listed must be installed on the build platform otherwise the build will fail. You can install the necessary BuildRequires packages either manually using yum or even rpm, but a easier way to do so is to use a utility called yum-builddep which is part of the familiar yum-utils package. $ sudo yum-builddep 389-ds-base- If all goes well, all the dependency packages are automatically installed for you. Unfortunately yum-builddep does not know how to handle conditional BuildRequires and will sometimes incorrectly include

List packages in RPM Database using C

Here is one way of listing installed RPM packages. It works with all versions of CentOS 5, RHEL5 and up to Fedora 14. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <rpm/rpmlib.h> #include <rpm/header.h> #include <rpm/rpmdb.h> int main(int argc, char *argv[]) { rpmdbMatchIterator mi; int type, count; char *name; rpmdb db; Header h; rpmReadConfigFiles( NULL, NULL ); if (rpmdbOpen( "", &db, O_RDONLY, 0644 ) != 0) { fprintf( stderr, "ERROR: Cannot open RPM databasen"); exit(1); } mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, NULL, 0); while ((h = rpmdbNextIterator(mi))) { headerGetEntry(h, RPMTAG_NAME, &type, (void **) &name, &count); printf("%sn", name);

Programmatically Retrieve RPM Package Details

Recently, I needed to retrieve details about software packages installed on Fedora 15, Red Hat Enterprise Linux, CentOS and other distributions which distribute their software packages using the RPM Package Manager. To my surprise, what should have been a relatively simple task turned out to be quite messy because of changes in the RPM library APIs and internal format over the last few years. In this post, I demonstrate how to retrieve information about RPM packages using C and Python. RPM is a command-line or API driven package management system capable of installing, uninstalling, verifying, querying, and updating Linux or