Signatur
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
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;
}
}
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;
}
}
// 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.