Chef SoloのRPMを作成してみた

Chef Soloをインストールするには、ビルドに必要なライブラリのインストールが必要だったり、gemでインストールが必要だったりする。インストール時間の短縮と、クローズドなネットワーク環境でもインストールできるようにrpmを作成してみた。

rpmを作成する

Chefはrubyでできているので、Gemでパッケージされている。fpmを使えばどうやらgemからrpmを作成できるらしい。gem以外にも対応しているし、rpm以外にdebなんかも出力できるようだ!
今回はこのfpmを使ってやってみた*1。作成環境は、CentOS 6.2 x86_64、前提としてChef Soloがインストールできるよう、rubyrubygems、コンパイルに必要なライブラリが入っていること。rubyrubygemsはyumでOS標準のものをインストールしていること。

  • まずはfpmをインストール。fpm自体もRubyでできており、gemで簡単にインストールできる。
gem install fpm

ここからはConverting rubygems · jordansissel/fpm Wiki · GitHubを参考にgem -> rpm化を行う。

  • Chef Soloと依存gemを/tmp/gems以下に集める。
mkdir /tmp/gems
gem install --no-ri --no-rdoc --install-dir /tmp/gems chef
  • 集めたgemファイルをfpmコマンドでrpm化する。以下のコマンドで一気に実行可能です。
find /tmp/gems/cache -name '*.gem' | xargs -rn1 fpm -s gem -t rpm

これで依存関係のあるgemも含めてまとめてrpm化することができた。

早速入れてみる

まっさらなCentOS 6.2 x86_64に早速インストールしてみる。

  • rubyrubygemsは必要なので、これを先にインストールする。オフライン環境ならDVDからインストールする。
yum ruby rubygems
  • 先ほど作成したrpmをまとめてインストール。「--nodeps」オプションをつけているのは、何故かrubygem-chefのインストールで依存関係エラーが出るため*2
rpm -ivh --nodeps *.rpm
  • chef-soloコマンドを実行して動作することを確認。
chef-solo

*1:これとは別に、[https://github.com/rubiojr/chef-rpms-builder:title=chef-rpms-build]なんてものがぐぐると見つかったけどこちらは使い方が分からず...

*2:とりあえず無視してインストールして使用しているが今のところ無事に動いている