Skip to content

Chef cookbook to install chruby and build rubies from source with TCMalloc and LibYAML options on Ubuntu.

License

Notifications You must be signed in to change notification settings

madwork/chef-chruby-build

Repository files navigation

Chruby Build Chef Cookbook

Build Status Cookbook Version

Chef cookbook to install chruby and build rubies from source with Google Perftools / TCMalloc : Thread-Caching Malloc and LibYAML options.

Requirements

supports

  • ubuntu >= 12.04

depends

version

  • chef >= 13.4

Installation

Use the knife command:

$ knife supermarket install chruby-build

Edit Berksfile

source "https://supermarket.chef.io"

cookbook 'chruby-build', '~> 1.0.2'

Install the cookbooks you specified in the Berksfile and their dependencies:

$ berks install

Attributes

See attributes/default.rb

Usage

Rubies attributes

  • id - required id and must be split by a dash (eg. ruby-2.3.4)
  • url - required ruby source
  • checksum - optional sha256 package checksum
  • gems - optional gems to install
  • environment - optional compilation environment variables

With node attributes

{
  "ark": {
    "prefix_root": "/usr/local/src"
  },
  "chruby_build": {
    "rubies": [
      {
        "id": "ruby-2.5.3",
        "url": "https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.3.tar.gz",
        "checksum": "9828d03852c37c20fa333a0264f2490f07338576734d910ee3fd538c9520846c",
        "gems": ["bundler 1.17.1"],
        "environment": {
          "ARCHFLAGS": "-arch x86_64",
          "CFLAGS": "-g -O2",
          "CPPFLAGS": "-I/usr/include -I/usr/local/include"
        }
      }
    ]
  }
}

Data bag name must be rubies

$ knife data bag create rubies ruby-2.5.3

Edit data bag ruby-2.5.3.json

{
  "id": "ruby-2.5.3",
  "url": "https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.3.tar.gz",
  "checksum": "9828d03852c37c20fa333a0264f2490f07338576734d910ee3fd538c9520846c",
  "gems": ["bundler 1.17.1"],
  "environment": {
    "ARCHFLAGS": "-arch x86_64",
    "CFLAGS": "-g -O2",
    "CPPFLAGS": "-I/usr/include -I/usr/local/include"
  }
}

If you are using knife solo as provisioner, try knife-solo_data_bag.

Data bags have higher precedence.

Recipes

chruby-build::default

This recipe only installs chruby.

Just include chruby-build::default in your node's run_list:

{
  "name":"my_node",
  "run_list": [
    "recipe[chruby-build::default]"
  ]
}

chruby-build::rubies

This recipe installs chruby and compile rubies from source.

Just include chruby-build::rubies in your node's run_list:

{
  "name":"my_node",
  "run_list": [
    "recipe[chruby-build::rubies]"
  ]
}

Development

Dependencies

Installation

Ensure the gem dependencies are installed:

$ bundle install
$ bundle exec berks install

Running unit tests:

$ bundle exec rspec

Running integration tests:

$ bundle exec kitchen test rubies-data-bags-ubuntu-1404

Different test suites are available:

$ bundle exec kitchen list
$ bundle exec kitchen setup default-ubuntu-1404
$ bundle exec kitchen verify default-ubuntu-1404
$ bundle exec kitchen destroy default-ubuntu-1404

Contributing

  1. Fork the repository on Github
  2. Create a named feature branch (like add_component_x)
  3. Write your change
  4. Write tests for your change (if applicable)
  5. Run the tests, ensuring they all pass
  6. Submit a Pull Request using Github

License

Written by Vincent Durand.

Released under the terms of the MIT License. For further information, please see the file LICENSE.txt.