もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

WindowsにcapstanをインストールしてOSvを起動してみた

はじめに

オープンソースカンファレンス2014 Kansai@KyotoでOSvの何たるかをご教示頂きました。
(ざっくり、JVMの動作に必要なLinux APIをエミュレーションする超軽量なOSとのこと。)

調べるとWindowsVirtualBoxと言う我が家のクラウド環境(?)もサポートされてるみたいなので、インストールしてみることにしました。

最終的にはマイクラサーバが動けば良いなと。

WindowsでOSvを動かしてみよう

あらかじめインストールしてあったもの

  • Windows 7 Pro 64bit(OSv自体が64bitのみサポートみたいなので、32bit OSはアウトと思います。)
  • SourceTree(内部gitを有効にしたもの) 1.5.2.0
  • VirtualBox 4.3.12

Go言語をインストールする。

capstanはGoogle謹製のGo言語で書かれているため、http://golang.org/dlから、Windows版を入手します。

f:id:moguno:20140803214923p:plain

なんとなくお勧めされた64bit版をチョイス。
インストール先はデフォルトのc:\go\にしました。

SourceTreeでcapstanのリポジトリをクローンする。

https://github.com/cloudius-systems/capstanをクローンします。

f:id:moguno:20140803193841p:plain

8/3時点のHEADは、0.1.2 + 2014/7/29 4:38までのコミットでした。

作業用コマンドプロンプト起動用バッチファイルを作る。

capstanをインストール or 実行するためには、下記のプログラムにパスを通す必要があります。

  • go.exe
  • git.exe
  • VBoxManage.exe

加えて、GOPATHにgo言語のルートになるフォルダを設定する必要があります。

毎回設定するのは面倒なのでバッチファイルにします。

・capstan_cmd.bat

set PATH=%PATH%;c:\go\bin
set PATH=%PATH%;c:\Users\desktop\AppData\Local\Atlassian\SourceTree\git_local\bin
set PATH=%PATH%;"c:\Program Files\Oracle\VirtualBox"
set GOPATH=c:\go\

cmd

capstanのインストール

さて、ここからはコマンドプロンプトでの作業です。
さっきのバッチファイルからコマンドプロンプトを起動し、install.batを実行します。

c:\>cd \Users\desktop\Documents\capstan ←capstanをクローンしたフォルダ

c:\Users\desktop\Documents\capstan>install

c:\Users\desktop\Documents\capstan>set package=github.com/cloudius-systems/capst
an

c:\Users\desktop\Documents\capstan>for /F %i in ('git describe --tags ') do set
version=%i

c:\Users\desktop\Documents\capstan>set version=v0.1.2-4-gdb6eb7e

c:\Users\desktop\Documents\capstan>go get github.com/cloudius-systems/capstan
# github.com/cloudius-systems/capstan
c:\go\src\github.com\cloudius-systems\capstan\capstan.go:64: too few values in struct initializer
c:\go\src\github.com\cloudius-systems\capstan\capstan.go:95: too few values in struct initializer

・・・(同様のエラーが続く)

あらら、エラーです。

cliのバージョンダウン

エラーの原因はcapstanが使っているcliと言うパッケージでした。
StringFlag()メソッドに渡す引数の数が足りていない様です。

調べると、cliパッケージが8/3(今日やん・・・)にバージョンアップ(1.2.0)しており、その際にメソッドの仕様が変わったようです。

1.1.0にバージョンダウンして何とかします。

c:\Users\desktop\Documents\capstan>cd \go\src\github.com\codegangsta\cli\

c:\Go\src\github.com\codegangsta\cli>git checkout 1.1.0
Note: checking out '1.1.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 27ecc97... Merge pull request #112 from AudriusButkevicius/swap

再度capstanのインストール

c:\Users\desktop\Documents\capstan>install

c:\Users\desktop\Documents\capstan>set package=github.com/cloudius-systems/capst
an

c:\Users\desktop\Documents\capstan>for /F %i in ('git describe --tags ') do set
version=%i

c:\Users\desktop\Documents\capstan>set version=v0.1.2-4-gdb6eb7e

c:\Users\desktop\Documents\capstan>go get github.com/cloudius-systems/capstan

c:\Users\desktop\Documents\capstan>go install -ldflags "-X main.VERSION v0.1.2-4
-gdb6eb7e " github.com/cloudius-systems/capstan

c:\Users\desktop\Documents\capstan>

うまくいきました。

OSvの起動

引き続きコマンドプロンプトからOSvを起動します。
コマンド一発で仮想HDDイメージのダウンロードから起動までやってくれます。楽ちん。

VirtualBoxマネージャーのウインドウを開いておくと動的にVMがセットアップされていくのが見えて楽しいです。

C:\Users\desktop\Documents\capstan>capstan run -f 8000:8000 cloudius/osv
Downloading cloudius/osv/index.yaml...
126 B / 126 B [=====================================================] 100.00 %
Downloading cloudius/osv/osv.vbox.gz...
73.09 MB / 73.09 MB [===============================================] 100.00 %
Created instance: cloudius-osv
OSv v0.11
eth0: 10.0.2.15

[/]% ←OSvのプロンプト

Webインターフェースを起動する

ホストマシンからhttp://localhost:8000にアクセスするとめでたくWebインターフェースが表示されます。
f:id:moguno:20140803204302p:plain

今日はここまで。

うまく行ってないところ

VMが終了できない。

WebインターフェースからshutdownしたりVirtualBoxマネージャーからACPIシャットダウンしてもOSvが終了しません。
コンソールにはこんなメッセージ。

exception nested too deeply
[backtrace]

例外が死ぬほど出てる感じ?

ブリッジモードで起動できない

capstanから-bオプションを使ってブリッジモードで起動しようとしてもVMが起動しませんでした。