20 Jul 2013, 11:48

既存のCentOSのイメージファイルを使ってvagrant用boxファイルを作ったメモ

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

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

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

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

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

[toc]

事前準備

使うのは、もともともっている自分の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

参考

15 Jul 2013, 09:26

ミライの組込み開発!vagrant × sahara × minitestで実現する仮想エンドツーエンドテスト

photo credit: Ѕolo via photopin cc

以前、組込み開発での機能テスト自動化について考察しました。

組込み開発でのエンドツーエンドの課題は、テストが失敗したところから正常な状態まで復旧させることでした。

実際にテストできるかどうかはまだまだ試行錯誤が必要そうだ。実際の仕事で適用するためには、後処理から正常な状態に復旧させる処理が最大の課題だと思っている。

この課題を、仮想環境のスナップショットがコマンドラインから操作できるvagrantとsaharaを利用して解決してみようと思います。

3ヶ月前のリベンジ

3ヶ月前に書いた、Rubyのminitestを利用したスクリプトのなかに、vagrantとsaharaを組込みます。ポイントは、

  • setupでスナップショットから仮想環境を初期化

です。テストが失敗した結果、いくらボロボロに環境を破壊してても、一瞬でもとに戻します。

# sahara rollbackで初期化
system( 'vagrant sandbox rollback' )

 mkdirするサンプルテスト

動画

[//www.youtube.com/embed/Ct7ivafdpoY?rel=0]

ミライの組込み開発

GOOS本を読んでから、ウォーキングスケルトンを組込み開発でどうやってつくればいいのか、ずっと頭を悩ませていた。(そして、途中で読むのをやめてしまった。。えっ?(・・?)

vagrant、これが、答えだ! ( ー`дー´)キリッ

vagrantとsaharaを利用したエンドツーエンドテスト、革命的な方法だと思う。

githubのReadmeを読むと、Acceptance Tests用の追加機能もあるっぽいのでもう少し調べてみる。

会社では、quemで作成されたシミュレータをCentOS上で動作させてテストしたりしてる。vagrantとsaharaを利用すれば、quemで作られたシミュレータも一瞬で初期化できるのだ。もっとも、quem自体にスナップショット機能があるっぽいけど。。

実機がないけど、シミュレータを利用してテスト出来て、いくらでも壊して一瞬で復元できる。。。これが、ミライの組込み開発。

これって、すごいことじゃないか?

15 Jul 2013, 00:47

仮想環境を破壊しまくっても大丈夫だ、問題ない。vagrantプラグイン『sahara』

vagrantのプラグイン、saharaを使ってVirtualBox上のCentOSを破壊しました。

photo credit: mariusz kluzniak via photopin

[toc]

saharaとは

saharaはvagrantのプラグインです。

saharaを使うと、以下のようなことがコマンドラインからできます。

  • 仮想マシンのスナップショットを作成
  • スナップショットから仮想マシンを復元

つまり、仮想マシンをボロボロのメタメタのケチョンケチョンに破壊しまくっても、

元に戻せるのです!( ̄ー ̄)

saharaのインストール

$ vagrant plugin install sahara
Installing the 'sahara' plugin. This can take a few minutes...
Installed the plugin 'sahara (0.0.15)'!

saharaの使い方

コマンドは以下の4つです。

  • vagrant sandbox on
  • vagrant sandbox commit
  • vagrant sandbox rollback
  • vagrant sandbox off

簡単な例

ここでは、 /usr配下をうっかり削除してしまい、復元しようと思います。

まずは、事前にvmを立ちあげときます。

$ vagrant up
サンドボックス有効化

saharaを利用するためには、sandboxモードを有効化します。

$ vagrant sandbox on
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

GUIからも、スナップショットが作成されたことが確認できます。


以下のフォルダに格納されました。

C:\home\TSUNEMICHI\VirtualBox VMs\centos_1373847520\Snapshots
スナップショットから以前の状態を復元

rollbackコマンドでsandboxモードを有効化した時点に戻ることができます。

$ vagrant sandbox rollback
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

それでは、ここでうっかりディレクトリ削除をしてみます。

$ vagrant ssh
$ su # root passwordは vagrant
$ rm -rf /usr

うひゃあ 。゚(゚´Д`゚)゚。

$ ls /usr
ls: cannot access /usr: No such file or directory

でも、大丈夫だよ (´・ω・)っ□

$ vagrant sandbox rollback
$ vagrant ssh
$ ls /usr/
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp

よかったねー。(っ´∀`)っ


[//www.youtube.com/embed/uviNa0kyVX8?rel=0]

サンドボックス無効化

saharaをもう利用しない時は、sandboxモードを無効化します。ちなみに、けっこう時間がかかります。

$ vagrant sandbox off
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

スナップショットは以下に保存されています。もちろん、VirtualBoxからもスナップショットの管理ができます。

スナップショット作成

commitコマンドで現在の状態を保存します。これによって、rollbackで戻れる時点を変更できます。これはスナップショットを一旦削除するので、時間がかかります。

$ vagrant sandbox commit

内部的には、sandbox offしてonしているだけに見えます。

パフォーマンスについて

時間はどうなの?

sandbox onと sandbox rollbackは一瞬で終わります。sandbox offとsandbox commitスナップショットの削除時間が入るので、数分かかります。

とくに、sandbox rollbackが一瞬で完了するのは素晴らしいです。これなら、エンドツーエンドテストに十分応用可能なスピードです。

容量はどうなの?

スナップショットをたくさんとった時の気になる容量を確認しました。

CentOS 6.4 Minimal の元ファイルが1.5GBのスナップショットは 63.8 MB でした。このくらいならば、許せるレベル。僕の貧弱マシンでも大丈夫です。

参考

525A3%2525E3%252583%2525BC_2013-7-14_15-7-43_No-00.jpg

14 Jul 2013, 23:06

vagrantがスゲエ!コマンドラインからVirtualBoxを自由自在に操る方法

前回、VirtualBoxの導入をしました。

今回は、VirtualBoxをコマンドラインから操作することができるVagrantを使ってみようと思います。

[toc]

環境

  • VirtualBox 4.2
  • Vagrant 1.2.3
  • Windows 7 x64

Vagrantとは

Vargrantとは、仮想環境をコマンドラインから操作することができる、オープンソースRubyスクリプトです。

VirtualBoxやVMware Fusion/VMware WorkBench、EC2をコマンドラインから操作できます。VMware Fusionは有料(4000円くらい?)なので、無料のVirtualBoxで試してみます。

Vagrantのインストール

最新版をサイトからとってきてインストールします。

Windows番だとMINGWやRubyがまとめて梱包されていました(重い)。

Cygwinで Vagrantを利用するための設定

Cygwinから利用するためには、以下のおまじないが必要みたいです。

dos2unix /cygdrive/c/HashiCorp/Vagrant/bin/vagrant

詳しくはココ。

ちなみに,このページだと、.VirtualBoxフォルダがCygwinで実行した場合には、Cygwinホーム配下に作成されて、Windowsホーム配下のものと二重管理になるので、リンクを作成するといいよとかいてある。

自分の場合、特に不都合がでることはなかったが、念のため、以下も実施しておく。

コマンドプロンプトから管理者権限で、

cd C:\Windows\system32
mklink C:\cygwin\home\TSUNEMICHI\.VirtualBox C:\home\TSUNEMICHI\.VirtualBox
mklink "C:\cygwin\home\TSUNEMICHI\VirtualBox VMs" "C:\home\TSUNEMICHI\VirtualBox VMs"

TSUNEMICHIの部分はユーザ名なので、適当に読み替えてください。

Vagrantの使い方

ドキュメントはコチラ。

環境構築には、3コマンドで行けます。

$ vagrant box add base http://files.vagrantup.com/lucid32.box
$ vagrant init
$ vagrant up

以下、詳細です。

boxファイルの作成

Vagrantを利用するためには、まずboxファイルというものを用意する必要がある。boxファイルの作成方法は、以下の2つがあるようだ。

  • テンプレートをネットから落としてくる方法
  • boxファイルを自作する方法

自作する方法はまた別の機会に調べることにして、まずはテンプレートからサクッとvagrantを試してみます。

以下のサイトで、様々なOSのISOにvagrant利用環境を整えたboxが配布されている。例えば、CentOS 6.4 minimal(VartualBox)は以下。

インストールは、以下のコマンドを実行。

vagrant box add base http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box

IOSイメージをダウンロードしてくるので、メチャクチャ時間がかかります。気長に待つこと。

Vagrantの初期化

boxファイルが作成できたら、VMを管理するためのディレクトリをつくって、ディレクトリでvagrantが動作するように初期化します。

% mkdir centos
% cd centos
% vagrant init base
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Vagrantfileが作成されます。

Vagrantの実行

いよいよ、vagrant実行です。コマンド数は少ないですが、ダウンロード時間でけっこうここに来るまで時間がかかった。。orz

いざ、実行!!( ´・∀・`)ノ

% vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'base'...
 [0K[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.

ここで起動が止まってしまった。。。いろいろと苦労してBIOSのvt-d設定を有効化したら、起動できた!

VirtualBoxを見ると、起動中となっていることがわかります。ホントにコマンドラインから起動できた!!


vagrantの基本コマンド

コマンドの使い方はヘルプから確認できます。

$ vagrant -h

Usage: vagrant [-v] [-h] command []

    -v, --version                    Print the version and exit.
    -h, --help                       Print this help.

Available subcommands:
     box
     destroy
     halt
     init
     package
     plugin
     provision
     reload
     resume
     ssh
     ssh-config
     status
     suspend
     up

基本コマンドは以下。

  • vagrant init vagrant 初期化(Vagrantfile作成)
  • vagrant up vagrant 起動
  • vagrant ssh vagrant ログイン
  • vagrant halt vagrant 終了

ログイン

$ vagrant ssh
Last login: Sun Jul 14 21:24:25 2013
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$

vagrant 終了(一時停止)

$ vagrant halt
[default] Attempting graceful shutdown of VM...

コマンド数も少ないので、簡単に覚えられますね。動画も載せておきます。

[//www.youtube.com/embed/Pj8aEvXfaW8?rel=0]

容量は・・・

ちなにみ、気になる体重・・・じゃなかった、容量ですが、CentOS minimal構成でどのくらいになるのか、調べました。

vagrant initを実行したフォルダの容量を調べたら、4.51 KB・・・あれ?(´・д・`)

Boxファイルは、以下にありました。

$HOME/.vagrant.d/boxes/(ボックス名)/virtualbox/box-disk1.vmdk

容量は、524MB。軽い軽い。

そして、VMイメージですが、以下にありました。

C:\home\TSUNEMICHI\VirtualBox VMs

容量は、1.5GB。ふふふ、重い重い。

ちなみに、Boxファイルからではなく、普通にCentOS6.4 minimal構成のISOをインストールした場合の容量は、157MBだ。桁が1つ違う。。。

14 Jul 2013, 10:02

Windows上のCentOSをVmwarePlayerからVirtualBoxへ移行しました

以前、一生懸命頑張ってVmwarePlayerをインストールしましたが、Vargrantを使ってみたくてVartualBoxに移行することに決めました。今回も、フルパワーで頑張りました。

WindowsでVMware Player上のUbuntuを動かしてみたメモ | Futurismo


環境

  • ホストOS: Windows 7 64bit
  • ゲストOS: CentOS 6.4
  • 移行元: VirtualBox 4.2
  • 移行先: VMware Player 5.0.1

VirtualBoxのインストール

なにはともあれ、VirtualBoxをインストールします。以下からダウンロードします。OSよってダウンロードするバイナリが異なります。自分はWindowsを選択。

VirtualBoxはVmwarePlayerに比べると心なしか、UIがカッコ悪い気がします。


VirtualBoxの設定

仮想マシンの作成

『新規』を選択して、新規仮想マシンを作成。

  • バージョンを選択するところにCentOSの文字はない。Red Hatを選択します。
  • メモリ容量は適当に。ここでは1024MB
  • ハードドライブを追加しないにチェックを入れます。

仮想マシン完成!

仮想マシンの設定

次に,仮想マシンの設定をします。

ツールバーの『設定』 -> ストレージ -> コントローラ SATA -> 追加

を選択。ここで、vmwara playerの仮想ディスク(.vmdk)を追加します。


起動を選択!


簡単に立ち上がりました!と思ったら、マウス操作が効かなくなる。。

これは、2つあるCtrlキーのうちの右のほうを押すことで、マウスが復活する。Vmwareだと、Ctrl + Altだったので、これに変更する。変更は、ツールバー -> 詳細設定 -> 入力から可能だ。

文字化け対策

色々とコマンドを実行しようとしても ■ ■ ■ ■ と表示されて、うまく表示できない。以下で解決。えっ、Shift-jis??

export LANG=ja_JP.shift-jis

外部ネットワーク設定

まず、ネットワークが繋がらない。ネットワークをstopさせて再スタートさせると、以下のメッセージ。

/etc/init.d/network start
device eth0 does not seem to be present delaying initialization

古い移行前のvmware playerでの設定が残っているようだ。

このサイトの通りに設定しなおしたらネットワークにつなぐことができた。

ホストオンリーアダプタの設定

上記ネットワーク設定だと、外部のネットワークにはアクセスできたが、ホストOSからゲストOSにtelnetすることができなかった。

ホストOSとゲストOSの接続をするためには、ホストオンリーアダプタの設定が別途必要。

以下のサイトを参考に設定。

VIrtualBoxで仮想ネットワークを構築 | それなりブログ

eth1用にネットワーク起動スクリプトを作ったのがミソだった。

touch /etc/sysconfig/network-scripts/ifcfg-eth1
emacs /etc/sysconfig/network-scripts/ifcfg-eth1
========================
DEVICE=eth1
BOOTPROTO=static
BROADCAST=192.168.56.255
HWADDR=XX:XX:XX:XX:XX:XX
IPADDR=192.168.56.101
NETMASK=255.255.255.0
NETWORK=192.168.56.0
ONBOOT=yes
========================

このやりかただと、また

device eth1 does not seem to be present delaying initialization

が出てきたので、再度eth0と同じ手順で設定し直した。

最後に

ふう、大変だった。

もう、VMWare Playerにはもどれないだろうな・・。