Spec-Zone.ru › Homebrew

Бинарные пакеты (Bottles)

Бинарные пакеты создаются путём установки формулы с помощью 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 создаются ботом Brew Test Bot при отправке запроса на изменение. Если формула успешно собирается на каждой поддерживаемой платформе и сопровождающий одобрил изменения, Brew Test Bot обновляет блок bottle do и загружает каждый пакет на GitHub Packages.

По умолчанию пакеты будут создаваться для самой старой поддерживаемой процессорной архитектуры вашей операционной системы/архитектуры (Core 2 для 64-битных x86 операционных систем). Это гарантирует совместимость пакетов со всеми компьютерами, для которых они предназначены. Если вы действительно хотите, чтобы ваши пакеты были оптимизированы для чего-то другого, вы можете передать параметр --bottle-arch= для компиляции под другой архитектурой; например, brew install foo --build-bottle --bottle-arch=penryn. Просто помните, что если вы компилируете для более новой архитектуры, некоторые ваши пользователи могут получить бинарники, которые они не смогут запустить, и это будет печально!

Формат

Пакеты представляют собой простые gzipped tarball-архивы с собранными бинарными файлами. Имя формулы, версия, целевая операционная система и версия пересобрания хранятся в имени файла, любая другая метаданные содержатся в DSL пакета формулы, а определение формулы расположено в пакете в <formula>/<version>/.brew/<formula>.rb.

DSL пакета (DSL)

Пакеты задаются в определениях формул с помощью DSL, содержащегося в блоке bottle do ... end.

Простой (и типичный) пример:

bottle do
  sha256 arm64_big_sur: "a9ae578b05c3da46cedc07dd428d94a856aeae7f3ef80a0f405bf89b8cde893a"
  sha256 big_sur:       "5dc376aa20241233b76e2ec2c1d4e862443a0250916b2838a1ff871e8a6dc2c5"
  sha256 catalina:      "924afbbc16549d8c2b80544fd03104ff8c17a4b1460238e3ed17a1313391a2af"
  sha256 mojave:        "678d338adc7d6e8c352800fe03fc56660c796bd6da23eda2b1411fed18bd0d8d"
end

Полный пример:

bottle do
  root_url "https://example.com"
  rebuild 4
  sha256 cellar: "/opt/homebrew/Cellar", arm64_big_sur: "a9ae578b05c3da46cedc07dd428d94a856aeae7f3ef80a0f405bf89b8cde893a"
  sha256 cellar: :any,                   big_sur:       "5dc376aa20241233b76e2ec2c1d4e862443a0250916b2838a1ff871e8a6dc2c5"
  sha256                                 catalina:      "924afbbc16549d8c2b80544fd03104ff8c17a4b1460238e3ed17a1313391a2af"
  sha256                                 mojave:        "678d338adc7d6e8c352800fe03fc56660c796bd6da23eda2b1411fed18bd0d8d"
end

Корневой URL (root_url)

Необязательно содержит корневой URL, используемый для определения URL-адресов пакетов.

По умолчанию он опущен, и используется корневой URL-адрес пакетов по умолчанию Homebrew. Это может быть полезно для репозиториев, которые хотят предоставлять пакеты для своих формул или поддерживать нестандартный HOMEBREW_CELLAR.

Cellar (cellar)

Необязательно содержит значение HOMEBREW_CELLAR, в котором были собраны пакеты.

Большинство скомпилированных программ содержат ссылки на место их компиляции, предотвращая простое перемещение в другое место на диске. Значения :any или :any_skip_relocation означают, что пакет можно безопасно установить в любой Cellar, поскольку он не содержал ссылок на Cellar, в котором он был первоначально собран. Это можно опустить, если пакет был скомпилирован для значения HOMEBREW_CELLAR по умолчанию для данной операционной системы/архитектуры, как это делается для всех пакетов, собранных Brew Test Bot.

Версия пересобрания (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

Spec-Zone.ru

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