Learning Platform
Глоссарий Troubleshooting
Урок 12.03 · 18 мин
Начальный
brewHomebrewmacOSApple SiliconBrewfilecasks

Homebrew: пакетный менеджер для macOS

macOS не имеет встроенного пакетного менеджера для разработческих тулз. Хотите Postgres, jq, ripgrep, Docker — нужно ставить руками или через Homebrew.

Homebrew — де-факто стандарт для разработчиков на Mac. Если вы новый DE и пришли на работу с Mac, первый день начинается с brew install десятка инструментов. В этом уроке — как пользоваться brew и где он живёт в файловой системе.


Что такое Homebrew

Homebrew — community-driven пакетный менеджер, поддерживается volunteers. Изначально для macOS, потом добавили Linux support (как Linuxbrew). Для macOS — основной инструмент. Для Linux — альтернатива apt/dnf, когда нужны user-space пакеты без sudo.

# Установка
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# После установки — добавить в PATH (скрипт это делает сам)
eval "$(/opt/homebrew/bin/brew shellenv)"

# Проверить
brew --version
# Homebrew 4.3.x

/opt/homebrew vs /usr/local

Главная путаница на macOS — где живёт brew. Зависит от архитектуры:

Где живёт Homebrew

Apple Silicon (M1/M2/M3/M4) и Intel — разные пути по дизайну

/opt/homebrewApple Silicon (M1, M2, M3, M4 и далее). Изолированный prefix чтобы не конфликтовать с Intel brew (для Rosetta 2 случаев)
/usr/localIntel Mac. Старая инсталляция. Если запустили brew под Rosetta 2 на Apple Silicon — тоже здесь
/opt/homebrew/bin/Бинари установленных пакетов
/usr/local/bin/Бинари установленных пакетов (Intel или Rosetta)
/opt/homebrew/Cellar/Каждый пакет в своей версионированной директории. brew создаёт симлинки в /opt/homebrew/bin/
/usr/local/Cellar/Cellar для Intel

Узнать, какой brew у вас:

# Проверить путь brew
which brew

# Узнать prefix
brew --prefix
# Apple Silicon: /opt/homebrew
# Intel или Rosetta: /usr/local

# Архитектура текущей терминал-сессии
uname -m
# arm64 — Apple Silicon native
# x86_64 — Intel или Rosetta 2
WARNING

Если у вас Apple Silicon и which brew показывает /usr/local/bin/brew — вы случайно запускаете под Rosetta. Установите native ARM brew в /opt/homebrew/, а Intel brew удалите или используйте параллельно. Native ARM brew работает быстрее.


Базовые команды

# Установить
brew install postgresql@17

# Несколько разом
brew install jq ripgrep fd tmux htop

# Обновить метаданные репозитория (formulae)
brew update

# Обновить установленные пакеты
brew upgrade

# Обновить конкретный
brew upgrade postgresql@17

# Удалить
brew uninstall postgresql@17

# Поиск
brew search postgres

# Информация о пакете
brew info ripgrep

В отличие от apt, brew update обновляет сам Homebrew и каталог formulae — не пакеты. Это аналог apt update. Чтобы реально обновить установленные пакеты — brew upgrade. Та же логика как в apt.


brew services — управление демонами

Когда вы устанавливаете PostgreSQL или Redis через brew, нужно их запустить как сервис.

# Список доступных сервисов
brew services list

# Запустить (и автостарт при логине)
brew services start postgresql@17

# Просто запустить, без автостарта
brew services run postgresql@17

# Остановить
brew services stop postgresql@17

# Перезапустить
brew services restart postgresql@17

Под капотом brew services создаёт launchd .plist файлы в ~/Library/LaunchAgents/. Это macOS-эквивалент systemd.

systemd units и init-системы — launchd как macOS-аналог systemd

Cleanup — освобождаем место

Homebrew со временем накапливает кэш скачанных файлов, старые версии пакетов:

# Что можно почистить
brew cleanup --dry-run

# Реально почистить
brew cleanup

# Полная глубокая чистка (включая старые версии)
brew cleanup --prune=all

Также удалять неиспользуемые зависимости:

# Пакеты, установленные как зависимости и более не используемые
brew autoremove

Casks — GUI приложения

brew cask — для установки GUI-приложений: VS Code, Docker Desktop, Slack, Postman.

# Установить
brew install --cask visual-studio-code
brew install --cask docker
brew install --cask postman

# Несколько разом
brew install --cask iterm2 rectangle alacritty

# Поиск casks
brew search --casks postgres

Cask-приложения устанавливаются в /Applications/ — как обычные Mac-приложения. brew просто скачивает .dmg/.zip и устанавливает.

# Список всех установленных casks
brew list --cask

Brewfile — версионирование стека

Главная DE-полезность brew: можно описать весь набор тулз в файле и применить одной командой на новой машине.

# Сгенерировать Brewfile из текущих установленных пакетов
brew bundle dump --describe

# Файл Brewfile появится в текущей директории
cat Brewfile

Пример Brewfile:

tap "homebrew/cask"
tap "homebrew/services"

# CLI tools
brew "git"
brew "jq"
brew "ripgrep"
brew "fd"
brew "fzf"
brew "tmux"
brew "htop"

# Languages
brew "[email protected]"
brew "node@20"
brew "go"

# Databases (CLI clients)
brew "postgresql@17"
brew "redis"

# GUI apps
cask "visual-studio-code"
cask "docker"
cask "iterm2"
cask "alacritty"
cask "rectangle"

Применить (например, на новой машине):

brew bundle install
# или
brew bundle install --file=~/dotfiles/Brewfile

DE-практика: положите Brewfile в свой dotfiles-репозиторий на GitHub. При получении нового MacBook — git clone dotfiles && brew bundle install — и через 15 минут у вас полный рабочий сетап.

TIP

Brewfile + dotfiles (.zshrc, .tmux.conf, etc.) — это reproducibility вашей dev-среды. Когда придёт время поменять MacBook (или временно работать с чужого) — у вас всё восстанавливается за 15 минут вместо «вспоминать, что я там устанавливал».


brew taps — сторонние репозитории

tap — это сторонний source формул. Например, для специальных версий софта:

# Добавить tap
brew tap mongodb/brew

# Установить из tap
brew install mongodb/brew/mongodb-community

# Список текущих taps
brew tap

Самый известный — homebrew/cask-fonts для шрифтов программистов:

brew tap homebrew/cask-fonts
brew install --cask font-fira-code-nerd-font
brew install --cask font-jetbrains-mono-nerd-font

DE-сценарии

1. Setup новой dev-машины

# Установить brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Применить Brewfile
git clone https://github.com/yourname/dotfiles ~/dotfiles
cd ~/dotfiles
brew bundle install

2. Базовый DE-набор для Mac

brew install \
  git \
  [email protected] \
  jq \
  ripgrep \
  fd \
  fzf \
  tmux \
  htop \
  tree \
  wget \
  curl \
  postgresql@17 \
  redis

brew install --cask \
  visual-studio-code \
  docker \
  iterm2 \
  rectangle

3. Несколько версий Python

Brew позволяет ставить разные мажорные версии параллельно:

brew install [email protected] [email protected] [email protected]

# Где они
ls /opt/homebrew/opt/[email protected]/bin/
# python3.13, pip3.13, etc.

# Симлинки в /opt/homebrew/bin/ обычно идут на одну версию
which python3   # /opt/homebrew/bin/python3 -> [email protected]

# Чтобы переключить дефолт
brew unlink [email protected]
brew link [email protected]

В реальности для DE — используют pyenv или uv для управления версиями Python, а не brew. Но базово понимать как brew управляет версиями полезно.

4. Linux + Homebrew

# На Ubuntu/Debian
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Brew устанавливается в /home/linuxbrew/.linuxbrew/
# Полезно когда нужны user-space инструменты без sudo

Это удобно когда вы на shared dev-сервере без root: ставите brew в home, инструменты live в ~/.linuxbrew/.


Homebrew под капотом

Каждая «formula» (рецепт установки) — это Ruby-скрипт. Можно посмотреть:

brew edit ripgrep
# Откроет formula в редакторе

Хранится в /opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/r/ripgrep.rb.

Formula описывает: откуда скачать source, какие зависимости, как компилировать, какие тесты запустить. Brew умеет компилировать from source, но обычно скачивает pre-built bottle (бинарь под текущую macOS/architecture) — это намного быстрее.

# Установить из исходников, не из bottle
brew install --build-from-source <pkg>

Попробуй сам (на macOS)

# 1. Проверь brew
brew --version
brew --prefix

# 2. Базовая установка
brew install jq ripgrep tree

# 3. Поиск и инфо
brew search postgres
brew info postgresql@17

# 4. Установить и запустить Postgres
brew install postgresql@17
brew services start postgresql@17

# Проверить
psql --version
brew services list

# 5. Dump текущего сетапа в Brewfile
brew bundle dump --describe --file=~/Brewfile.snapshot
cat ~/Brewfile.snapshot

# 6. Cleanup
brew cleanup --dry-run

# 7. Что устаревшее (можно обновить)
brew outdated

Cross-link: предыдущий урок 02 — dnf. Следующий урок 04 — snap/flatpak. Модуль 18 — продуктивность: tmux, fzf, jq — почти всегда ставятся через brew на Mac.


Проверка знанийKnowledge check
Что такое Brewfile, как его создать и зачем он нужен Junior DE?
ОтветAnswer
Brewfile — это текстовый файл (в Ruby DSL) с описанием всех brew-пакетов и cask-приложений, которые должны быть установлены. Создаётся через 'brew bundle dump --describe' — команда смотрит на текущие установленные пакеты и пишет их в Brewfile. Применяется через 'brew bundle install'. Зачем нужен: 1) Когда получаете новый MacBook (или временно работаете на чужом) — одна команда восстанавливает весь dev-стек. 2) Reproducibility: если у двух коллег один Brewfile, у них одинаковое окружение. 3) Версионирование: положите Brewfile в свой dotfiles-репозиторий на GitHub, отслеживайте через git что менялось. 4) Документация: это живая документация «что у меня установлено». Типичный DE кладёт Brewfile рядом с .zshrc/.tmux.conf/.gitconfig в dotfiles. При смене ноутбука: git clone dotfiles, brew bundle install — и через 15 минут полный рабочий setup. Альтернатива в Linux — Ansible-плейбук или ad-hoc shell-скрипт с apt install.

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 5. На Mac с Apple Silicon (M3) `which brew` показывает `/usr/local/bin/brew`. В чём проблема?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4