Версии формул
homebrew/core поддерживает несколько версий формул, используя специальный формат именования. Например, формула GCC 9 называется gcc@9.rb и начинается с class GccAT9 < Formula.
Эта страница посвящена формулам с версиями, таким как foo@1.2. Варианты формул, такие как foo-full, не являются формулами с версиями: это отдельные формулы, предназначенные для предоставления другого компромисса между зависимостями и функциями, и они следуют политике зависимостей Homebrew/homebrew-core.
Допустимые формулы с версиями
Формулы с версиями, которые мы включаем в homebrew/core, должны соответствовать следующим требованиям:
- Программы с версиями должны собираться во всех поддерживаемых Homebrew версиях macOS.
- Формулы с версиями должны отличаться от текущего стабильного выпуска основной или дополнительной (но не исправляющей) версией. Это связано с тем, что исправляющие версии содержат исправления ошибок или обновления безопасности, и мы хотим, чтобы вы устанавливали обновления безопасности.
- Нестабильные версии (альфа-, бета- и версии для разработки) недопустимы для формул с версиями и без версий.
- В upstream-проекте должна быть ветка выпуска для каждой версии формулы и должна быть явно определена политика выпуска обновлений безопасности для каждой версии по мере необходимости. Например, PHP 7.0 не была поддерживаемой версией, а PHP 7.2 была в январе 2020 года. Напротив, большинство программных проектов устроены так, что обновления безопасности выпускаются только для последних версий, поэтому их более ранние версии не подходят для включения в формулы с версиями.
- Формулы с версиями должны использовать общую кодовую базу с основной формулой. Если проект перемещён в другой репозиторий, мы рекомендуем создать новую формулу (
formula2, а неformula@2илиformula@1). - Формулы, зависящие от формул с версиями, не должны зависеть от одной и той же формулы в двух разных версиях в своих рекурсивных зависимостях. Например, если вы зависите от
openssl@1.0иfoo, аfooзависит отopenssl, вместо этого необходимо использоватьopenssl. - Формулы с версиями должны допускать одновременную компоновку только с соответствующим вариантом без версии, если upstream-проект это поддерживает, например, используя бинарные файлы с суффиксами. Если это невозможно, используйте
keg_only :versioned_formula, чтобы пользователи могли одновременно устанавливать несколько версий. keg_only :versioned_formulaне долженpost_installничего вHOMEBREW_PREFIX, что конфликтует с основной формулой (или другими формулами с версиями) либо дублирует её. Например, формулаnode@6не должна устанавливать свойnpmвHOMEBREW_PREFIX, как это делает формулаnode.- Предполагается, что представленные формулы с версиями будут востребованы большим числом людей. Если это перестанет быть так, они будут удалены. Мы постараемся не удалять формулы из топ-3000 формул
install_on_request. - Формулы с версиями не должны содержать
resource, для которых требуются обновления безопасности. Например, формулаnode@6не должна содержать ресурсnpm, а должна использоватьnpmиз upstream-архива. - Формулы с версиями должны быть максимально похожи на основные формулы, насколько это возможно и целесообразно. Создание или обновление формулы с версиями — это повод пересмотреть основную формулу и наоборот: например, можно ли удалить некоторые неиспользуемые или бесполезные параметры или сделать их значениями по умолчанию?
- Одновременно будет поддерживаться не более пяти версий формулы (включая основную), если только они не популярны (например, имеют более 1000 установок за 90 дней по данным аналитики). Удаляя формулы, не соответствующие этому требованию, мы будем руководствоваться прежде всего их востребованностью и статусом поддержки, а не возрастом.
- Формулы с версиями должны сохранять стабильность ABI на протяжении всего срока существования ветки версии. Обновления таких формул не должны приводить к несовместимости ABI или иным образом требовать увеличения ревизии зависимых формул. На практике это означает, что для повторной сборки зависимых формул никогда не должны требоваться изменения ревизии
revisionпри переходе на более новые версии. Обновления версий, нарушающие это требование, должны отклоняться, а формула после этого — переводиться в статус устаревшей.
Закрепление установленных формул на определённых версиях
Не следует использовать версии Homebrew, чтобы «закреплять» формулы в соответствии с личными требованиями. Если в homebrew/core уже есть формула с нужной версией, сначала отдайте предпочтение ей: Homebrew продолжит её поддерживать и обновлять.
Если вам нужно что-то другое, выберите самый простой подходящий инструмент:
brew pin
Используйте brew pin <formula_or_cask>, если хотите, чтобы brew upgrade перестал обновлять уже установленный пакет.
Преимущества:
- самый простой встроенный вариант
Недостатки:
- пока пакет закреплён, вы не будете получать его обновления, включая обновления безопасности
- закреплённые формулы могут блокировать установку или обновление, если другим формулам требуется более новая версия
- закреплённые cask-пакеты могут обновляться самостоятельно, вне Homebrew
$HOMEBREW_NO_AUTO_UPDATE
Используйте export HOMEBREW_NO_AUTO_UPDATE=1, если хотите, чтобы Homebrew перестал автоматически обновлять метаданные формул и cask-пакетов, пока вы не решите выполнить brew update.
Преимущества:
- Homebrew узнаёт о новых версиях только при явном запуске
brew update
Недостатки:
- само по себе это не мешает
brew upgradeизменять установленные формулы - вы можете пропустить исправления и обновления безопасности, пока не выполните
brew update
Если вы используете brew bundle, дополните его brew bundle --no-upgrade или export HOMEBREW_BUNDLE_NO_UPGRADE=1, если хотите, чтобы brew bundle также перестал обновлять установленные зависимости.
brew bundle --no-upgrade и $HOMEBREW_BUNDLE_NO_UPGRADE
Используйте brew bundle --no-upgrade или export HOMEBREW_BUNDLE_NO_UPGRADE=1, если хотите, чтобы brew bundle перестал выполнять brew upgrade для устаревших зависимостей.
Преимущества:
- самый простой способ сократить количество изменений в
brew bundle
Недостатки:
- это не закрепляет версии и не добавляет поддержку файлов блокировки
-
brew installвсё ещё может обновить зависимость, если это необходимо - при использовании этого подхода вы можете пропустить исправления и обновления безопасности
$HOMEBREW_NO_INSTALL_UPGRADE
Используйте export HOMEBREW_NO_INSTALL_UPGRADE=1, если хотите, чтобы brew install <formula> перестал обновлять уже установленную, но устаревшую формулу.
Преимущества:
- позволяет избежать неожиданных обновлений при выполнении
brew install
Недостатки:
- это не закрепляет версии
- это не останавливает
brew upgrade - при использовании этого подхода вы можете пропустить исправления и обновления безопасности
$HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK
Используйте export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1, если хотите, чтобы Homebrew не проверял наличие устаревших или неисправных установленных зависимых пакетов после установки, обновления или повторной установки.
Преимущества:
- может сократить цепочки обновлений и повторных установок
Недостатки:
- это не инструмент для фиксации версий
- из-за этого могут остаться некорректные связи или устаревшие зависимые пакеты
- это может увеличить риск сбоев при последующем выполнении
brew installилиbrew upgrade
brew version-install
Используйте brew version-install, если хотите упростить извлечение конкретной старой версии формулы в собственный tap и её установку.
Преимущества:
- самый простой способ начать использовать старую версию формулы из собственного tap
Недостатки:
- с этого момента вы сами отвечаете за обновление и поддержку этой формулы, исправление устаревших элементов и установку обновлений безопасности
brew extract
Используйте brew extract, если вам нужен более низкоуровневый подход, позволяющий самостоятельно управлять извлечённым файлом формулы в tap. Подробнее см. в разделе Как создать и поддерживать tap.
Преимущества:
- даёт максимальный контроль над файлом формулы в вашем tap
Недостатки:
- это самый трудоёмкий вариант
- с этого момента вы сами отвечаете за обновление и поддержку этой формулы, исправление устаревших элементов и установку обновлений безопасности
Homebrew поддерживает эти команды и локальные рабочие процессы, но не обязуется поддерживать за вас каждую зафиксированную или извлечённую версию формулы. Прежде чем отправлять сообщения об ошибках Homebrew, сначала выполните brew update и воспроизведите проблему с актуальными метаданными. Если вы используете brew pin, $HOMEBREW_NO_AUTO_UPDATE, $HOMEBREW_BUNDLE_NO_UPGRADE, $HOMEBREW_NO_INSTALL_UPGRADE, $HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK, brew version-install или brew extract, отправляйте сообщения об ошибках, только если можете воспроизвести проблему с основными формулами. Если вы поддерживаете формулы в собственном tap, вы сами отвечаете за эти формулы, их перевод в статус устаревших и обновления безопасности для них. Если вам или вашей организации требуется долгосрочный контроль над версиями формул, создайте собственный tap. То, что brew upgrade нарушает работу вашей локальной зафиксированной или извлечённой формулы, не является основанием для добавления и поддержки Homebrew ещё одной исторической версии в homebrew/core.
Если формула сейчас есть в репозитории Homebrew/homebrew-core или была в нём раньше (то есть была перенесена или удалена), вы можете восстановить её для собственного использования с помощью команды brew version-install. Она установит нужную версию формулы из вашего собственного tap. Например, если проект зависит от automake 1.12, а не от последней версии, можно получить формулу automake версии 1.12, выполнив:
brew version-install automake@1.12
Формулы, полученные таким способом, могут содержать устаревший, отключённый или удалённый синтаксис Homebrew (например, контрольные суммы могут быть sha1 вместо sha256); команда brew version-install не редактирует и не обновляет формулы в соответствии с актуальными стандартами и требованиями к стилю.
Мы можем временно добавлять в homebrew/core формулы с версиями для собственных нужд, которые не соответствуют этим требованиям. Наличие там формулы с версиями не означает, что она будет поддерживаться бессрочно или что мы готовы принимать другие версии, не соответствующие приведённым выше требованиям.
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/Versions