An introduction to Omnibus, Opscode's tool for creating cross-platform full-stack installers.
Video recording of the presentation available here: http://www.youtube.com/watch?v=q8iJAntXCNY
EAT THE WHOLE BOWLBuilding a Full-Stack Installer with OmnibusSeth ChisamoreChristopher MaierOpscodeEngineering
View Slide
THEFULL STACK
TWOMENHAD ADREAM
I was playing 80's powerrock ballads. Probablywrote much of it while Iwas listening to Warrant's“Heaven”.
I called it “Fatty”,because it was making“fat” binary packages.I didn't really realize Iwas being offensive untillater.
How about “Omnibus”?
*hugs*
HOWOPSCODEUSESOMNIBUS
A LOOK INSIDE
PROJECT DSL
name "chef-server"maintainer "Opscode, Inc."homepage "http://www.opscode.com"replaces "chef-server"install_path "/opt/chef-server"build_version Omnibus::BuildVersion.new.semverbuild_iteration 1dependency "postgresql"dependency "rabbitmq"dependency "chef-solr"dependency "erchef"# more...exclude "\.git*"exclude "bundler\/git"
SOFTWARE DSL
name "erchef"version "1.2.6"dependency "erlang"dependency "rsync"dependency "curl"source :git => "git://github.com/opscode/erchef"relative_path "erchef"env = {"PATH" => "#{install_dir}/embedded/bin:#{ENV["PATH"]}","LDFLAGS" => "-L#{install_dir}/embedded/lib-I#{install_dir}/embedded/include",# more...}continued...
build docommand "make distclean", :env => envcommand "make rel", :env => envcommand "mkdir -p#{install_dir}/embedded/service/erchef"command "#{install_dir}/embedded/bin/rsync -a --delete--exclude=.git/*** --exclude=.gitignore./rel/erchef/#{install_dir}/embedded/service/erchef/"command "rm -rf#{install_dir}/embedded/service/erchef/log"end
COMMANDLINEINTERFACE
PROJECT
$ omnibus project foobarcreate foobar/config/software/README.mdcreate foobar/Gemfilecreate foobar/.gitignorecreate foobar/config/projects/foobar.rbcreate foobar/README.mdcreate foobar/package-scripts/foobar/makeselfinstcreate foobar/package-scripts/foobar/postinstcreate foobar/package-scripts/foobar/postrm...
BUILDPROJECT
$ omnibus build project foobarBuilding foobarmkdir -p /var/cache/omnibus/build/opt_foobarmkdir -p /var/cache/omnibus/src/preparationtouch /var/cache/omnibus/build/opt_foobar/preparation.fetch[builder:preparation] building preparation[builder:preparation] preparation build succeeded,0.000755stouch /var/cache/omnibus/build/opt_foobar/preparation.manifmkdir -p /var/cache/omnibus/src/version-manifesttouch /var/cache/omnibus/build/opt_foobar/version-manifest.[builder:version-manifest] building version-manifest[builder:version-manifest] version-manifest build succeeded...
BUILDSOFTWARE
$ omnibus build software foobar version-manifestBuilding version-manifest for foobar project[builder:preparation] building preparation[builder:preparation] preparation build succeeded,0.000383stouch /var/cache/omnibus/build/opt_foobar/preparation.manifest[builder:version-manifest] building version-manifest[builder:version-manifest] version-manifest buildsucceeded, 0.000229stouch /var/cache/omnibus/build/opt_foobar/version-manifest.manifest...
CLEAN
$ omnibus clean foobar --purgeremove /var/cache/omnibus/src/preparationremove /var/cache/omnibus/src/version-manifestremove /var/cache/omnibus/build/opt_foobarremove /var/cache/omnibus/build/opt_foobar/preparation.fetremove /var/cache/omnibus/build/opt_foobar/preparation.manremove /var/cache/omnibus/build/opt_foobar/version-manifesremove /var/cache/omnibus/build/opt_foobar/version-manifesremove /var/cache/omnibus/pkg/foobar-0.0.0+20130405022120_remove /opt/foobar
ROADMAP
TESTING
DEPENDENCYMANAGEMENTname "opscode-push-jobs-server"maintainer "Opscode, Inc."homepage "http://www.opscode.com"replaces "opscode-push-jobs-server"install_path "/opt/opscode-push-jobs-server"build_version Omnibus::BuildVersion.new.semverbuild_iteration 1runtime_dependency "private-chef"# creates required build directoriesdependency "preparation"...
(REAL) RE-USE• * Software definitions become specialized cookbooks• * These cookbooks live in standalone Git repositoriessource 'https://rubygems.org'gem 'omnibus', '~> 1.0.0'gem 'omnibus-software', :git => 'git://github.com/opscode/omnibus-software.git'Current:Future:
RELEASE COMMAND• Based on lessons learned from Omnitruck (think install.sh)• Will perform checksumming (md5, sha256)• Initially will push packages to an S3 bucket• Would like to support “real” repos using something like PRM
THANKS_cwm_christophermaier[email protected]schisamoschisamo[email protected]
Photo CreditsNoodle Bowl http://www.insockmonkeyslippers.com/swiss-chard-and-noodle-soup-with-poached-eggSuitcases http://www.flickr.com/photos/rubyblossom/7413242342/Stones http://www.flickr.com/photos/erix/4645279944/Worried Man http://www.flickr.com/photos/pedrosimoes7/145220445/Skateboard http://www.flickr.com/photos/14degrees/2714047400/Gears http://www.flickr.com/photos/wwarby/4782904694/Blueprints http://www.flickr.com/photos/pulpolux/838363289/Tool Shed Interior http://www.flickr.com/photos/matthigh/4050429719/Compass Rose http://www.flickr.com/photos/marfis75/5374308475/Measuring Tape http://www.flickr.com/photos/hippie/2466583497/Factory Pipes http://www.flickr.com/photos/cycloctopus/8181800285/Glass Bottles http://www.flickr.com/photos/afropicmusing/8089260503/Freddie Mercury Statue http://www.flickr.com/photos/nick_c/112111560/