VagrantのBase Boxを作成してみた。

環境はWindows8 Pro 64bit。(だけど、あまり関係ないかも)

一般的にはBaseBoxはWebのテンプレートから取ってきて使えば良いので、一般的にはやる必要がないとのこと。
カスタムBaseBoxを作る必要がある時のみ行う。
作成手順は下記に載っており、この通りに進める。

なお、配布用に省スペース化のような最適化する項目は省いている。

http://docs.vagrantup.com/v1/docs/base_boxes.html

※veeweeを使えば、今回のBase Box作成の作業は自動化できるみたい。

VMを作成する

ここではUbuntu1210 Desktopの32bit版を用いる。
まず、vagrant-ubuntu-1210_32_Desktopという名前を付けてVMを作る。
VagrantのBoxはvagrant-[OS名]というルールがある。

VMの情報としては配布する場合、下記を使うことが推奨されている。

  • Hostname: vagrant-[os-name], e.g. vagrant-debian-lenny
  • Domain: vagrantup.com
  • Root Password: vagrant
  • Main account login: vagrant
  • Main account password: vagrant

HDDはVDI形式で作成。そして、可変サイズで40GB割り当てた。
NICはNATとする必要がある。
ディスクファイルをCD/DVDドライブに挿入してVMを起動する。
するとインストーラが起動して、PC名などを入力する画面になる。
ここで、私は下記の情報を入力した。

  • Your name: vagrant
    ここは何でも良い?
  • Your computer’s name: vagrant
    vagrant-[OS名]のほうがよいかも。
  • Pick a username: vagrant
  • Choose a password: vagrant
  • Confirm your password: vagrant
  • Log in automaticallyにチェックを入れた.
    これはチェックを入れず、ログイン時にパスワードを入力するようにしてもいいはず。

ポートフォワーディングの設定

VirtualBoxの[設定]メニューの[ネットワーク]の項目でルールを作成する

  • ホスト
    • IP
      空白 → 自動的に127.0.0.1になる
    • Port
      2222
  • VM
    • IP
      空白 → 自動的に127.0.0.1になる
    • Port
      22

この後、VMを再起動する。

権限のセットアップ

ここでは、sudo実行時にパスワードを入力しなくてもコマンドを実行できるようにする。

  1. VMにログインする。
  2. ターミナルを開いて下記を入力し、adminグループを追加する。
    $ sudo groupadd admin
  3. 下記を入力し、vagrantユーザーの所属グループをadminに変更する。
    $ sudo usermod -g admin vagrant
  4. 下記を実行する。
    $ sudo visudo
  5. %admin ALL=(ALL) ALLになっている行の真下に下記を追加する。
    %admin ALL=NOPASSWD: ALL
  6. Defaultsに下記を追加。
    Defaults env_keep = “SSH_AUTH_SOCK”
  7. その後、Ctrl-oを入力し、/etc/sudoersというファイル名で保存。
  8. $ sudo visudoを再実行し,%sudo ALL=(ALL:ALL) ALLをコメントする。
    # %sudo ALL=(ALL:ALL) ALL
  9. 下記を実行し、反映させる。
    $ sudo /etc/init.d/sudo restart

以上が終了すると、sudo時にパスワードを聞かれなくなる。

VirtualBox Guest Additionsをインストールする

まず,システムに必要なパッケージのインストール。

VirtualBoxの「デバイス」→「Guest Additions のインストール …」を選択。

すると、CDにマウントされ、起動するので、Runボタンを押すとVirtualBox Guest Additionsがインストールされる。

初期ソフトウェアのセットアップ

それぞれ、下記のコマンドでインストールする。

  • Ruby – Use the dev package so mkmf is present for Chef to compile
    1. $ sudo apt-get install ruby
  • RubyGems – To install the Chef gem
    1. $ sudo apt-get install rubygems
  • Puppet – To install Puppet (also ensure that a ‘puppet’ group is present!)
    1. $ sudo apt-get install puppet
  • Chef gem – For provisioning support (gem install chef)
    1. $ sudo apt-get install ruby1.9.1-dev(rubyのバージョンを合わせること)
    2. $ sudo gem install chef
  • SSH
    1. $ sudo apt-get install ssh
    2. $ ssh-keygen -t rsaを実行してsshサーバーの準備をしておく。(すべてデフォルト値でOK)

Public Key(公開鍵)を用いたssh認証の設定

Boxを一般公開用にする場合、vagrantで共用の公開鍵をauthorized_keysに登録しておく。
そのために、下記の公開鍵と秘密鍵をダウンロードして、VMに送る。

https://github.com/mitchellh/vagrant/tree/master/keys/

パーミッションは600として、~/.ssh以下に保存。

  • authorized_keys(公開鍵をコピー)
  • vagrant→id_rsa(ファイル名変更)
  • vagrant.pub→id_rsa.pub(ファイル名変更)

Base Boxのエクスポート

下記のコマンドでVMをBase Boxとしてエクスポートする。

しばらく待った後、package.boxというファイルが出来る。
これがBase Boxである。

Base BoxをVagrantで使う

下記のコマンドでaddする。

後は、initしてupすれば立ち上がる。

knife-soloでchef-soloの実行を確認できた。
Base BoxはWebサーバー上に置いておけば便利そう。