VagrantでUbuntuサーバ/ローカルにChef導入
これまでにやったこと:
- VirtualBoxにUbuntu12.04インストール、openssh-serverインストール、vagrant用インセキュア・キーの設置、VirtualBox Guest Additionsのインストール、VagrantでBase Box作成
- デフォルトエディタをvim-noxに変更、etckeeper/git/tigのインストール、NTPインストール
- IPアドレス固定、SSHポート変更(のメモ)
- UFWの設定、Apache2インストール、a2ensite/a2dissite
- Apache2でhttps(SSL)の有効化
- Vagrantのサンドボックスモードを利用、rbenvでRubyのインストール
環境:
- Windows 7 64bit
- VirtualBox 4.3.8
- Vagrant 1.5.1
- Ubuntu Server 12.04
今日触れる項目:
- ローカルに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が上がっていたので、それをインストールすることにします。
Windows用Ruby管理ツールに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とかをインストール
VirtualBoxとVagrantと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(VagrantのUbuntu)に反映されます。
Compiling Cookbooks...
Converging 1 resources
Recipe: hello::default
* log[hello world] action write
とCookbookのコンパイル後にlog命令が実行されているのを確認して下さい。
長くなりそうなので、続きは次回にします。