既存のvmをbox化する方法がワカラなかったので、自分でvargrant用boxを作成する方法を調べました。

ネットからisoを落としててきてカスタマイズするのは、veeweeやpackerといったツールがあるみたいだけれども、今回はあくまで既存のvmイメージをなんとかする。

公式サイトによると、以下の設定が必要

  • VirtualBox Guest Additionsのインストール(ファイル共有、ポートフォワードのため)
  • SSH の設定
  • Ruby & RubyGemsインストール(Chef and Puppetをインストールするため)
  • Chef and Puppet インストール(プロビジョニングのため)

ちなみに、一番参考になったのは、以下のサイト

事前準備

使うのは、もともともっている自分のvmです。こんな歴史のCentOS 6.4 minimal構成。

VMの設定

rootパスワードをvargrantにする

root権限になって、変更

su
vagrant

vagrantユーザを作成する

vagrant userを追加して、adminグループに入れる。

useradd vagrant
passwd vagrant
groupadd admin
usermod -G admin -a vagrant

Permission設定

adminグループにパスワードなしで、sudoできるようにする。

visudo

以下を末尾に追記

vagrant ALL=(ALL) ALL

%admin ALL=(ALL) NOPASSWD:ALL

Defaults env_keep=“SSH_AUTH_SOCK”

requirettyの先頭に!をつける。

Default !requiretty

これをしないと、起動時にこんなエラーが出た。

[default] -- /vagrant
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mkdir -p /vagrant

VirtualBox Guest Additionsのインストール

ファイル共有やポートフォワーディングを利用するために、virtualbox guest additionをインストールする。

VirtualBox の [デバイス]-[GuestAdditionインストール]を選択してダウンロード。ダウンロードされたら、ファイルをマウントしてファイルを取り出す。

mkdir /mnt/cdrom
mount -r /dev/cdrom1 /mnt/cdrom
cd /mnt/cdrom/

VBoxLinuxAdditions.runというファイルがあるので、これを実行。

# 念のため
yum -y install gcc kernel-devel
sh VBoxLinuxAdditions.run

CentOSだとエラーしたけど、構わずReboot

Installing the Window System drivers     [FAILED]

これはエラーしても問題はない。以下のコマンドでインストールできたことを確認する。

VBoxControl --version
VBoxService --version

インストールが終わったら、CentOSを再起動する。

ソフトウェアのインストール

以下の5つが必要。

  • Ruby - Use the dev package so mkmf is present for Chef to compile
  • RubyGems - To install the Chef gem
  • Puppet - To install Puppet (also ensure that a ‘puppet’ group is present!)
  • Chef gem - For provisioning support (gem install chef)
  • SSH

Ruby & RubyGemを入れる

yum -y install ruby rubygems

Chef,Puppetのインストール

プロビジョニングのためにChefを入れる

gem install chef --no-ri --no-rdoc
// puppetはいらないかも
gem install puppet --no-ri --no-rdoc

SSH設定

githubにSSHのためのキーがおいてある。

自分でつかうだけならば、この鍵をつかう。boxを公開するきは、自分で鍵を作成する。

vagrantユーザになって、

 mkdir .ssh
 cd  .ssh
 curl 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' > authorized_keys
 chmod 0755 .ssh
 chmod 0644 .ssh/authorized_keys

これを叩くとssh高速化するらしい

echo 'UseDNS no' >> /etc/ssh/sshd_config

パッケージ作成

不要なファイルはできるだけ、パッケージ化前に削除しておくこと。

yum clean all

VMの電源を一旦OFFにする。

vagrant package でパッケージを作成する。

vagrant package --base "C:\home\TSUNEMICHI\VirtualBox VMs\Saru\Saru.vbox"

package.boxが作成される。(けっこう時間かかる)

作成できたか確認

実際に、boxをつかってみて、ちゃっとできたか確かめる。

vagrant box add my_box package.box
mkdir test_environment
cd test_environment
vagrant init my_box
vagrant up
vagrant ssh

接続できればOK.接続できなければ、sshの設定が怪しい。

共有フォルダの設定も確認。

touch test
vagrant ssh
less /vagrant

参考