orangeProse別館

orangeProse(本ブログ)の補助

VagrantでUbuntuサーバ/ローカルにChef導入

VagrantUbuntuサーバ構築練習シリーズ。

これまでにやったこと:

環境:

今日触れる項目:

  • ローカルにChefをインストールしてVagrantに反映させる

前回、サンドボックスモードでrbenvとRubyをインストールしましたが、必要なパッケージが多くて大変でした。

せっかくRubyをインストールできたので、もったいなくてコミットしましたが、rbenv + ruby-buildでRubyをインストールする前段階までをChefで自動化しておき、効率的なRubyビルドを検討したくなりました(というストーリーで今回はいきましょう)。

ぼくのローカルマシンはWindows 7 64bitなので、他の環境の方は適宜読み替えて下さい。

ChefはたいていWorkstation - Chef Server - Nodesという概念図で説明されますが、ここではWorkstaion(ぼくの場合はWindows)とひとつのNode(ここではVagrantによるVM)という単純な構成です。

WorkstationのRubyのアップデート

WorkstationにRubyがインストールされていない場合はここでインストールしておきましょう。

ぼくのローカルのRubyは2.0.0-p353でしたが、RubyInstallerに2.0.0-p451が上がっていたので、それをインストールすることにします。

WindowsRuby管理ツールにpikがありますが、使える処理系が古く、参照するRubyForgeは今年(2014年)の5月に閉鎖するようなので、RubyInstallerがよいかと思います(インストールはRubyInstallerで行って、管理はpikで行うのがいいかも)。

Macの方はrbenvがよいかと思います。

インストールが終わったら

>ruby -v

でバージョン確認。

DevKitもついでに新しいものに変えておきます(新しいのがあったら)。C:\devkit200x64\bin;C:\devkit200x64\mingw\bin;にPATHが通っているとしたら、古い方を削除して、同じディレクトリに展開します。

DevKitの再インストールがなくても、次のコマンドは打っておきます(たぶん):

>cd C:\devkit200x64
>ruby dk.rb init

config.ymlに

- C:/Ruby200p451x64

とあれば(新しくインストールされたRubyのパスが表記されていれば)OKですが、書き込まれていなければ自分で書きます。

>ruby dk.rb install

新しいRubyにdevkit.rbがインストールされたという表示が出ればOKです。

>gem -v
>gem update --system

現在、

  • Ruby 2.0.0-p451
  • gem 2.2.2

という環境です。

cwRsyncをインストール(Windowsのみ)

WindowsだとRsyncがないので公式からcwRsyncをダウンロードします(というかitefixへのリンクになっている)。

Free EditionのほうをGet、Download。

Zipを解凍するとあれこれ入っているので、パスが通っているディレクトリ(ぼくの場合はC:\Users\hidex7777\bin)にぜんぶぶち込むか、その下にrsyncディレクトリをつくってそこにパスを通すかします。

Chefとかをインストール

VirtualBoxVagrantとGitがインストールされているのが前提です。

インストーラを使う方(Windows)やMacの方はChefのTutorialのQuickStartのWorkstation Setupあたりの指示に従って下さい(Windowsの場合、GitBashでしかChefが使えなくなります。つまりコマンドプロンプトでぜんぶやりたい場合は下記のようにgemを使いましょう)。

Chefとknife-soloをインストール:

>gem install chef
>gem install knife-solo 

Windowsの場合win32-processとwindows-prをインストール:

>gem install win32-process
>gem install windows-pr

初期設定:

>knife configure

いろいろ聞かれますが、ぜんぶEnterでOK。

Vagrant(Node)の準備

ここでは、このシリーズの冒頭で作ったBaseBoxを使うことにします(precise64jpというBox名です)。

いまホームディレクトリにいるとして(Windowsでいう%USERPROFILE%):

>mkdir mychef1
>cd mychef1
>mkdir vagrant
>cd vagrant
>vagrant init precise64jp

Vagrantfileを修正します:

config.vm.network "private_network", ip: "192.168.33.20"

upして、ホスト名を"mychef1"に変えてみます:

>vagrant up
>vagrant status
>vagrant ssh-config --host mychef1
>vagrant ssh-config --host mychef1 >> %USERPROFILE%\.ssh\config

Macの場合は~/.ssh/configに追記して下さい。

これでホスト名でログインできるようになりました。

>ssh mychef1
>exit

Chefのリポジトリをつくる(Workstation)

いまmychef1/ディレクトリにいるとして:

>knife solo init chef-repo

さまざまなディレクトリがつくられているのを確認して下さい。

自作のレシピ・クックブックはsite-cookbooksにつくっていきます。

NodeをChefに対応させる

>cd chef-repo
>knife solo prepare mychef1

ちょっと時間がかかって、nodes/mychef1.jsonというファイルができました。これをいちおうテキストエディタなどで開いておきましょう。

このコマンドでNode(Vagrant)がChefに対応しました。

サンプルのcookbookをつくってみる

>knife cookbook create hello -o site-cookbooks

サンプルにhelloというレシピをつくりました。~/mychef/chef-repo/site-cookbooks/hello/recipes/default.rbというファイルができているのを確認して下さい。

このファイルをテキストエディタで開いて:

log "hello world"

と記入します。先に開いておいたmychef1.jsonに:

{
     "run_list"[
          "recipe[hello]"
          ]
}

と記入します。

CookbookをNodeに反映させる

いまchef-repoディレクトリにいるとして:

>knife solo cook mychef1

と打つとゲストOS(VagrantUbuntu)に反映されます。

Compiling Cookbooks...
Converging 1 resources
Recipe: hello::default
  * log[hello world] action write

とCookbookのコンパイル後にlog命令が実行されているのを確認して下さい。


長くなりそうなので、続きは次回にします。