tech::hexagram

personal note for technical issue.

Chefで構築していた仮想開発環境をfedora 20からCentOS6.5に乗り換えた

少し前からChefを使って仮想開発環境を作れるgenerator(コードネーム:Almagest)を作っていた。

当初はOSにfedora 20を使っていたが、同僚からvagrantのboxを検索できるサイトを教えていただいた。

fedoraの新しいバージョンについてもイメージが乗っていたものの、VagrantのGuest Additionsのバージョンアップが上手く動かない問題があった。VagrantのboxのGuest Additionsのアップデート方法

このため、fedora 20 -> fedora 21 -> CentOS6.5とイメージを変更した。

fedora 20 -> fedora 21に乗り換えた際のハマりどころ

新しいboxに以下のコマンドが存在しなかった。

  • tmux, readline-devel, tar

tmux に関してはcookbookを追加して解決。

boxのurlを変更した後に bundle exec knife solo bootstrap almagest を実行すると、anyenv経由でrubyのインストールに何度か失敗した。

rubyのインストールの際に tar や、readline-devel が必要らしく、その途中でコケていた模様。

対応法としては、anyenvのcookbookに tar, readline-devel に依存する旨を明記する。

あるcookbookが別のcookbookに依存する場合は、以下の3点を行えば良いらしい。

  • (1) : Berksfileに依存するcookbookを記載 or 必要なcookbookを site-cookbooks 以下に配置
    • 今回は前者だったが、supermarketに乗ってないcookbookに依存する場合はおそらく配置すれば大丈夫
+cookbook 'tar',  '~> 0.7.0'
+cookbook 'readline', '~> 0.0.5'
  • (2) : metadata.rb に依存関係を明記
+depends          'tar'
+depends          'readline'
  • (3) : recipes/default.rb に依存関係を明記
+include_recipe 'tar::default'
+include_recipe 'readline::default'

自分の作ったリポジトリ見ていると、 Berksfile に定義されているのに site-cookbooks にそのファイル突っ込んでいたりと、差分的に要らないものがいくつかありそうなので後で整理したい。

fedora 21 -> CentOS 6.5に乗り換えた際のハマりどころ
  • knife solo bootstrapでchefを適用した後vagrant reloadするとIPのアサインに失敗する
    • 自前のdotfilesのcookbookが原因だった模様。.bashrcをまるっと置き換えてしまうと良くないようなので、ここは改善する予定。