Sistem paketi yöneticisini belirleme


12

Varsayılan sistem paketi yöneticisini tanımlamanın bir yolu var mı (komut dosyasından)?

Açıklığa kavuşturmak için, yapmak istediğim belirli bir komutu çalıştırmaktır ve Debian veya türevlerinden herhangi birinde "apt" gibi bir şey döndürür, openSUSE üzerinde "zypp" döndürür, Fedora ve ark. "yum", Arch Linux'ta "pacman" vb. döndürür.

Bunu aşağıdaki gibi bir şeyle yapabileceğimi biliyorum, sadece aynı ada sahip bir yürütülebilir dosya olduğu anda kırılmayacak daha sağlam bir yöntem olup olmadığını merak ettim.

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

Yanıtlar:


9

Bu sorunun kabul edilen cevabı ile başlayın: Basit bir kabuk betiğinde dağıtım adı ve sürüm numarasını nasıl alabilirim? . Ardından, algılanan dağılıma bağlı olarak hangi paket yöneticisini kullanmak istediğinize karar verin.


Farklı dağıtımlar için hazır bir paket yöneticisi listesi var mı? Özellikle debian klonları var.
DrAl

Hazır bir listeden emin değilim, ancak tüm Debian klonları kullanılacak apt-get.
Jim Paris

Evet, farkındayım; benim sorunum çok fazla dağıtım tanımlamak değil (bağlantınız kesinlikle bunu daha kolay hale getirecek olsa da), her dağıtımın listesini tutmadan "SolusOS" gibi bir dağıtım ismini apt ile nasıl bağlayacağınızı bulmaktır. Varolan.
DrAl

Autotools yöntemini yapın: Çalışıp çalışmadığını kontrol edin. BTW, bir dağıtımın apt kullandığı anlamına gelir, bunun bir Debian akrabası olduğu anlamına gelir (ve oldukça kompakt bir demettir), yum bulmak, paketleme kurallarının (kütüphaneye / geliştirmeye bölünmüş, büyük bir Perl tuğlası veya bireysel paketler kapalı olduğu anlamına gelmez) CPAN, ...) aynı. CentOS'a bir Fedora paketi yüklemeye bile çalışmayın (en az 3 veya 4 yıllık sürüm eğriliği vardır, işe yaramaz).
vonbrand

Dağıtımın algılanması sadece popüler olanlar için işe yarayacaktır. Beyaz liste, daha az bilinen dağıtımlar için güncellenemez. Araçların varlığını doğrudan test etmek, onu çalıştırmanın tek yoludur. Ördek gibi görünüyor, ördek gibi yüzüyor ve ördek gibi quacks, muhtemelen bir ördek.
liberforce

8

İkili programları tanımlamak yerine, dağıtımları tanımlamaktan,

Sadece bash komut dosyasında çalışan birkaç satır verin:

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

Bu parçalara güvenilemez, ancak genellikle insanlar bunu yapmaz.


2

Diğerleri inceledikten sonra bu rotaya gitmeyi seçtim. Bu, birçok liman işçisi konteynırını çalıştırırken ve curl / jq'ye ihtiyaç duyduğumda ve işten işe mevcut olanlara güvenemediğimde benim için geldi.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.