3 votes

Automatiser l'installation de paquets via le shell script pour MacOS ?

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 !)

  1. Est-ce la bonne façon d'utiliser which brew o which 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é.
  2. 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 ?)
  3. 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 ?
  4. Y a-t-il quelque chose d'équivalent à virtual_env o jenv 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 ?

1voto

Markus Points 307

Pour reprendre les propos de nohillside, j'allais dire que vous pourriez réaliser beaucoup de choses en créant vos propres robinets ! Vous pouvez même utiliser un dépôt hébergé ailleurs (par exemple un dépôt privé, bitbucket, ou autre) tant que vous spécifiez l'url git après brew tap.

0voto

Fred.W Points 1

Homebrew sait quels paquets vous avez déjà installés, donc même si vous installez gcc deux fois (en exécutant brew install gcc ), il ne sera installé qu'une seule fois. Vous pouvez donc mettre en toute sécurité un tas de brew install <package> dans vos scripts sans avoir à vous soucier de perdre beaucoup de temps.

Ce qui est mieux, c'est le support Homebrew Brewfile qui vous permet de définir toutes les dépendances dans un seul fichier et de les installer toutes en exécutant la commande suivante brew bundle --file=<path/to/brewfile>

Voici un exemple de fichier de brassage :

brew "ack"
brew "git"
brew "python3"

cela équivaut à courir :

brew install ack git python3

Vous pouvez trouver plus d'exemples de brewfile, il suffit de le googler.

0 votes

N'envoyez pas les gens chercher les réponses sur Google, incluez-les dans votre message.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X