Spec-Zone.ru › Homebrew

Часто задаваемые вопросы (FAQ)

  • Есть ли где-нибудь глоссарий терминов?
  • Как обновить локальные пакеты?
  • Как запретить обновление определённых формул?
  • Как удалить Homebrew?
  • Как сохранить старые версии формулы при обновлении?
  • Почему brew upgrade <formula> или brew install <formula> также обновляет множество других компонентов?
  • Куда загружаются файлы?
  • Мои приложения Mac .apps не находят утилиты Homebrew
  • Почему после запуска команды разработчика Homebrew обновляется чаще?
  • Как внести вклад в Homebrew?
  • Почему вы компилируете всё?
  • Почему Homebrew следует устанавливать в расположение по умолчанию?
  • Почему префикс установки по умолчанию /opt/homebrew используется на компьютерах с Apple Silicon?
  • Почему префикс установки по умолчанию /home/linuxbrew/.linuxbrew используется в Linux?
  • Почему Homebrew считает sudo плохой идеей?
  • Какие владельцы и разрешения используются в Homebrew по умолчанию?
  • Почему некоторые команды не документированы?
  • Почему вы не приняли мой pull request?
  • Можно ли самостоятельно редактировать формулы?
  • Можно ли создавать новые формулы?
  • Как получить формулу из чужого pull request?
  • Почему формулу удалили или отключили?
  • Homebrew — неудачное название, слишком общее. Почему выбрали именно его?
  • Что означает «только в keg» (keg-only)?
  • Как указать другие аргументы configure для формулы?
  • Почему некоторые приложения не обновляются при выполнении brew upgrade?
  • Почему бы не переписать Homebrew на Rust, чтобы ускорить его?
  • Почему приложения cask теряют положение в Dock или Launchpad и настройки разрешений при выполнении brew upgrade?

Есть ли где-нибудь глоссарий терминов?

В руководстве по созданию формул есть список терминов Homebrew.

Как обновить локальные пакеты?

Сначала обновите все описания пакетов (формулы) и сам Homebrew:

brew update

Теперь можно посмотреть, какие из установленных пакетов (keg) устарели:

brew outdated

Обновите всё:

brew upgrade

Или обновите конкретную формулу:

brew upgrade <formula>

Как запретить обновление определённых формул?

Чтобы запретить обновлять определённый пакет:

brew pin <formula_or_cask>

Если вы также не хотите, чтобы Homebrew автоматически узнавал о новых версиях, пока вы сами этого не захотите, полностью отключите автоматическое обновление:

export HOMEBREW_NO_AUTO_UPDATE=1

О компромиссах и альтернативах см. раздел Фиксация установленных формул на определённых версиях.

Чтобы снова разрешить обновление пакета:

brew unpin <formula_or_cask>

Обратите внимание: закреплённые устаревшие формулы, от которых зависит другая формула, необходимо обновлять при необходимости, поскольку мы не разрешаем собирать формулы на основе устаревших версий. Если такой вариант вам не подходит, см. раздел Фиксация установленных формул на определённых версиях.

Закреплённые cask-приложения пропускаются командой brew upgrade, однако собственная программа обновления приложения может обновить его независимо от Homebrew.

Как удалить Homebrew?

Чтобы удалить Homebrew, запустите скрипт удаления из репозитория Homebrew/install.

Как сохранить старые версии формулы при обновлении?

Homebrew автоматически удаляет старые версии каждой формулы, обновлённой с помощью brew upgrade, а также периодически выполняет дополнительную очистку каждые 30 дней.

Чтобы отключить автоматическую brew cleanup:

export HOMEBREW_NO_INSTALL_CLEANUP=1

Чтобы отключить автоматическую brew cleanup только для формул foo и bar:

export HOMEBREW_NO_CLEANUP_FORMULAE=foo,bar

Если автоматическая brew cleanup отключена, то при удалении формулы будет удалена только последняя установленная версия. Остальные версии формулы, которые могли быть установлены ранее, удалены не будут. При запуске brew upgrade Homebrew продолжит пытаться установить самую новую известную ему версию. Это может вас удивить.

В этом случае для полного удаления формулы можно выполнить brew uninstall --force <formula>. Будьте осторожны: эта операция приводит к безвозвратному удалению данных.

Почему brew upgrade <formula> или brew install <formula> также обновляет множество других компонентов?

Homebrew не поддерживает произвольное сочетание версий формул, поэтому все зависимости формулы и все формулы, которые, в свою очередь, зависят от неё, необходимо обновить до последней версии: только такое сочетание формул мы тестируем. В результате любая команда upgrade или install может обновить множество других, казалось бы, не связанных с ней формул, особенно если обновления требуют такие важные формулы, как python или openssl.

Куда загружаются файлы?

brew --cache

Обычно это: ~/Library/Caches/Homebrew

Мои приложения Mac .apps не находят утилиты Homebrew

По умолчанию у приложений с графическим интерфейсом в macOS префикс Homebrew отсутствует в PATH. Это можно исправить, выполнив sudo launchctl config user path "$(brew --prefix)/bin:${PATH}", а затем перезагрузив компьютер, как описано в man launchctl. Обратите внимание: это задаёт launchctl PATH для всех пользователей.

Почему после запуска команды разработчика Homebrew обновляется чаще?

Запуск команды разработчика (например, brew edit, brew create) включает режим разработчика Homebrew. Это означает, что:

  • Homebrew может автоматически запускать brew update перед некоторыми командами каждый час вместо одного раза в 24 часа.
  • Обновления будут отслеживать последний коммит в main, а не последнюю стабильную метку.

Чтобы вернуться к поведению по умолчанию, выполните brew developer off. Если вы хотите вернуться только к стабильным меткам, задайте HOMEBREW_UPDATE_TO_TAG=1 в окружении оболочки. Чтобы настроить частоту автоматических обновлений, используйте HOMEBREW_AUTO_UPDATE_SECS; чтобы полностью отключить автоматические обновления, задайте HOMEBREW_NO_AUTO_UPDATE=1.

Как внести вклад в Homebrew?

Прочитайте наши рекомендации для участников проекта.

Почему вы компилируете всё?

Homebrew предоставляет предварительно собранные двоичные пакеты для многих формул. Они называются бутылками (bottles) и доступны по адресу https://github.com/Homebrew/homebrew-core/packages.

Если бутылки доступны, они используются по умолчанию, за исключением следующих случаев:

  • Указан параметр --build-from-source.
  • Для текущей версии ОС на компьютере нет бутылки. (Бутылки для macOS создаются только для поддерживаемых версий macOS.)
  • Homebrew установлен не в префикс по умолчанию (хотя некоторые бутылки поддерживают и другие префиксы).
  • Команде установки переданы параметры формулы. Например, brew install <formula> попытается найти готовый двоичный пакет, а brew install --with-foo <formula> запустит сборку из исходного кода.

Мы стремимся создавать бутылки для всего.

Почему Homebrew следует устанавливать в расположение по умолчанию?

Предварительно собранные двоичные пакеты Homebrew (так называемые бутылки) для многих формул можно использовать, только если Homebrew установлен в префикс по умолчанию. В противном случае пакеты придётся собирать из исходного кода. Сборка из исходного кода занимает много времени, часто завершается с ошибкой и не поддерживается. Префикс по умолчанию:

  • /opt/homebrew для macOS на компьютерах с Apple Silicon;
  • /usr/local для macOS на компьютерах Intel;
  • /home/linuxbrew/.linuxbrew для Linux.

Упростите себе жизнь: установите Homebrew в префикс по умолчанию, чтобы использовать наши предварительно собранные двоичные пакеты. Выбирайте другой префикс на свой страх и риск!

Почему на компьютерах с Apple Silicon используется префикс установки по умолчанию /opt/homebrew?

Префикс /opt/homebrew был выбран, чтобы установки в /opt/homebrew для Apple Silicon и /usr/local для Rosetta 2 могли сосуществовать и использовать бутылки.

Почему в Linux используется префикс установки по умолчанию /home/linuxbrew/.linuxbrew?

Префикс /home/linuxbrew/.linuxbrew был выбран, чтобы после установки не записывать данные в каталоги, принадлежащие системе, и при этом сохранить возможность использовать большинство предварительно скомпилированных двоичных пакетов (бутылок). Homebrew предназначен для установки одним пользователем, а не для общих учётных записей с разными ролями. Информацию о неподдерживаемых многопользовательских средах см. в разделе Уровни поддержки.

Почему Homebrew утверждает, что sudo — это плохо?

Кратко: sudo опасен, и TextMate.app вы установили без sudo.

Homebrew отказывается работать с sudo.

Используйте sudo только для инструментов, которым доверяете. Конечно, Homebrew можно доверять 😉 — но доверяете ли вы Makefile размером в несколько мегабайт, который запускает Homebrew? Разработчики часто гораздо лучше разбираются в C++, чем в синтаксисе make. Использовать sudo для подобных вещей слишком рискованно. Они могут изменять (или загружать) любые файлы в вашей системе. И действительно, мы видели, как некоторые скрипты сборки пытались изменить /usr, даже когда был указан совершенно другой префикс.

Мы используем песочницу macOS, чтобы этого не допустить, но она не работает при запуске от имени пользователя root (у которого также есть права на чтение и запись почти во всей системе). Песочница — часть более широких мер Homebrew по обеспечению безопасности цепочки поставок программного обеспечения.

Вы chown root /Applications/TextMate.app? Вряд ли. Так насколько важно chown root wget?

Примечание: Homebrew в первую очередь предназначен для использования одним пользователем и плохо работает в многопользовательских конфигурациях.

Какие владельцы и разрешения используются в Homebrew по умолчанию?

Для начала см. предыдущий вопрос о sudo.

В macOS для всех подкаталогов и файлов принудительно устанавливается группа пользователей admin (вместо группы по умолчанию staff), а владельцем становится текущий пользователь, выполнивший установку.

В Linux владельцами всех подкаталогов и файлов по умолчанию становятся текущий пользователь и группа пользователей, от имени которых была выполнена установка.

По умолчанию для каталогов и файлов, управляемых Homebrew, в macOS и Linux задаются разрешения 0755 (u=rwx,g=rx,o=rx). Это означает, что изменять или заменять файлы в префиксе Homebrew может только владелец (обычно пользователь, выполнивший установку), тогда как все пользователи могут читать и запускать установленные двоичные файлы.

При запуске двоичный файл, установленный Homebrew, работает с правами пользователя, который его запустил.

Примечание: Homebrew в первую очередь предназначен для использования одним пользователем и плохо работает в многопользовательских конфигурациях.

Почему некоторые команды не документированы?

Если команды нет в man brew, вероятно, это внешняя команда, документацию к которой можно посмотреть с помощью --help.

Почему вы не приняли мой pull request?

Если вы учли все замечания сопровождающих проекта и все тесты проходят, напомните о запросе комментарием «bump». Иногда мы пропускаем запросы — их очень много. Пока ждёте, перебазируйте свой pull request, чтобы его было проще принять.

Можно ли самостоятельно редактировать формулы?

Да! Это просто! Если brew tap не отображает homebrew/core, настройте локальную копию для редактирования:

  1. Задайте HOMEBREW_NO_INSTALL_FROM_API=1 в окружении оболочки;
  2. Выполните brew tap --force homebrew/core и дождитесь завершения клонирования;
  3. Выполните brew edit <formula>, чтобы открыть формулу в EDITOR.

Отправлять изменения обратно в homebrew/core не обязательно: просто отредактируйте формулу под свои нужды и выполните brew install <formula>. Кроме того, brew update объединит ваши изменения с исходной версией, и формула останется актуальной с учётом ваших изменений!

Обратите внимание: если вы редактируете формулу или cask из core, перед использованием brew install или brew update необходимо задать HOMEBREW_NO_INSTALL_FROM_API=1, иначе команды проигнорируют локальные изменения и будут использовать API.

Чтобы отменить все изменения, внесённые вами в любые репозитории Homebrew, выполните brew update-reset. Все репозитории Homebrew будут возвращены к состоянию исходной версии.

Можно ли создавать новые формулы?

Да! Это просто! Если у вас уже есть локальная копия homebrew/core (см. выше), воспользуйтесь командой brew create. Homebrew откроет формулу в EDITOR, и вы сможете её отредактировать. Скорее всего, она уже устанавливается — проверьте: brew install <formula>. Если возникнут проблемы, запустите команду с параметром --debug, например так: brew install --debug <formula>. Откроется оболочка для отладки.

Если вы хотите добавить новую формулу в homebrew/core или узнать больше о создании формул, прочитайте руководство по созданию формул.

Как получить формулу из чужого pull request?

Убедитесь, что у вас есть локальная копия homebrew/core, затем выполните:

brew update
brew install gh
cd "$(brew --repository homebrew/core)"
gh pr checkout pull_request_number

Почему формулу удалили или отключили?

Узнайте это с помощью brew log <formula>! Вероятная причина — наличие нерешённых проблем и/или данные нашей аналитики, указывающие на то, что формула не пользуется спросом.

Для отключённых и устаревших формул объяснение также можно получить, выполнив brew info <formula>.

Homebrew — неудачное название, слишком общее. Почему выбрали именно его?

Создатель Homebrew @mxcl не слишком увлекался темой пива и не предполагал, что проект может стать популярным. Когда Max понял, что проект стал популярным, менять название было уже поздно. Впрочем, сегодня первая ссылка в Google по запросу «homebrew» не связана с пивом 😉

Что означает «только в keg» (keg-only)?

Это означает, что формула устанавливается только в Cellar и не связывается с префиксом по умолчанию. Поэтому большинство инструментов её не найдут. Узнать, почему формула была установлена только в keg, и посмотреть инструкции по добавлению её в PATH можно, выполнив brew info <formula>.

Можно изменить конфигурацию сборки инструмента, чтобы он находил зависимости, установленные только в keg. Или при необходимости связать формулу с помощью brew link <formula>, хотя это может привести к неожиданному поведению, если формула перекрывает системное ПО macOS.

Как указать другие аргументы configure для формулы?

brew edit <formula> и отредактируйте формулу напрямую. Сейчас другого способа нет.

Почему некоторые приложения не обновляются при выполнении brew upgrade?

После выполнения brew upgrade вы можете заметить, что некоторые cask-пакеты, которые, по вашему мнению, должны обновиться, остались без изменений.

Как вы, вероятно, знаете, многие программы для macOS умеют обновляться самостоятельно:

Sparkle update window

Это может конфликтовать с механизмом upgrade в Homebrew Cask.

Когда программа обновляет себя с помощью встроенных механизмов, Homebrew Cask об этом не знает, и сведения о версиях в итоге расходятся. Если затем обновить программу через Homebrew Cask, в то время как у нас записана более старая версия, программа будет понижена до этой версии.

Есть несколько идей, как решить эту проблему:

  • Попытаться предотвратить автоматическое обновление программы. brew pin <cask> может запретить Homebrew обновлять cask, но не отключает собственную программу обновления приложения. Большинство программ в Homebrew Cask имеют закрытый исходный код, поэтому попытки управлять этим для каждого приложения были бы гаданием.
  • Попытаться получить версию установленной программы и сравнить её с версией cask, а затем решить, что делать. Это было бы сложное решение, которое нарушило бы другие аспекты нашей методологии, например использование версий для подстановки значений url (что существенно упростило бы сопровождение). Кроме того, это решение не универсально: многие разработчики программ непоследовательно подходят к нумерации версий (а пакеты приложений должны содержать две строки версии), и такой подход подходит не для всех типов программ, которые мы поддерживаем.

Поэтому мы не вмешиваемся в работу программ. Всё, что установлено с помощью Homebrew Cask, должно вести себя так же, как при ручной установке. Однако мы также хотим поддерживать программы, которые не обновляются самостоятельно, поэтому для таких программ добавляем в cask auto_updates true. Когда Homebrew обнаруживает, что версия, установленная в appdir пользователя, старее последней версии в tap, brew upgrade пытается автоматически обновить такие cask-пакеты. Чтобы отключить это поведение по умолчанию, задайте HOMEBREW_NO_UPGRADE_AUTO_UPDATES_CASKS=1.

Cask-пакеты, использующие version :latest, также исключены, поскольку мы не можем отслеживать установленную версию. Можно попросить разработчиков таких программ выпускать версии с указанием номера версии (то есть включать версию в путь загрузки url).

Если вы всё же хотите принудительно обновить программу через Homebrew Cask, укажите её явно в команде upgrade:

brew upgrade <cask>

Или используйте параметр --greedy:

brew upgrade --greedy

Подробнее см. раздел upgrade на странице руководства brew.

Почему бы не переписать Homebrew на Rust, чтобы ускорить его?

Мы попробовали. Мы создали brew-rs — интерфейсную программу на Rust — и сравнили её с Ruby без передачи задач обратно Ruby, учитывая операции ввода-вывода с холодным кэшем. Rust показал преимущество в нескольких узких задачах: он быстрее загружал группы бутылок, особенно при прогретом кэше архивов. Но загрузка — не та часть работы, на которую пользователи тратят больше всего времени.

В случае brew install, операции, которая действительно важна пользователям, Ruby оказался быстрее в показательных сравнениях. Реальная установка включает гораздо больше, чем загрузку файла: обработку метаданных, распаковку бутылок, создание ссылок на файлы, запись вкладок, выполнение postinstall и сохранение существующего поведения Homebrew. Интерфейсная программа на Rust казалась быстрее только тогда, когда пропускала эту работу или передавала её обратно Ruby, а такая передача лишает переписывание смысла.

Таким образом, переписывание означало бы повторную реализацию структуры Cellar, вкладок, ссылок, примечаний, postinstall, поведения cask-пакетов, перехода к сборке из исходного кода и логики tap на другом языке — почти без выигрыша в самом важном сценарии. Полезная работа по повышению производительности ведётся на Ruby: мы раньше запускаем полезные операции ввода-вывода по сети и на диске, раньше используем метаданные бутылок из API и сокращаем накладные расходы при простой загрузке бутылок, не дублируя логику установки во втором интерфейсе.

Почему приложения cask теряют положение в Dock или Launchpad и настройки разрешений при выполнении brew upgrade?

Homebrew может обновлять приложения cask двумя способами: удалить старую версию и установить новую либо заменить содержимое приложения новым. При удалении и повторной установке macOS считает, что приложение удаляют без намерения установить его заново и поэтому удаляет некоторые внутренние метаданные старого приложения, в том числе сведения о его положении в Dock и Launchpad и предоставленных ему разрешениях. Замена содержимого позволяет обойти эту проблему: обновление рассматривается как обновление на месте. Однако начиная с macOS Ventura такие обновления на месте разрешены только в том случае, если приложению, выполняющему обновление (в данном случае терминалу, из которого запущен Homebrew), предоставлены определённые разрешения. Достаточно разрешения «Управление приложениями» или «Полный доступ к диску».

Если у Homebrew есть необходимые разрешения, по умолчанию используются обновления на месте. В противном случае применяется удаление и повторная установка.

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/FAQ

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API