システムパッケージマネージャーの識別


12

デフォルトのシステムパッケージマネージャーを(スクリプトから)識別する方法はありますか?

明確にするために、私がやりたいことは、与えられたコマンドを実行することであり、Debianまたはその派生物では「apt」のようなものを返し、openSUSEでは「zypp」を返し、Fedoraなどではそれを返します。 「yum」、Arch Linuxでは「pacman」などを返します。

私は次のようなものでこれを行うことができることを知っています、同じ名前の実行可能ファイルがあるとすぐに壊れないより堅牢な方法があるかどうか疑問に思いました。

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

回答:


9

この質問への受け入れ答えを開始します。私は、簡単なシェルスクリプトでディストリビューション名とバージョン番号を取得できますか?。次に、検出された配布に基づいて、使用するパッケージマネージャーを決定します。


さまざまなディストリビューション用のパッケージマネージャーのすぐに利用できるリストはありますか?特に多くのdebianクローンがあります。
DrAl 2012

すぐに利用できるリストについてはわかりませんが、すべてのDebianクローンはを使用しますapt-get
ジム・パリ

はい、私はそれを理解しています。私の問題は、ディストリビューションを特定することではありません(あなたのリンクでこれを確実に簡単にすることができます)。すべてのディストリビューションのリストを維持せずに、「SolusOS」などのディストリビューション名をaptにリンクする方法を理解しています。それが存在します。
DrAl 2012

autotoolsの方法で行います。機能するかどうかを確認します。ところで、ディストリビューションがaptを使用しているということは、それがDebian相対であることを意味します(そして、それらはかなりコンパクトな束です)、yumを見つけても、パッケージング規約(ライブラリ/開発に分割された、Perlの1つの大きなブリックまたは個別のパッケージがオフになっている) CPAN、...)は同じです。CentOSにFedoraパッケージをインストールしようとしないでください(少なくとも3年または4年のバージョンスキューがあり、機能しません)。
フォンブランド2013年

ディストリビューションの検出は、一般的なディストリビューションでのみ機能します。あまり知られていないディストリビューションのホワイトリストは更新できません。ツールの存在を直接テストすることが、それを機能させる唯一の方法です。それがアヒルのように見え、アヒルのように泳ぎ、そしてアヒルのように鳴く場合、それはおそらくアヒルです。
liberforce 2018年

8

バイナリプログラムを特定するのではなく、ディストリビューションを特定することから始めるべきです。

bashスクリプトで機能する数行を指定してください。

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

これらの部分を通して信頼することはできませんが、一般的に人々はそれを行いません。


1

他の人を確認した後、私はこのルートに行くことを選びました。これは、多くのDockerコンテナーを実行していて、curl / jqが必要で、ジョブ間で利用可能なものに依存できない場合に思い付きました。

script:
 - if [ -x "$(command -v apk)" ]; then apk add --no-cache curl jq; fi
 - if [ -x "$(command -v apt-get)" ]; then apt-get install curl jq; fi
 - if [ -x "$(command -v dnf)" ]; then dnf install curl jq; fi
 - if [ -x "$(command -v zypper)" ]; then zypper install curl jq; fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.