Start · Sprachen · PHP · Referenz · rpmdbsearch

rpmdbsearch

Funktion

Durchsucht die lokale RPM-Paketdatenbank nach installierten Paketen anhand verschiedener Suchkriterien.

Kategorie: misc

Signatur

rpmdbsearch(string $name, int $retriever = RPMTAG_NAME, int $action = RPMMIRE_GLOB, int $base = RPMDB_LOCAL): array|false

Beschreibung

rpmdbsearch() ermöglicht die Suche in der RPM-Paketdatenbank des lokalen Systems. Die Funktion ist Bestandteil der RPM-Erweiterung für PHP und liefert eine Liste installierter Pakete, die dem angegebenen Suchmuster entsprechen.

Über den Parameter retriever wird festgelegt, nach welchem Paket-Attribut gesucht werden soll – beispielsweise RPMTAG_NAME für den Paketnamen, RPMTAG_VERSION für die Version oder RPMTAG_PROVIDES für bereitgestellte Funktionen. Der Parameter action steuert die Art des Vergleichs (z. B. Glob-Muster oder exakter Treffer).

Die Funktion ist vor allem in System-Administrations-Skripten nützlich, etwa um zu prüfen, ob ein bestimmtes RPM-Paket installiert ist, oder um Paket-Metadaten programmatisch auszulesen – ohne externe Prozesse wie rpm -q per Shell aufzurufen.

Voraussetzung ist, dass die PHP-RPM-Erweiterung (php-pecl-rpm) installiert und aktiviert ist. Diese ist typischerweise auf RPM-basierten Linux-Distributionen wie Fedora, RHEL oder CentOS verfügbar.

Parameter

Name Typ Default Beschreibung
$name Pflicht string Das Suchmuster oder der Suchbegriff, nach dem in der RPM-Datenbank gesucht werden soll (z. B. ein Paketname oder eine Version).
$retriever int RPMTAG_NAME Gibt an, welches Paket-Attribut für die Suche verwendet wird. Mögliche Konstanten sind z. B. RPMTAG_NAME, RPMTAG_VERSION, RPMTAG_RELEASE, RPMTAG_PROVIDES u. a.
$action int RPMMIRE_GLOB Bestimmt die Vergleichsmethode: RPMMIRE_GLOB für Glob-Muster, RPMMIRE_REGEX für reguläre Ausdrücke oder RPMMIRE_STRCMP für einen exakten Zeichenkettenvergleich.
$base int RPMDB_LOCAL Legt fest, welche Datenbank durchsucht wird. Standardmäßig RPMDB_LOCAL für die lokale RPM-Datenbank des Systems.

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg ein assoziatives Array zurück, dessen Schlüssel die Paketnamen sind und dessen Werte wiederum Arrays mit Paket-Metadaten (z. B. Version, Release, Architektur) darstellen. Im Fehlerfall oder wenn keine Pakete gefunden wurden, wird false zurückgegeben.

Beispiele

Prüfen, ob ein bestimmtes Paket installiert ist

<?php
if (!function_exists('rpmdbsearch')) {
    die('RPM-Erweiterung nicht verfügbar.');
}

$results = rpmdbsearch('bash', RPMTAG_NAME, RPMMIRE_STRCMP);

if ($results === false || empty($results)) {
    echo "Paket 'bash' ist nicht installiert." . PHP_EOL;
} else {
    echo "Paket 'bash' gefunden:" . PHP_EOL;
    foreach ($results as $name => $info) {
        echo "  Name:    " . $name . PHP_EOL;
        echo "  Version: " . ($info['Version'] ?? 'n/a') . PHP_EOL;
        echo "  Release: " . ($info['Release'] ?? 'n/a') . PHP_EOL;
    }
}
Paket 'bash' gefunden: Name: bash Version: 5.1.8 Release: 6.el9

Alle Python-Pakete per Glob-Muster auflisten

<?php
$results = rpmdbsearch('python3*', RPMTAG_NAME, RPMMIRE_GLOB);

if ($results === false || empty($results)) {
    echo 'Keine Python-3-Pakete gefunden.' . PHP_EOL;
} else {
    echo 'Gefundene Python-3-Pakete:' . PHP_EOL;
    foreach ($results as $name => $info) {
        $version = ($info['Version'] ?? '?') . '-' . ($info['Release'] ?? '?');
        echo "  " . $name . " ($version)" . PHP_EOL;
    }
}
Gefundene Python-3-Pakete: python3 (3.9.18-3.el9) python3-libs (3.9.18-3.el9) python3-pip (21.3.1-8.el9)

// Wichtig · Fallstricke

Plattformabhängigkeit: rpmdbsearch() steht nur zur Verfügung, wenn die PHP-RPM-PECL-Erweiterung installiert ist (pecl install rpm bzw. das Paket php-pecl-rpm). Auf Debian/Ubuntu-basierten Systemen ist diese Funktion in der Regel nicht verfügbar.

Berechtigungen: Der Lesezugriff auf die RPM-Datenbank (/var/lib/rpm) erfordert je nach Systemkonfiguration erhöhte Rechte. Auf den meisten Systemen ist der Lesezugriff jedoch auch für normale Benutzer erlaubt.

Rückgabe-Struktur: Die genauen Schlüssel im zurückgegebenen Metadaten-Array können je nach installierter Version der RPM-Erweiterung variieren. Es empfiehlt sich, var_dump() oder print_r() auf dem Zielsystem zu verwenden, um die verfügbaren Felder zu ermitteln.