Comment savoir si une build est basée sur Debian?

9

Je commence à travailler avec une boîte sur laquelle est construit un (petit) Linux personnalisé. Comment savoir s'il s'agit d'une version basée sur Debian ou Red Hat?

Voici ce que je sais jusqu'à présent:

$ cat /proc/version
Linux version 2.6.31-2.5 (build@build-desktop) (gcc version 4.4.3 (Broadcom stbgcc-4.4.3-1.2) ) #7

$ apt-get
-sh: apt-get: command not found

$ yum
-sh: yum: command not found
Sparky1
la source
pourquoi lsb_release -i 2> /dev/null | sed 's/:\t/:/' | cut -d ':' -f 2-?? Il suffit d'exécuterlsb_release -si

Réponses:

2

L'exécution uname -adevrait vous donner des informations générales sur le système. En outre, vous pouvez exécuter apropos "package manager"ou avec des mots clés similaires pour en savoir plus sur le gestionnaire de packages. Recherchez /etcun fichier nommé xyz-releasexyzdevrait se trouver la distribution en cours d'exécution.


la source
C'est ce que j'obtiens lorsque je lance uname -a: $ uname -a Linux 10.0.1.46 2.6.31-2.5 # 7 Thu Dec 15 19:57:09 CST 2011 mips GNU / Linux
Sparky1
@ Sparky1 Ensuite, il semble que vous vous soyez procuré une distribution Linux-MIPS .
7

Pour tester les systèmes Debian, vous pouvez vérifier s’il /etc/debian_versionexiste:

if [ -f "/etc/debian_version" ]; then
   # do stuff
fi

Il devrait être inclus Debian et les systèmes basés sur lui (y compris Ubuntu et ses dérivés), bien que certains ne l'aient pas - dans ce cas, vous pouvez vérifier les /etc/*releasefichiers:

if [ "$(grep -Ei 'debian|buntu|mint' /etc/*release)" ]; then
   # do stuff
fi

Où se debian|buntu|minttrouve une liste de noms de distributions à rechercher (pas en respectant la casse) - vous pouvez avoir une idée de quelques dérivés courants d' ici , bien que les dérivés debian comme Ubuntu aient leurs propres dérivations .


Pour les systèmes basés sur RedHat, les dérivés utilisent une plus grande gamme de fichiers et peuvent ne pas avoir lsb-release installé - vous pouvez donc appliquer les méthodes suivantes:

  • obtenir le nom de la version

    lsb_release -i 2> /dev/null | sed 's/:\t/:/' | cut -d ':' -f 2-
    
  • Vérifiez l'ID DISTRIB dans le lsb-releasefichier - une «méthode de secours qui n'est probablement pas nécessaire sur les systèmes modernes», également le fichier est apparemment manquant sur Fedora et ne contient pas DISTRIB_ID sur OpenSUSE

  • vérifier l'existence de certains des éléments suivants

    • /etc/fedora-releaseet / ou /etc/redhat-releasepour RedHat ou Fedora
    • /etc/SuSE-release pour SuSe
    • /etc/mandriva-release pour mandriva / mageia
  • utilisez une méthode similaire à celle de Debian:

    if [ "$(grep -Ei 'fedora|redhat' /etc/*release)" ]; then
    ...
    

Les 3 premiers points que j'ai obtenus de la mise à jour cron de Google Chrome, vous pouvez donc examiner cela pour en savoir plus (cela détermine également les gestionnaires de packages)


Pour une gamme plus large d'OS, lire ce post sur SO devrait aider.

Wilf
la source
2

Vérifiez la sortie de:

lsb_release -a

et:

cat /etc/issue

Vous pouvez également rechercher d'autres commandes de paquetages à bas niveau rpmpour RedHat et dpkgDebian.

Michał Šrajer
la source
$ dpkg command introuvable $ rpm (affiche les options de la commande rpm). On dirait que c'est une construction basée sur un chapeau rouge. Merci pour l'aide!
Sparky1
2
vous pouvez également vérifier le fichier / etc / debian_version , qui existe dans toutes les distributions Linux basées sur Debian
Coren
Installez-le également en utilisant apt-get install lsb-releases'il n'est pas installé.
Massood Khaari
1

S'il s'agit d'un périphérique embarqué (par exemple un routeur SoHo), il ne s'agira probablement d'aucune des distributions "bureau / serveur". J'essaierais de consulter le manuel de l'appareil, le site Web du fabricant (devrait avoir la source du code sous licence GPL) et le Web en général.

Piskvor a quitté le bâtiment
la source
0

uname -aet cat /proc/version( lecture seule pour les super-utilisateurs ), à mon avis, sont les seules bonnes réponses à cette question car les autres - comme lsb_release, /etc/issueou cat /proc/sys/kernel/version- ne sont pas disponibles / ne sont pas utilisables sur tous les systèmes (pas même les distributions Debian officielles). Ne vous embêtez pas non plus /etc/*releases, /etc/*versioncar ils peuvent être modifiés. Ce dernier n'est pas disponible sur toutes les distributions Debian.

D'autres options pourraient être (pas ma recommandation):

  • Vérifiez dashou vérifiez si shest lié à dash(ce devrait être la valeur par défaut pour l'exécution des scripts)
  • Vérifiez le gestionnaire de packages en exécutant >/dev/null 2>&1 dpkg --version && { ... }
FifthAxiom
la source