Зонтик проект : фонд шеф -повара
Состояние проекта : активный
Выпускает время ответа максимум : 14 дней
Время отклика запроса максимум : 14 дней: 14 дней
Легко создавать установщики с полным стеком для вашего проекта на различных платформах.
Сет Чисамор и Кристофер Майер из шеф-повара выступили с вступительным выступлением на Omnibus на Chefconf 2013 под названием «С есть всю миску: строительство установщика с полным стеком с Omnibus :
Этот проект управляется командой инженерии шеф -повара. Для получения дополнительной информации о вкладе команды инженерных релиз, сортировки и процесса выпуска, пожалуйста, обратитесь к Руководству по управлению ESS Engineering Engineering Chef.
Omnibus предназначен для запуска с минимальным набором предпосылок. Вам понадобится следующее:
Omnibus предоставляет как DSL для определения Omnibus Projects для вашего программного обеспечения, так и инструмент командной строки для генерации артефактов установщика из этого определения.
Чтобы начать, установите Omnibus локально на рабочей станции.
$ gem install omnibus
Теперь вы можете создать Omnibus Project в вашем текущем каталоге, используя функцию генератора проекта.
$ omnibus new $MY_PROJECT_NAME
Это генерирует полный скелет проекта в каталоге omnibus-$MY_PROJECT_NAME
По умолчанию это сделает каталог под названием omnibus-$MY_PROJECT_NAME
предполагая, что вы сохраняете свой конфигуратор Omnibus отдельно от репо. Тем не менее, сохранение его в вашем репо является обычной практикой, поэтому ощущайте переименование этого каталога в omnibus
и поместите его в верхний уровень вашего проекта Source Repo.
$ cd omnibus- $MY_PROJECT_NAME
$ bundle install --binstubs
Более подробную информацию можно найти в файле readme сгенерированного проекта.
Omnibus определяет платформу для создания установщика на основе платформы, на которой он в настоящее время работает . То есть вы можете генерировать файл .deb
только в системе на основе Debian. Чтобы облегчить эту предостережение, сгенерированный проект включает в себя испытательную кухонную установку, подходящую для создания серии Omnibus Projects.
Хотя проект шаблона будет построен, он не сделает ничего захватывающего. Для этого вам необходимо использовать Omnibus DSL для определения специфики вашего приложения.
Если он присутствует, Omnibus будет использовать файл конфигурации верхнего уровня с именем omnibus.rb
в корне вашего репозитория. Этот файл загружается во время выполнения и включает в себя ряд конфигурационных каналов. Вот пример:
# Build locally (instead of /var)
# -------------------------------
base_dir './local'
# Disable git caching
# ------------------------------
use_git_caching false
# Enable S3 asset caching
# ------------------------------
use_s3_caching true
s3_bucket ENV [ 'S3_BUCKET' ]
# There are three ways to authenticate to the S3 bucket
# 1. set `s3_access_key` and `s3_secret_key`
s3_access_key ENV [ 'S3_ACCESS_KEY' ]
s3_secret_key ENV [ 'S3_SECRET_KEY' ]
# 2. set `s3_profile` to use an AWS profile in the Shared Credentials files
#s3_profile ENV['S3_PROFILE']
# 3. set `s3_iam_role_arn` to use an AWS IAM role
#s3_iam_role_arn ENV['S3_IAM_ROLE_ARN']
Для получения дополнительной информации см. Документацию Config
.
Вы можете сказать Omnibus загрузить другой файл конфигурации, передавая опцию --config
в любую команду:
$ bin/omnibus --config /path/to/config.rb
Наконец, вы можете переопределить определенную опцию конфигурации в командной строке, используя флаг --override
. Это требует окончательного приоритета по сравнению с любыми значениями файлов конфигурации:
$ bin/omnibus --override use_git_caching:false
Файл DSL Project определяет ваше фактическое приложение; Это то, что вы создаете в первую очередь установщик с полным стеком. Он предоставляет средства для определения зависимостей проекта (опять же, как указано в файлах программного определения DSL), а также способы установления метаданных пакетов установщика.
Все определения проекта должны быть в каталоге config/projects
вашего репозитория Omnibus.
name "chef-full"
maintainer "YOUR NAME"
homepage "http://yoursite.com"
install_dir "/opt/chef"
build_version "0.10.8"
build_iteration 4
dependency "chef"
Некоторые доступные методы DSL включают:
Метод DSL | Описание |
---|---|
name | Название проекта |
install_dir | Желаемое расположение установки пакета |
build_version | Версия пакета |
build_iteration | Номер итерации пакета |
dependency | Основанный программный компонент Omnibus для включения в этот пакет |
package | Вызвать DSL, специфичный для пакета |
compress | Вызвать DSL, специфичный для компрессора |
По умолчанию временная метка добавляется к Build_version. Вы можете отключить это поведение, установив append_timestamp
на false
в omnibus.rb
или используя --override append_timestamp:false
в командной строке.
Для получения дополнительной информации см. Документацию Project
.
Файлы «Программное обеспечение» Omnibus определяют отдельные компоненты программного обеспечения, которые входят в создание вашего общего пакета. Это строительные блоки вашего приложения. Программное обеспечение DSL предоставляет способ определить, где извлечь источники программного обеспечения, как их построить и какие зависимости у них есть. Эти зависимости также определяются в их собственных программных DSL-файлах, что формирует основу для заказа в сборке зависимости.
Все определения программного обеспечения должны перейти в каталоге config/software
вашего репозитория проекта Omnibus.
Вот пример:
name "ruby"
default_version "1.9.2-p290"
source url : "http://ftp.ruby-lang.org/pub/ruby/1.9/ruby- #{ version } .tar.gz" ,
md5 : "604da71839a6ae02b5b5b5e1b792d5eb"
dependency "zlib"
dependency "ncurses"
dependency "openssl"
relative_path "ruby- #{ version } "
build do
command "./configure"
command "make"
command "make install"
end
Некоторые из доступных методов DSL включают:
Метод DSL | Описание |
---|---|
name | Название программного компонента (это должно быть на первом месте) |
default_version | Версия программного компонента |
source | Направления до расположения источника |
dependency | Omnibus программный компонент, от которого зависит это программное обеспечение |
relative_path | Относительный путь извлеченного тарбола |
build | Инструкции по сборке |
Для получения дополнительных методов DSL, пожалуйста, проконсультируйтесь с документацией Software
.
Кроме того, в блоке build
есть ряд методов DSL:
Метод DSL | Описание |
---|---|
command | Выполнить одну команду оболочки |
make | Запустить Make (с или без ARG), используя Gmake, когда это необходимо |
patch | Применить патч с диска |
workers | Максимальное количество строителей |
windows_safe_path | Форматируйте путь, чтобы быть безопасным для выхода на Windows |
go | Выполнить код как встроенный |
ruby | Выполнить код как встроенный рубин |
gem | Выполнить код как встроенные рубигемы |
bundle | Выполнить код как встроенный пакет |
rake | Выполнить код как встроенный драгоценный камень |
block | Выполнить Ruby Block во время сборки |
erb | Представлять заданный шаблон ERB |
mkdir | Создать заданный каталог |
touch | Создать данный пустой файл |
delete | Удалить заданный файл или каталог |
strip | Символы полосы из двоичных файлов в данном файле или каталоге |
copy | Копия А до б |
move | Переместить А в б |
link | Ссылка A на B |
sync | Скопируйте все файлы из A до B, удаляя любые файлы Union |
Для получения дополнительных методов DSL, пожалуйста, проконсультируйтесь с документацией Builder
.
Вы можете поддерживать создание нескольких версий одного и того же программного обеспечения в одном файле определения программного обеспечения, используя метод version
и предоставление блока:
name "ruby"
default_version "1.9.2-p290"
version "1.9.2-p290" do
source url : "http://ftp.ruby-lang.org/pub/ruby/1.9/ruby- #{ version } .tar.gz" ,
md5 : "604da71839a6ae02b5b5b5e1b792d5eb"
end
version "2.1.1" do
source url : "http://ftp.ruby-lang.org/pub/ruby/2.1/ruby- #{ version } .tar.gz" ,
md5 : "e57fdbb8ed56e70c43f39c79da1654b2"
end
Поскольку определения программного обеспечения являются просто Ruby Code, вы можете условно выполнить что угодно, обернув его чистым рубином, который проверяет номер версии.
Самый простой способ поделиться программным обеспечением для всей организации-через Bundler и Rubygems. На примере хранилища программного обеспечения посмотрите на Omnibus-Software's Chef's Omnibus. Для получения дополнительной информации см. Документацию Rubygems.
Рекомендуется использовать Bundler для вытягивания этих драгоценных камней (поскольку Bundler также позволяет вытащить программное обеспечение непосредственно из GitHub):
gem 'my-company-omnibus-software'
gem 'omnibus-software' , github : 'my-company/omnibus-software'
Затем добавьте имя программного обеспечения в список software_gems
.
software_gems %w( my-company-omnibus-software omnibus-software )
Вы также можете указать местные пути на диске (но будьте осторожны, это может затруднить обмен проектом между командами):
local_software_dirs %w( /path/to/software /other/path/to/software )
Для всех этих путей, заказа имеет значение , поэтому можно зависеть от локальной версии программного обеспечения, сохраняя при этом удаленное программное репо. Учитывая приведенный выше пример, Omnibus будет искать определение программного обеспечения с именем foo
в этом порядке:
$PWD/config/software/foo.rb
/path/to/software/config/software/foo.rb
/other/path/to/software/config/software/foo.rb
/Users/sethvargo/.gems/.../my-company-omnibus-software/config/software/foo.rb
/Users/sethvargo/.gems/.../omnibus-software/config/software/foo.rb
Первый экземпляр foo.rb
, который встречается, будет использоваться. Обратите внимание, что локальные (поставленные) определения Softare имеют приоритет!
После того, как вы создали свой пакет и определения программного обеспечения, вы можете построить:
./bin/omnibus build $MY_PACKAGE_NAME
Однако есть несколько предостережений, чтобы знать:
base_dir
в omnibus.rb
, или, по крайней мере, изменить cache_dir
и build_dir
как иначе он попытается использовать /var/cache/omnibus
и /opt/$MY_PROJECT_NAME
, требуя root.config/projects/$MY_PROJECT_NAME.rb
. Вы можете направить файлы программного обеспечения .rb
, присутствующие в папке config/software
.install_dir
указанный в файле проекта, обычно требует привилегии root
во время сборки. Измените его в другом месте, например, "/tmp/#{name}"
чтобы избежать запуска как root
.omnibus-software
. Таким образом, вы хотите использовать те, которые вам понадобятся, чтобы либо понаправляться его в Gemfile
, либо разветвлять, а затем ссылаться на свой собственный/opt/$project/bin
, вам нужно будет либо использовать Appbundler, либо вам потребуется шаг установки поста для создания этих Binstubs.ruby
, вам также необходимо будет переопределить rubygems
и bundler
, чтобы соответствовать версиям в этой версии ruby
, или вы получите неудачи вокруг несоответствий версий Bundler. Команда сборки выше, конечно, будет построена на вашем локальном хосте, поэтому она специфична для ОС и базовой системы, в которой вы находитесь. Но настройка Skeleten от omnibus new
уже настройка Kitchen для вас, так что ее легко построить для различных OSES, см. README.md
в вашем сгенерированном каталоге Omnibus для деталей.
Определения программного обеспечения на основе GIT могут указывать филиалы как их default_version. В этом случае точный пересмотр GIT для использования будет определяться во время сборки, если не будет использован переопределение проекта (см. Ниже) или манифест внешней версии. Чтобы сгенерировать манифест версии Используйте команду omnibus manifest
:
omnibus manifest PROJECT -l warn
Это выведет манифест в формате JSON, содержащий разрешенную версию каждого определения программного обеспечения.
Иногда на платформе есть библиотеки, которые необходимо пройти в белом списке, чтобы HealthCheck могла пройти. Белый список, обнаруженный в коде HealthCheck, содержит минимальный, необходимый для успешных сборов на поддерживаемых платформах.
Чтобы добавить свою собственную библиотеку в белом списке, просто добавьте форму для определения программного обеспечения в свой проект Omnibus следующим образом:
whitelist_file /libpcrecpp.so..+/
Обычно хорошая идея - добавить условное в белое списке на основе конкретной платформы, которая требует этого.
ПРЕДУПРЕЖДЕНИЕ: Вы должны добавить только библиотеки в белый список, которые гарантированно будут в системе, в которую вы устанавливаете; Если библиотека поступает из пакета, не являющегося деко, вы должны вместо этого построить ее в пакет.
Статус: экспериментальный
omnibus changelog generate
будет генерировать изменение инженера для Omnibus Project. Эта команда в настоящее время предполагает:
Эти предположения изменятся , поскольку мы определяем, что лучше всего подходит для ряда наших проектов.
Определения проекта могут переопределить конкретные программные зависимости, передавая override
, чтобы использовать правильную версию:
name "chef-full"
# <snip>
# This will override the default version of "chef"
override :chef , version : "2.1.1"
dependency "chef"
Переопределенная версия должна быть определена в соответствующем программном обеспечении!
По умолчанию Omnibus войдет в систему на уровне warn
. Вы можете переопределить это, передавая флаг --log-level
в свой Omnibus Call:
$ bin/omnibus build < project > --log-level info # or "debug"
По умолчанию кэши Omnibus составляли определения программного обеспечения, поэтому сборки проекта n+1 гораздо быстрее. Эта функциональность может быть отключена, добавив следующее в omnibus.rb
:
use_git_caching false
Для получения информации об участии в этом проекте см. Https://github.com/chef/chef/blob/master/contributing.md
Copyright 2012-2016 Chef Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.