Mengidentifikasi manajer paket sistem

12

Apakah ada cara (dari skrip) untuk mengidentifikasi manajer paket sistem default?

Untuk memperjelas, apa yang ingin saya lakukan adalah menjalankan perintah yang diberikan dan, pada Debian atau turunannya, ia akan mengembalikan sesuatu seperti "apt", pada openSUSE ia akan mengembalikan "zypp", pada Fedora et al ia akan kembali "yum", di Arch Linux ia akan mengembalikan "pacman" dll.

Saya tahu saya bisa melakukan ini dengan sesuatu seperti berikut ini, saya hanya bertanya-tanya apakah ada metode yang lebih kuat yang tidak akan rusak segera setelah ada executable dengan nama yang sama.

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

Jawaban:

9

Mulailah dengan jawaban yang diterima untuk pertanyaan ini: Bagaimana saya bisa mendapatkan nama distribusi dan nomor versi dalam skrip shell sederhana? . Kemudian, tentukan manajer paket mana yang ingin Anda gunakan berdasarkan distribusi yang terdeteksi.

Jim Paris
sumber
Apakah ada daftar manajer paket yang tersedia untuk distribusi yang berbeda? Ada banyak klon debian pada khususnya.
DrAl
Tidak yakin tentang daftar yang tersedia, tetapi semua klon Debian akan digunakan apt-get.
Jim Paris
Ya, saya menyadari itu; masalah saya tidak begitu banyak mengidentifikasi distribusi (meskipun tautan Anda pasti akan membuat ini lebih mudah), itu mencari tahu bagaimana menautkan nama distribusi seperti (untuk memilih satu secara acak) "SolusOS" dengan apt tanpa mempertahankan daftar setiap distribusi yang ada.
DrAl
Lakukan dengan cara autotools: Periksa apakah berfungsi. BTW, bahwa distribusi menggunakan apt berarti bahwa itu adalah relatif Debian (dan mereka adalah sekelompok yang agak kompak), menemukan yum tidak berarti bahwa konvensi pengemasan (dibagi menjadi perpustakaan / pengembangan, satu bata besar Perl atau paket individual off CPAN, ...) sama saja. Jangan pernah mencoba untuk menginstal paket Fedora pada CentOS (setidaknya ada 3 atau 4 tahun versi miring, tidak akan berfungsi).
vonbrand
Mendeteksi distro hanya akan berfungsi untuk yang populer. Daftar putih tidak dapat diperbarui untuk semua distribusi yang kurang tahu. Langsung menguji keberadaan alat adalah satu-satunya cara untuk membuatnya berfungsi. Jika terlihat seperti bebek, berenang seperti bebek, dan dukun seperti bebek, maka itu mungkin bebek.
liberforce
8

Alih-alih mengidentifikasi program biner, Anda harus mulai dari mengidentifikasi distribusi,

Berikan beberapa baris yang berfungsi dalam bash scripting:

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

Secara keseluruhan, bagian-bagian ini tidak dapat dipercaya, tetapi umumnya orang tidak akan melakukannya.

bunga aster
sumber
1

Saya memilih untuk pergi dengan rute ini setelah meninjau yang lain. Ini muncul bagi saya ketika menjalankan banyak kontainer buruh pelabuhan dan membutuhkan curl / jq dan tidak dapat mengandalkan apa yang tersedia dari pekerjaan ke pekerjaan.

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
Menandai
sumber