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. Зависит от архитектуры:
Apple Silicon (M1/M2/M3/M4) и 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
Если у вас 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.
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 минут у вас полный рабочий сетап.
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.