既存の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構成。
- CentOSを最小構成(minimal)でVMware Playerにインストールした | Futurismo
- Windows上のCentOSをVmwarePlayerからVirtualBoxへ移行した手順 | Futurismo
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
参考
- Vagrant のベースBOX作成手順 (Scientific Linux 6.1) - エンジニアきまぐれTips
- Ubuntu 13.04 の vagrant 用 box を作る - Qiita [キータ]
- Vagrant Documentation - Documentation - Base Boxes
- Creating a vagrant base box for ubuntu 12.04 32bit server · fespinoza/checklist_and_guides Wiki
- Easy and simple guide to create your own Vagrant box (Ubuntu-12.02-64 server bridged) from VirtualBox « Basilio Briceño
- Creating a CentOS 6.2 base box for Vagrant | Ricbra’s Blog