Я намагаюся написати скрипт оболонки для автоматизації встановлення купи залежностей для проекту на 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
Тепер мої запитання (запитання на кілька частин!)
- Це правильний спосіб використання
which brew
абоwhich X
де X може бути gcc, make etc., а потім порівнювати їх з hardcoded,/usr/bin/X
щоб перевірити їх існування? Оскільки у мене є досить перелік їх, мені потрібно перевірити та встановити такі оголошувальні змінні для всіх і перехресна перевірка шляхами мені якось не здається доречною. - Як впоратися з ситуацією, коли користувач встановив ці пакунки, але в якомусь іншому місці з будь-якої причини? (Це здається дещо об'єктивним, але для того, щоб забезпечити, що проект збирає та базується на цих залежностях, чи повинен я застосовувати лише ці шляхи?)
- Крім того, один або кілька пакетів можуть бути
git
репостовані, і їх потрібно клонувати, складати та встановлювати на ходу. Що має бути належним місцем для розміщення створених.dylib
s та створення символьних посилань, щоб переконатися, що всі ці взаємозалежні пакети можуть знайти один одного та працювати в спокої? - Чи є щось еквівалентне
virtual_env
абоjenv
ізолювати всі ці установки (звичайно, використовуючи HomeBrew, в якому вони потрапляють/usr/local/Cellar
)? Але, оскільки macOS має щонайменше декілька з них (git, gcc тощо), я не хочу дублювати установки.
PS Будь-яка допомога з точки зору напрямку, ресурсу чи прикладу проекту, що працює з великою кількістю залежностей, допоможе. Я просто не можу з’ясувати правильні ключові слова чи потрібні ресурси для пошуку рішення чи часткового рішення. Дякую. :)
which
, просто перевірте вихідний код ( $?
). Це також вирішує проблеми "бінарних, встановлених у випадковому місці". Але: якщо ви все одно використовуєте Homebrew, чому б не упакувати всю програму саме так і дозволити Homebrew вирішувати залежності?
brew
або вказати на ресурс із подібними прикладами?
brew
хакер, але я повністю впевнений, що вони вже вирішили всі проблеми, з якими ви стикаєтесь. Посилання на документацію про те , як писати свої власні формули і т.д. , можна знайти в нижній частині brew.sh .