[chef] omnibus-chef 11 ruby conflicts


Chronological Thread 
  • From: Andrew Hollingsworth < >
  • To:
  • Subject: [chef] omnibus-chef 11 ruby conflicts
  • Date: Wed, 29 May 2013 19:50:20 -0700

Hi all,

Those of us using RVM or other local ruby installs may have come across a problem when using omnibus-chef 11. The issue is that the wrong gem path can be pulled in from the local ruby and gem path and therefore chef commands fail.

Vagrant gets around this by wrapping the vagrant command in a shell script which sets the correct environment variables for ruby and gem paths before calling the command directly thus ensuring the correct gem paths are set up and embedded ruby is used.

This could easily be done in chef as shown below. My question is where can I submit this as a contributed change?  Comments on the methodology are welcome.

I've made the following changes locally and tested them but cannot find where in the code to put the changes to submit a pull request :

- Install rubygems to /opt/chef/embedded/bin instead of /opt/chef/bin using rubygems as it is done now resulting in :

  /opt/chef/embedded/bin/chef-apply
  /opt/chef/embedded/bin/chef-client
  /opt/chef/embedded/bin/chef-shell
  /opt/chef/embedded/bin/chef-solo
  /opt/chef/embedded/bin/erubis
  /opt/chef/embedded/bin/knife
  /opt/chef/embedded/bin/ohai
  /opt/chef/embedded/bin/restclient
  /opt/chef/embedded/bin/shef

- A wrapper script for chef commands  /opt/chef/embedded/bin/chef-cmd-wrapper as all the rubygem installed commands work the same way :

This wrapper sets the GEM_HOME and GEM_PATH and runs the correct command in /opt/chef/embedded/bin/<cmd> above:

   #!/usr/bin/env bash
   SOURCE="${BASH_SOURCE[0]}"
   DIR=$(dirname $SOURCE)
   EMBEDDED_DIR="${DIR}/../embedded"

   # Export gem paths so that we use the isolated gems.
   export GEM_HOME="${EMBEDDED_DIR}/lib/ruby/gems/1.9.1"
   export GEM_PATH=${GEM_HOME}
   export CHEF_CMD=$(basename $SOURCE)

   $EMBEDDED_DIR/bin/${CHEF_CMD} $@
   exit $?

The GEM_HOME could be set to the latest path gem path as part of the install. Any other variables (GEMRC?) could be set here also.

- Only symbolic links exist in /opt/chef/bin pointing at the wrapper /opt/ohef/embedded/bin/chef-cmd-wrapper. Links are created relative rather than absolute in case the root directory is different :

  /opt/chef/bin/chef-apply -> ../embedded/bin/chef-cmd-wrapper
  /opt/chef/bin/chef-client -> ../embedded/bin/chef-cmd-wrapper
  /opt/chef/bin/chef-shell -> ../embedded/bin/chef-cmd-wrapper
  /opt/chef/bin/chef-solo -> ../embedded/bin/chef-cmd-wrapper
  /opt/chef/bin/erubis -> ../embedded/bin/chef-cmd-wrapper
  /opt/chef/bin/knife -> ../embedded/bin/chef-cmd-wrapper
  /opt/chef/bin/ohai -> ../embedded/bin/chef-cmd-wrapper
  /opt/chef/bin/restclient -> ../embedded/bin/chef-cmd-wrapper
  /opt/chef/bin/shef -> ../embedded/bin/chef-cmd-wrapper

Thoughts and comments welcome. Or maybe the issue is already dealt with....

Cheers,

adh
--
Andrew Hollingsworth

Website : http://www.techopsguru.com
Twitter : twitter.com/techopsguru



Archive powered by MHonArc 2.6.16.

§