傘プロジェクト:シェフ財団
プロジェクト状態:アクティブ
発行応答時間の最大時間:14日
プル要求応答時間最大時間:14日
さまざまなプラットフォームでプロジェクト用のフルスタックインストーラーを簡単に作成できます。
Seth ChisamoreとChristopher Maierのシェフは、Eat The Bowl:Omnibusでフルスタックのインストーラーを構築するタイトルで、Chefconf 2013でOmnibusで入門講演を行いました。
このプロジェクトは、シェフリリースエンジニアリングチームによって管理されています。リリースエンジニアリングチームの貢献、トリアージ、リリースプロセスの詳細については、シェフリリースエンジニアリングOSS管理ガイドに相談してください。
オムニバスは、最小限の前提条件で実行するように設計されています。以下が必要になります。
Omnibusは、ソフトウェアのOmnibusプロジェクトを定義するためのDSLと、その定義からインストーラーアーティファクトを生成するためのコマンドラインツールの両方を提供します。
開始するには、ワークステーションにオムニバスをローカルにインストールします。
$ gem install omnibus
プロジェクトジェネレーター機能を使用して、現在のディレクトリにOmnibusプロジェクトを作成できるようになりました。
$ omnibus new $MY_PROJECT_NAME
これにより、ディレクトリで完全なプロジェクトスケルトンが生成されますomnibus-$MY_PROJECT_NAME
デフォルトでは、 omnibus-$MY_PROJECT_NAME
というディレクトリが作成されます。ただし、リポジトリに保管することは一般的なプラクティスですので、このディレクトリをomnibus
に名前を変更し、プロジェクトソースリポジトリのトップレベルに配置してください。
$ cd omnibus- $MY_PROJECT_NAME
$ bundle install --binstubs
詳細については、生成されたプロジェクトのREADMEファイルをご覧ください。
Omnibusは、現在実行中のプラットフォームに基づいてインストーラーを構築するプラットフォームを決定します。つまり、Debianベースのシステムで.deb
ファイルのみを生成できます。この警告を軽減するために、生成されたプロジェクトには、一連のオムニバスプロジェクトの生成に適したテストキッチンのセットアップが含まれています。
テンプレートプロジェクトは構築されますが、エキサイティングなことは何もしません。そのためには、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
ドキュメントを参照してください。
--config
オプションを任意のコマンドに渡すことにより、Omnibusに別の構成ファイルをロードするように指示できます。
$ bin/omnibus --config /path/to/config.rb
最後に、 --override
フラグを使用して、コマンドラインの特定の構成オプションをオーバーライドできます。これは、構成ファイルの値よりも究極の優先順位を取得します。
$ bin/omnibus --override use_git_caching:false
プロジェクトDSLファイルは、実際のアプリケーションを定義します。これは、そもそもフルスタックインストーラーを作成しているものです。これは、プロジェクトの依存関係を定義する手段を提供します(ソフトウェアDSL定義ファイルで指定されているように)、およびインストーラーパッケージメタデータを設定する方法を提供します。
すべてのプロジェクト定義は、Omnibusリポジトリのconfig/projects
ディレクトリにある必要があります。
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に追加されます。 omnibus.rb
でappend_timestamp
false
に設定するか、コマンドラインで--override append_timestamp:false
使用するか、この動作をオフにすることができます。
詳細については、 Project
ドキュメントをご覧ください。
Omnibus "Software"ファイルは、パッケージ全体を作成することになる個々のソフトウェアコンポーネントを定義します。それらはあなたのアプリケーションの構成要素です。ソフトウェアDSLは、ソフトウェアソースをどこで取得するか、それらを構築する方法、およびそれらが持っている依存関係を定義する方法を提供します。これらの依存関係は、独自のソフトウェアDSLファイルでも定義されているため、依存関係に対応するビルド順序の基礎が形成されます。
すべてのソフトウェア定義は、Omnibus Projectリポジトリのconfig/software
ディレクトリに移動する必要があります。
これが例です:
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 | ビルドの指示 |
詳細については、 Software
ドキュメントを参照してください。
さらに、 build
ブロック内には多くのDSLメソッドが利用可能です。
DSLメソッド | 説明 |
---|---|
command | 単一のシェルコマンドを実行します |
make | 必要に応じてgmakeを使用して(argsの有無にかかわらず)makeを実行します |
patch | ディスクからパッチを適用します |
workers | ビルダーの最大数 |
windows_safe_path | Windowsで砲撃するのに安全であるパスをフォーマットします |
go | 埋め込まれたGOとしてコードを実行します |
ruby | 埋め込まれたルビーとしてコードを実行します |
gem | 埋め込みRubyemsとしてコードを実行します |
bundle | 埋め込みバンドラーとしてコードを実行します |
rake | コードを埋め込まれたレーキジェムとして実行します |
block | ビルド時にRubyブロックを実行します |
erb | 指定されたERBテンプレートをレンダリングします |
mkdir | 指定されたディレクトリを作成します |
touch | 指定された空のファイルを作成します |
delete | 指定されたファイルまたはディレクトリを削除します |
strip | 特定のファイルまたはディレクトリ上のバイナリからのストリップシンボル |
copy | aをbにコピーします |
move | aをbに移動します |
link | aをbにリンクします |
sync | すべてのファイルをAからBにコピーして、組合ファイルを削除します |
詳細については、 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コードであるため、バージョン番号をテストする純粋なRubyでラッピングすることで、条件付きで何でも実行できます。
組織全体のソフトウェアを共有する最も簡単な方法は、BundlerとRubygemsを介してです。ソフトウェアリポジトリの例については、シェフのオムニバスソフトウェアをご覧ください。詳細については、Rubygemsのドキュメントを参照してください。
バンドラーを使用してこれらの宝石を引き下げることをお勧めします(バンドラーはGitHubから直接ソフトウェアを引き出すことも許可しているため):
gem 'my-company-omnibus-software'
gem 'omnibus-software' , github : 'my-company/omnibus-software'
次に、ソフトウェアの名前をOmnibus構成の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
ただし、注意すべきいくつかの注意事項があります。
omnibus.rb
のbase_dir
除外するか、少なくともcache_dir
とbuild_dir
変更したい場合は、 /var/cache/omnibus
および/opt/$MY_PROJECT_NAME
使用しようとします。config/projects/$MY_PROJECT_NAME.rb
の更新します。 config/software
フォルダーにあるソフトウェア.rb
ファイルを参照できます。install_dir
、通常、ビルド時にroot
特権を必要とします。 "/tmp/#{name}"
などの別の場所を変更して、 root
として実行しないようにします。omnibus-software
GEMから生じるデフォルトの構成にある多くのものを参照しています。だから、あなたはそれをGemfile
で除外するか、それをフォークしてから自分のものを参照するために必要なものを使用したい/opt/$project/bin
にbinstubsが必要な場合は、Appbundlerを使用する必要があります。または、それらのbinStubsを作成するにはポストインストールステップが必要です。ruby
のバージョンのオーバーライドを指定した場合、 rubygems
とbundler
オーバーライドして、 ruby
のバージョンのバージョンを一致させる必要があります。もちろん、上記のビルドコマンドは、地元のホストに基づいて構築されます。しかし、 omnibus new
既にセットアップキッチンによるSkeletenセットアップにより、さまざまなOSを簡単に構築できます。詳細については、生成されたOmnibusディレクトリのREADME.md
をご覧ください。
GITベースのソフトウェア定義では、BranchsをDefault_versionとして指定する場合があります。この場合、プロジェクトがオーバーライド(以下を参照)または外部バージョンマニフェストが使用されない限り、使用する正確なGitリビジョンはビルドタイムで決定されます。バージョンを生成するには、 omnibus manifest
コマンドを使用します。
omnibus manifest PROJECT -l warn
これにより、すべてのソフトウェア定義の解決版を含むJSON形式のマニフェストが出力されます。
プラットフォームには、HealthCheckが通過できるように、ホワイトリストに登録する必要があるライブラリがある場合があります。 HealthCheckコードにあるホワイトリストは、サポートされているプラットフォームでのビルドを成功させるために必要な最小限のもので構成されています。
独自のホワイトリストライブラリを追加するには、次のように、Omnibusプロジェクトのソフトウェア定義に正規表現を追加するだけです。
whitelist_file /libpcrecpp.so..+/
通常、それを必要とする特定のプラットフォームに基づいて、ホワイトリストに条件付きを追加することをお勧めします。
警告:インストールするシステムにあることが保証されているホワイトリストにライブラリのみを追加する必要があります。ライブラリが非デフォルトパッケージから来た場合は、代わりにパッケージに組み込む必要があります。
ステータス:実験
omnibus changelog generate
OmnibusプロジェクトのChangelogを生成します。このコマンドは現在想定しています:
これらの仮定は、多くのプロジェクトに最適なものを決定すると、変化します。
プロジェクトの定義は、 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コールに渡すことで、これをオーバーライドできます。
$ bin/omnibus build < project > --log-level info # or "debug"
デフォルトでは、Omnibus Cachesがソフトウェア定義をコンパイルしたため、N+1 Omnibusプロジェクトのビルドははるかに高速です。この機能は、 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.