Бутылки (бинарные пакеты)
Бутылки создаются путем установки формулы с помощью brew install --build-bottle <formula>, а затем ее упаковки в бутылку с помощью brew bottle <formula>. В текущем каталоге создается файл бутылки, а DSL-код бутылки выводится для вставки в файл формулы.
Использование
Если устанавливаемая формула определяет бутылку, подходящую для вашей системы, она будет автоматически загружена и установлена при запуске brew install <formula>.
Бутылки не будут использоваться, если:
- пользователь запросил это (указав
--build-from-source), - формула требует этого (с помощью
pour_bottle?), - при установке указаны какие-либо параметры (все бутылки собираются с параметрами по умолчанию),
- бутылка не актуальна (например, отсутствует или не совпадает контрольная сумма),
- или значение
cellarбутылки не равно ни:any(для ее установки требуется определенный путь Cellar), ни текущему значениюHOMEBREW_CELLAR(требуемый путь Cellar не совпадает с путем текущей установки Homebrew).
Создание
Бутылки для формул homebrew/core создаются BrewTestBot при отправке запроса на включение изменений. Если формула успешно собирается на каждой поддерживаемой платформе и сопровождающий одобряет изменение, BrewTestBot обновляет блок bottle do и загружает каждую бутылку в GitHub Packages.
По умолчанию бутылки собираются для самого старого процессора, поддерживаемого целевой ОС/архитектурой (Core 2 для 64-разрядных операционных систем x86). Это гарантирует совместимость бутылок со всеми компьютерами, на которые вы можете их распространять. Если вы действительно хотите оптимизировать свои бутылки для другой архитектуры, передайте параметр --bottle-arch=, чтобы выполнить сборку для нее; например, brew install foo --build-bottle --bottle-arch=penryn. Помните: если вы собираете для более новой архитектуры, некоторые пользователи могут получить бинарные файлы, которые не смогут запустить, и это будет печально!
Формат
Бутылки представляют собой обычные сжатые gzip tar-архивы с скомпилированными бинарными файлами. Имя формулы, версия, целевая операционная система и версия пересборки указываются в имени файла, остальные метаданные содержатся в DSL-коде бутылки формулы, а определение формулы находится внутри бутылки по пути <formula>/<version>/.brew/<formula>.rb.
DSL бутылки (предметно-ориентированный язык)
Бутылки указываются в определениях формул с помощью DSL-кода, заключенного в блок bottle do ... end.
Простой (и типичный) пример:
bottle do sha256 arm64_tahoe: "a9ae578b05c3da46cedc07dd428d94a856aeae7f3ef80a0f405bf89b8cde893a" sha256 tahoe: "5dc376aa20241233b76e2ec2c1d4e862443a0250916b2838a1ff871e8a6dc2c5" sha256 sequoia: "924afbbc16549d8c2b80544fd03104ff8c17a4b1460238e3ed17a1313391a2af" end
Полный пример:
bottle do root_url "https://example.com" rebuild 4 sha256 cellar: "/opt/homebrew/Cellar", arm64_tahoe: "a9ae578b05c3da46cedc07dd428d94a856aeae7f3ef80a0f405bf89b8cde893a" sha256 cellar: :any, tahoe: "5dc376aa20241233b76e2ec2c1d4e862443a0250916b2838a1ff871e8a6dc2c5" sha256 sequoia: "924afbbc16549d8c2b80544fd03104ff8c17a4b1460238e3ed17a1313391a2af" end
Корневой URL (root_url)
Необязательный корневой URL, используемый для определения URL бутылок.
По умолчанию этот параметр не указан, и используется корневой URL бутылок Homebrew. Он может быть полезен для tap-репозиториев, которые хотят предоставлять бутылки для своих формул или использовать нестандартный HOMEBREW_CELLAR.
Cellar (cellar)
Необязательное значение HOMEBREW_CELLAR, в котором были собраны бутылки.
Большинство скомпилированных программ содержит ссылки на место, где они были собраны, поэтому их нельзя просто перенести в любое место на диске. Значение :any или :any_skip_relocation означает, что бутылку можно безопасно установить в любой Cellar, поскольку она не содержит ссылок на Cellar, в котором была собрана. Этот параметр можно не указывать, если бутылка была скомпилирована для каталога HOMEBREW_CELLAR по умолчанию для данной ОС/архитектуры, как это делается для всех бутылок, созданных BrewTestBot.
Версия пересборки (rebuild)
Необязательная версия пересборки бутылки.
Иногда бутылки требуется обновить без увеличения версии или редакции формулы, например, если был применен новый патч. В таких случаях значение rebuild будет равно 1 или больше.
Контрольная сумма (sha256)
Содержит хеш SHA-256 бутылки для указанной ОС/архитектуры.
DSL формулы
В DSL формулы доступен дополнительный метод, связанный с бутылками.
Установка бутылки (pour_bottle?)
Необязательно возвращает логическое значение, указывающее, следует ли использовать бутылку при установке этой формулы.
Например, бутылка может работать некорректно, если связанная формула была скомпилирована с нестандартными параметрами. В таком случае этот метод может проверить это условие и вернуть false.
Полный пример:
pour_bottle? do
reason "The bottle needs to be installed into #{Homebrew::DEFAULT_PREFIX}."
satisfy { HOMEBREW_PREFIX.to_s == Homebrew::DEFAULT_PREFIX }
end Часто используемые условия pour_bottle? можно добавить в качестве предопределенных символов в метод pour_bottle?, чтобы указывать их следующим образом:
pour_bottle? only_if: :default_prefix pour_bottle? only_if: :clt_installed
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/Bottles