Comme moi vous écrivez peut-être des scripts bash ou shell, pour les faire tourner sous Debian, Ubuntu, CentOS... et j'en passe.
Par mesure de sécurité il est sage de vérifier que la distribution qui exécute le script correspond à celle pour laquelle le script a été conçu.
En effet, lancer un script prévu pour du RedHat sur une distribution peut faire des chocapics. Dans le meilleur des cas le script ne s'exécutera qu'en partie, dans le pire des cas cela peut aller jusqu'à la perte de données. Il suffit de faire un "rm" sans vérifier que la précédente commande s'est correctement exécuté et paf.
Avec Linux Standard Base
Tester la présence de fichiers tels que ceux-ci est une mauvaise idée :
- /etc/debian_version
- /etc/redhat_release
Ubuntu et Debian auront tous deux ce fichier avec le même nom : impossible de les différencier.
Pour connaître la distribution il faut privlégier la commande lsb_release car elle fonctionne à peu près partout (dispo dans les dépôts quand non installée).
Voici 3 fonctions pour détecter Debian, CentOS, Ubuntu mais aussi une version particulière de Debian (jessie) :
is_centos() {
[[ $(lsb_release -d) =~ "CentOS" ]]
return $?
}
is_debian() {
[[ $(lsb_release -d) =~ "Debian" ]]
return $?
}
is_jessie() {
[[ $(lsb_release -c) =~ "jessie" ]]
return $?
}
is_ubuntu() {
[[ $(lsb_release -d) =~ "Ubuntu" ]]
return $?
}
Exemple d'utilisation :
if is_ubuntu; then
echo "ubuntu"
else
echo "pas ubuntu"
fi
Conclusion
Simple et efficace.
Attention à bien respecter la casse si vous ajoutez d'autres distributions ou versions de distribution.
Je suis toujours plus tranquille d'insérer ces contrôles dans les scripts de ma page GitHub, cela m'évite de recevoir des questions inutiles du style "mais ton ton script marche pas" alors qu'il est précisé que ça fonctionne uniquement avec telle distribution 🙂
source : script d'installation openhabian
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
4 commentaires
Pour mon projet eZ Server Monitor, je fonctionne comme ça pour la version Bash :
https://github.com/shevabam/ezservermonitor-sh/blob/master/eZServerMonitor.sh#L89-L95
@shevabam: sympa, mais du coup pas facile de savoir ce qui est retourné, si ? j'imagine que ça peut varier suivant la présence ou non d'un des fichiers testés ?
@Mr Xhark: effectivement, ça retourne la valeur trouvée dans le *release.
Quelques exemples :
Pour une CentOS 7 : CentOS Linux release 7.0.1406 (Core)
Pour une Fedora 22 : Fedora release 22 (Twenty Two)
Pour une Ubuntu 16.04 : Ubuntu 16.04 LTS
Pour une Debian 8 : Debian GNU/Linux 8.7 (jessie)
@shevabam: OK, donc il faudrait un mix des deux, pouvoir rechercher la chaine en minuscule avec l'aide de ceci : https://stackoverflow.com/questions/11392189/converting-string-from-uppercase-to-lowercase-in-bash