なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

Chef + Vagrant を使ってみる

目的

・ 環境構築自動化
・ お勉強
・ この記事はメモ

目標

foltiaLinuxによるアニメ等の録画サーバ)のインストール自動化

ツールについての概要

・chef はLinuxなどのOSにフレームワークや環境を作るためのツール
vagrantvirtualbox等の仮想環境の構築を自動化するためのツール

vagrant は chef を使用して仮想環境に自動で環境構築することができる
chef は実機にも設定できるが、vagrantはたぶんできない。

・chefはcookbookというスクリプトの集合を使って、そのスクリプトの通りにソフトウェアをインストールする
・cookbookはいろいろな人が公開している

Welcome - The resource for Chef cookbooks - Chef Supermarket

chef と vagrant が同列に語られることが多いので端的にまとめた

手順

・開発環境の用意

OS: Debian sid

Rubyが必要

最近のスクリプト言語は、ユーザ領域にライブラリを持たないとダメっぽい、以前のやり方をそのまま踏襲
Metasploit Framework - なんとな~くしあわせ?の日記

 # apt-get install ruby-dev
 # su - user
 $ vim ~/.bashrc  // 末尾にexport GEM_HOME=~/extlib/gems を追加
 $ source ~/.bashrc
chef-solo のインストール

そこからは以下のサイトを参照して、chef用のrubyでできたツールをガンガン入れる

Chef Soloの正しい始め方 | tsuchikazu blog

しかし、vagrantやchefはOSが保持するパッケージを入れておく。

 # apt-get install chef vagrant
 $ gem i chef --no-ri --no-rdoc
 $ knife configure # デフォルトの設定で
 $ gem i knife-solo --no-ri --no-rdoc

ここまででchefを使ってcookbookを作成する手はずはだいたい整った。あと覚えておかなければいけないのは、chefのcookbookの配置場所である。一にも二にも言われるのは、cookbooksがコミュニティで配布されるcookbookの配置場所で、site-cookbooksが、自分で作ったcookbookの配置場所であるということだ。

独自のcookbookの構成

主にここを参考にさせていただきました。
ChefでCookbook, Recipeを独自に作成 | EasyRamble

$ tree
.
├── README.md
├── Vagrantfile <-- あとで使うvagrantの設定ファイル
├── cookbooks    <-- コミュニティで配布されるcookbookの配置場所
├── install.sh        <-- あとで使う、仮想環境にchefをインストールするシェル
└── site-cookbooks  <-- 自分で作ったcookbookの配置場所
    └── foltia_cookbook  <-- 独自のcookbook、ひな形はコマンド実行時にでろでろ出てくるので、自分で作る必要なし
        ├── CHANGELOG.md
        ├── README.md
        ├── metadata.rb
        └── recipes
            └── default.rb

構成は以上のような形でいいらしい、作り方としては以下などどうだろうか

・$ git init で場所を作る
・$ mkdir cookbooks , $ mkdir site-cookbooks
・$ knife cookbook create -o site-cookbooks <*****_cookbook>

あとは、knifeやchefを使ってインストールするソフトウェアをうまく設定していく。

独自のVagrantfileの書き方

vagrantはまたchefとは別の仕組みである。chefを使役できる。

vagrant 基本コマンド

基本的な操作は以下がわかりやすかったです

Vagrant basics #Vagrant - Qiita

まあ以下がわかればあとは何とかなる

 # カレントディレクトリにVagrantfileのひな形できる
 $ vagrant init

 # 設定したVagrantfileにしたがって仮想環境作成
 $ vagrant up

 # 仮想環境シャットダウン
 $ vagrant halt
Vagrantfileを晒してみる

以下のようになります、まだ何もやっていません

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

   # Every Vagrant virtual environment requires a box to build off of.
   config.vm.box     = "fedora-20"
   config.vm.box_url = "https://dl.dropboxusercontent.com/u/15733306/vagrant/fedora-20-netinst-2014_01_05-minimal-puppet-guestadditions.box"

   # Install chef
   config.vm.provision :shell, :path => "install.sh"

   # use chef_solo
   config.vm.provision "chef_solo" do |chef|
      chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
      chef.add_recipe 'foltia_cookbook::default'
   end
end
config.vm.box_url

これにはvagrant用のVMのbox(設定済みの環境)のURLを設定します。これでboxを外から取ってこれます。
ここでさらされているので多分自由に使っていいです。
A list of base boxes for Vagrant - Vagrantbox.es

install.sh ?

これは、仮想環境側にChefをインストールするシェルスクリプトです。もちろん私が作ったのではなく、配布されているものです。以下にあります、Omnibus Installerというらしいです。
https://www.opscode.com/chef/install.sh

config.vm.provision

ここに仮想環境側へのインストール手順を書いていくみたいです。基本はrubyなので、ruby的に考えれば読めるのではないでしょうか。

以下が参考になりました
Vagrant の VM をシェルスクリプトでプロビジョニングする | CUBE SUGAR STORAGE

終わりに

作成物は以下です、foltiaApachePerlPHPfoltia本体、pt2 driverなどをインストールしなければいけないので、そこの手順を自動化してみたら面白いんじゃないのと思っています。

https://github.com/hangedman/chef-foltia

まあ、仮にインストールできたとしても、ベアメタルなマシンに最終的にはインストールしなければいけないので、まだまだ調査は必要なようです、ちょくちょく進めていこうと思います。