Автоматизувати встановлення пакету через оболонку сценарію для macOS?


3

Я намагаюся написати скрипт оболонки для автоматизації встановлення купи залежностей для проекту на macOS, який буде еквівалентним сценарієм для того ж, що працює на EL6 / EL7 та використовує yumменеджер пакетів. Цей сценарій буде намагатися використовувати HomeBrewте саме.

Деякі з інструментів / залежностей / пакетів , які я хочу , щоб автоматизувати установку є gcc, wget, make, cmakeі gitі так далі. Я спершу хочу перевірити, чи вже існує якесь із них, а потім оновити їх або іншим чином встановити. Як ви бачите в цьому наступному фрагменті, я спершу намагаюся перевірити, чи brewіснує вже, а потім оновіть його, або просто встановіть його.

#!/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

Тепер мої запитання (запитання на кілька частин!)

  1. Це правильний спосіб використання which brewабо which Xде X може бути gcc, make etc., а потім порівнювати їх з hardcoded, /usr/bin/Xщоб перевірити їх існування? Оскільки у мене є досить перелік їх, мені потрібно перевірити та встановити такі оголошувальні змінні для всіх і перехресна перевірка шляхами мені якось не здається доречною.
  2. Як впоратися з ситуацією, коли користувач встановив ці пакунки, але в якомусь іншому місці з будь-якої причини? (Це здається дещо об'єктивним, але для того, щоб забезпечити, що проект збирає та базується на цих залежностях, чи повинен я застосовувати лише ці шляхи?)
  3. Крім того, один або кілька пакетів можуть бути gitрепостовані, і їх потрібно клонувати, складати та встановлювати на ходу. Що має бути належним місцем для розміщення створених .dylibs та створення символьних посилань, щоб переконатися, що всі ці взаємозалежні пакети можуть знайти один одного та працювати в спокої?
  4. Чи є щось еквівалентне virtual_envабо jenvізолювати всі ці установки (звичайно, використовуючи HomeBrew, в якому вони потрапляють /usr/local/Cellar)? Але, оскільки macOS має щонайменше декілька з них (git, gcc тощо), я не хочу дублювати установки.

PS Будь-яка допомога з точки зору напрямку, ресурсу чи прикладу проекту, що працює з великою кількістю залежностей, допоможе. Я просто не можу з’ясувати правильні ключові слова чи потрібні ресурси для пошуку рішення чи часткового рішення. Дякую. :)


Код, який ви нам показали, не працює. Параметр OUTPUT не визначений.
fd0

@ fd0 На жаль, забув змінити ім'я змінної. :)
Яшан Сінгх

Немає необхідності перевіряти текст, що повертається which, просто перевірте вихідний код ( $?). Це також вирішує проблеми "бінарних, встановлених у випадковому місці". Але: якщо ви все одно використовуєте Homebrew, чому б не упакувати всю програму саме так і дозволити Homebrew вирішувати залежності?
nohillside

@nohillside Дякую! Але, чесно кажучи, це для мене трохи абстрактно. Чи можете ви, будь ласка, детальніше розфасувати програму brewабо вказати на ресурс із подібними прикладами?
Яшан Сінгх

Я не brewхакер, але я повністю впевнений, що вони вже вирішили всі проблеми, з якими ви стикаєтесь. Посилання на документацію про те , як писати свої власні формули і т.д. , можна знайти в нижній частині brew.sh .
nohillside

Відповіді:


1

Для того, щоб піггітитись з північного схилу, я хотів би сказати, що ви, можливо, зможете досягти багато чого, створивши власний кран! Ви навіть можете натискати на репо, розміщені в іншому місці (скажімо, як приватне, бітбукет чи будь-що інше), поки ви вкажете URL-адресу git після торкання пива


0

Homebrew знає, які пакунки ви вже встановили, тому навіть якщо ви встановите gcc двічі (запустивши brew install gcc), він просто встановить один раз. Таким чином, ви можете сміливо помістити купу brew install <package>команд у ваші сценарії, не потрібно турбуватися про те, що витрачаєте багато часу.

Що краще - це підтримка Homebrew Brewfile, яка дозволяє визначити всю залежність в одному файлі та встановити їх усі, запустившиbrew bundle --file=<path/to/brewfile>

Ось приклад вариваційного файлу:

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

це еквівалентно бігу:

brew install ack git python3

Ви можете знайти більше прикладу пивоварного файлу, просто на Google.


Будь ласка, не надсилайте людей у ​​Google для відповідей, включайте їх у свій пост
nohillside
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.