Vagrant+VirtualBoxとpackerで検証環境を作ろう

サーバーを弄っていると検証環境が欲しいなぁという状況が何かと出てきます。
コンテナだとものっすごく手軽に作れて楽だけれど、もっとちゃんとしたというか、もうちっと実機に近い環境がいいなぁって時にはやっぱりVagrantとVboxは手軽だ!とこないだDockerを弄ってて思ったってーか気づいた。

・1つのBoxで複数台のゲストが作れる。
・複数台で作ったゲストを同じセグメントにして通信もできる。
・IPアドレスを指定もできる。

などなど、コンテナに比べるとゲストOSとして出来上がるまでの時間はかかってしまうけれど、Dockerではやりにくい事でも簡単にできるのだからこれはイイ。

イイと言いますか、書籍ではそもそもVagrantとChefだったし、情報も多いし。
需要が多いのだろうから当然っちゃあ当然な事なことだ。

この日記のVagrant関連の記事がぜんぜん検索結果に乗っかってこないのは、ユーザーも多いんだろう。
悲しいけど現実なのよね。

ではでは。

今回は自分の過去日記とGithubも何枚みたか分からないくらい見た中で色々組み合わせて組み立てていきました。BOXはインターネットに色々あるのでそれを使えば済むのですがやっぱり自分で作りたい!という気持ちがあるのですが、ググって組み合わせたものなので、自分で作ったというにはならないですがね。うーぬ、悔しいな。

参考サイト

box-cutter GITHUB
https://github.com/box-cutter

もうちょいコード化やりますか 3杯目 Packer~Chef | たけけんのサーバー勉強日記:
http://www.vincentina.net/?p=4731

Packerを使ってゲストOSを作成するのに必要なファイルはjsonファイルとks.cfgの2個だけど、vboxmanageのインストールが必要なのでprovisoner.shを足した3個。

今回欲しかったOSはCentOS5で、vboxmanageとChefのインストールまで成功できたのは過去に作ったものや今回作ったものやググったものを組み合わせたものです。
CentOS6と違ってなかなかうまくいかなかったです。
1回のビルドで時間がかかってしまうので、何が必要で必要でないかの取捨選択が難しく、もともとあったもののコピペの部分も多々あります。

[takeken@ubuntu]$ cat cent.json
{
  "builders":[{
    "type": "virtualbox-iso",
    "headless": true,
    "vm_name": "centmini5_b",
    "boot_wait": "30s",
    "disk_size": "20000",
    "guest_os_type": "RedHat_64",
    "iso_checksum_type": "sha1",
    "iso_checksum": "ebd77f2fdfac8da04f31c508905cf52aa62937cc",
    "iso_url": "http://ftp.riken.jp/Linux/centos/5/isos/x86_64/CentOS-5.11-x86_64-bin-DVD-1of2.iso",
                 "ssh_password": "vagrant",
                "ssh_port": 22,
                "ssh_username": "vagrant",
    "ssh_wait_timeout": "3000s",
    "guest_additions_path": "VBoxGuestAdditions_{{.Version}}.iso",
    "virtualbox_version_file": ".vbox_version",
    "vboxmanage": [
      ["modifyvm", "{{.Name}}", "--memory", "1024"],
      ["modifyvm", "{{.Name}}", "--cpus", "1"]
      ],
    "http_directory": "./",
    "boot_command": [
                        "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks.cfg<enter><wait>"
      ],
                "shutdown_command": "echo 'vagrant'|sudo -S /sbin/halt -h -p"
    }],
  "provisioners": [{
    "type": "shell",
    "scripts": ["./provisioner.sh"]
    }],
  "post-processors": [{
    "type": "vagrant",
    "output": "box/centos5_b.box"
    }]
}

KSファイルは色々試して、VMwareでCentOS5を最小インストールしたものがベースですが、パッケージについてはGithub Boxcutterで選んでいるものです。

[takeken@ubuntu]$ cat ks.cfg
# Kickstart file automatically generated by anaconda.
install
cdrom
lang ja_JP.UTF-8
keyboard jp106
network --device eth0 --bootproto dhcp
rootpw --iscrypted $1$B5biRIOK$BzKEW72fnx50Rjo2AlEZq/
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --disabled
timezone Asia/Tokyo
bootloader --location=mbr

text
skipx
zerombr

clearpart --all --initlabel
autopart

auth  --useshadow  --enablemd5
firstboot --disabled
reboot

%packages --ignoremissing
@Base
@Core
@Development Tools
kernel-devel
nfs-utils
openssl-devel
readline-devel
zlib-devel
-avahi
-bluez-utils
-dogtail
-kudzu
%post
# update root certs
wget -O/etc/pki/tls/certs/ca-bundle.crt http://curl.haxx.se/ca/cacert.pem
# vagrant
groupadd vagrant -g 999
useradd vagrant -g vagrant -G wheel -u 900
echo "vagrant" | passwd --stdin vagrant
# sudo
echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers

Provisioner.shはメインはVboxmanageのインストールです。ほかは大体でいいと思いますが、Chefのインストールも入れときました。

[takeken@ubuntu]$ cat provisioner.sh
#!/bin/sh

## base install
sudo yum -y update
sudo yum -y upgrade
sudo rpm -i http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm
sudo yum -y install gcc make kernel-devel-`uname -r` zlib-devel openssl-devel readline-devel perl wget
sudo yum -y install curl bind-utils git jman ntp openssh-clients rsync sysstat vim dkms
sudo sed -i "s/#UseDNS yes/UseDNS no/" /etc/ssh/sshd_config

## vboxguest install
VBOX_VERSION=$(cat /home/vagrant/.vbox_version)
sudo cd /tmp
sudo mount -o loop /home/vagrant/VBoxGuestAdditions_$VBOX_VERSION.iso /mnt
sudo sh /mnt/VBoxLinuxAdditions.run --nox11
sudo rm -rf /home/vagrant/VBoxGuestAdditions_*.iso
echo "Vboxguest conplete!"

## user create
mkdir -pm 700 /home/vagrant/.ssh
wget --no-check-certificate 'https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub' -O /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant:vagrant /home/vagrant/.ssh
echo "Usercreate conplete!"

curl -L https://www.opscode.com/chef/install.sh | sudo bash

とまあ、若干恥ずかしいですがこんな感じです。

全然関係ない話ですが、Wordpressの記事を書く画面がワンカラムに対応したようで、モニターの右半分が有効に使えるようになりました。
ビルドに時間がかかるケースは検証するのもやたらと時間がかかるので(カーネルのビルドの比ではないですが、と言ってもコードにミスがあって返ってきていない状態が実は永遠続いてたって事もありますが)何か見ながらじゃないと大変なので、横のスペースで色々見ながら作業ができて良いですね。
カーネルを弄ってる仕事の人はそれはそれは大変なのかなぁと思います。
でも読んで分かる人たちなら、試行錯誤しながら何回も何回もビルドするって事も少なそうですね。

余談が随分と多くなってしまいましたが、日記なのでヨシとしようじゃないか。

ゲストOS作成までの道のりですが、まずはボックスを作成します。出来上がったらひな形を作成しますってパターンは最近の王道なのかね。するとVagrantファイルが出来上がるのでBox名を編集と必要ならネットワーク関連も記述します。

packer build -only=virtualbox-iso centos5.json
vagrant init
vim Vagrant
vagrant up
vagrant ssh

など。

何個も動かしているときは以下のコマンドでrunning中のゲストを確認できます。

vagrant global-status

最近はDocker便利だなぁと嵌っていたけれど、色々やっているうちにコンテナではちょっと足りない事が出てきたので、そこからVagrantに移行した感じですが、それだと結局Vagrant+Chefになるのだね・・、そう参考書籍のままになったのです。
にゃははは

自画自賛だけれど、Chef-solo+Dockerもわりといいコンテンツが出来たと思ったのだけれどSEOなのか検索結果が上位に全く上がらず。上がらないとアクセスも来ないのだよ。
あれはよく分からん。
そうかと思えばついでにDockerのような記事がアクセスがあったりするんだよね。

 

ではの。

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *