J'essaie d'écrire un shell script pour automatiser l'installation d'un tas de dépendances pour un projet sur MacOS qui sera un script équivalent pour le même qui fonctionne sur EL6/EL7 et utilise le yum
gestionnaire de paquets. Ce script va essayer d'exploiter HomeBrew
de faire de même.
Voici quelques-uns des outils/dépendances/packages dont je veux automatiser l'installation gcc
, wget
, make
, cmake
y git
et ainsi de suite. Je veux d'abord vérifier si l'un d'entre eux existe déjà, puis le mettre à jour ou l'installer. Comme vous pouvez le voir dans l'extrait suivant, j'essaye d'abord de vérifier si brew
existe déjà, mettez-le à jour ou installez-le tout simplement.
#!/bin/sh
echo Checking brew
#Check if Homebrew is already installed else prompt the user to do so.
BREW_INSTALLED="/usr/local/bin/brew"
#Variables to check if dependencies exist.
HOMEBREW=$(which brew)
echo $HOMEBREW
if [ "$HOMEBREW" == "$BREW_INSTALLED" ]; then
echo "Brew is already installed."
echo "Update Brew"
brew update
else
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
fi
Maintenant, mes questions sont (question en plusieurs parties !)
- Est-ce la bonne façon d'utiliser
which brew
owhich X
où X peut être gcc, make etc. et ensuite les comparer avec les codes durs/usr/bin/X
pour vérifier leur existence ? Comme j'en ai une liste assez longue à vérifier et à installer, déclarer des variables pour tous et faire des vérifications croisées avec les chemins d'accès ne me semble pas approprié. - Comment gérer la situation où l'utilisateur a installé ces paquets mais à un endroit différent pour une raison quelconque ? (Cela semble un peu objectif mais pour s'assurer que le projet se compile et se construit sur ces dépendances, dois-je forcer ces chemins uniquement ?)
- De plus, un ou plusieurs paquets peuvent être
git
et doivent être clonés, compilés et installés à la volée. Quel devrait être l'endroit approprié pour mettre le fichier généré.dylib
et créer des liens symboliques pour s'assurer que tous ces paquets interdépendants puissent se retrouver et travailler en paix ? - Y a-t-il quelque chose d'équivalent à
virtual_env
ojenv
pour isoler toutes ces installations (bien sûr, en utilisant HomeBrew, elles se retrouvent dans/usr/local/Cellar
) ? Mais, comme MacOS est livré avec au moins quelques-uns d'entre eux (git, gcc etc.), je ne veux pas dupliquer les installations.
P.S. Toute aide en termes de direction, de ressource ou d'exemple de projet travaillant avec une grande quantité de dépendances sera utile. Je n'arrive pas à trouver les bons mots-clés ou les bonnes ressources pour trouver une solution ou une solution partielle. Merci. :)
0 votes
Le code que vous nous avez montré ne fonctionne pas. Le paramètre OUTPUT est indéfini.
0 votes
@fd0 Oups, j'ai oublié de changer le nom de la variable :)
0 votes
Il n'est pas nécessaire de vérifier le texte renvoyé par la fonction
which
il suffit de vérifier le code de sortie ($?
). Cela résout également le problème du "binaire installé à un endroit aléatoire". Mais : si vous utilisez Homebrew de toute façon, pourquoi ne pas empaqueter toute votre application de cette façon et laisser Homebrew gérer les dépendances ?0 votes
@nohillside Merci ! Mais honnêtement, c'est un peu abstrait pour moi. Pourriez-vous s'il vous plaît élaborer sur l'emballage de l'application avec
brew
ou m'indiquer une ressource avec des exemples similaires ?0 votes
Je ne suis pas un
brew
mais je suis sûr qu'ils ont déjà résolu tous les problèmes que vous rencontrez. Des liens vers de la documentation sur la façon d'écrire vos propres formules, etc. brew.sh .0 votes
@nohillside Merci. Cela aide toujours. Je vais essayer de creuser davantage les formules.