Spec-Zone.ru › Homebrew

Версии формул

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

Spec-Zone.ru

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