Identifizieren des Systempaketmanagers

11

Gibt es eine Möglichkeit (aus einem Skript), den Standard-Systempaket-Manager zu identifizieren?

Zur Verdeutlichung möchte ich einen bestimmten Befehl ausführen und auf Debian oder einem seiner Derivate wird so etwas wie "apt" zurückgegeben, auf openSUSE wird "zypp" zurückgegeben, auf Fedora et al. Wird es zurückgegeben "yum", unter Arch Linux wird "pacman" usw. zurückgegeben.

Ich weiß, dass ich dies mit so etwas wie dem folgenden tun kann. Ich habe mich nur gefragt, ob es eine robustere Methode gibt, die nicht funktioniert, sobald es eine ausführbare Datei mit demselben Namen gibt.

which apt >/dev/null 2>&1
if [ $? -eq 0 ]
then
    echo "apt"
fi
# etc...
DrAl
quelle

Antworten:

9

Beginnen Sie mit der akzeptierten Antwort auf diese Frage: Wie kann ich den Distributionsnamen und die Versionsnummer in einem einfachen Shell-Skript erhalten? . Entscheiden Sie dann anhand der erkannten Distribution, welchen Paketmanager Sie verwenden möchten.

Jim Paris
quelle
Gibt es eine leicht verfügbare Liste von Paketmanagern für verschiedene Distributionen? Insbesondere gibt es viele Debian-Klone.
DrAl
Ich bin mir nicht sicher über eine leicht verfügbare Liste, aber alle Debian-Klone werden sie verwenden apt-get.
Jim Paris
Ja, das merke ich; Mein Problem ist nicht so sehr die Identifizierung der Distribution (obwohl Ihr Link dies sicherlich einfacher macht), sondern es wird herausgefunden, wie man einen Distributionsnamen wie "SolusOS" mit apt verknüpft (um zufällig einen auszuwählen), ohne eine Liste aller Distributionen zu führen das existiert.
DrAl
Machen Sie es wie bei Autotools: Überprüfen Sie, ob es funktioniert. Übrigens, dass eine Distribution apt verwendet, bedeutet, dass es sich um einen Debian-Verwandten handelt (und sie sind ein ziemlich kompakter Haufen). Yum zu finden bedeutet nicht, dass die Verpackungskonventionen (aufgeteilt in Bibliothek / Entwicklung, ein großer Teil von Perl oder einzelne Pakete) CPAN, ...) sind gleich. Versuchen Sie nicht einmal, ein Fedora-Paket unter CentOS zu installieren (es gibt mindestens 3 oder 4 Jahre Versionsfehler, funktioniert einfach nicht).
vonbrand
Das Erkennen der Distribution funktioniert nur bei den beliebtesten. Eine Whitelist kann nicht für weniger bekannte Distributionen aktualisiert werden. Das direkte Testen des Vorhandenseins der Tools ist der einzige Weg, damit es funktioniert. Wenn es wie eine Ente aussieht, wie eine Ente schwimmt und wie eine Ente quakt, dann ist es wahrscheinlich eine Ente.
Liberforce
8

Anstatt binäre Programme zu identifizieren, sollten Sie mit der Identifizierung von Distributionen beginnen.

Geben Sie nur einige Zeilen an, die in Bash-Skripten funktionieren:

declare -A osInfo;
osInfo[/etc/redhat-release]=yum
osInfo[/etc/arch-release]=pacman
osInfo[/etc/gentoo-release]=emerge
osInfo[/etc/SuSE-release]=zypp
osInfo[/etc/debian_version]=apt-get

for f in ${!osInfo[@]}
do
    if [[ -f $f ]];then
        echo Package manager: ${osInfo[$f]}
    fi
done

Obwohl diesen Teilen nicht vertraut werden kann, werden die Leute das im Allgemeinen nicht tun.

Gänseblümchen
quelle