1コマンドでJavaアプリをOSvへデプロイ
OSvは、ハイパーバイザやIaaSプラットフォームへアプリケーションをデプロイすることに特化した軽量OSです(※詳しくはこちら)。
また、CapstanはGo言語で実装されたOSvのデプロイツールです(※詳しくはこちら)。
OSvはJVM上で動くアプリケーションをメインターゲットとして開発が進められており、様々なJavaアプリケーションが動作します。
この記事ではCapstanの開発版を使って1コマンドで任意のJavaアプリからOSvのディスクイメージを生成&実行してみます。
Capstan開発版をインストール
go get github.com/cloudius-systems/capstan go install github.com/cloudius-systems/capstan
これで~/go/bin/にCapstanがインストールされました。
PATH指定を省略してCapstanを呼びたい場合は~/go/binにPATHを通して下さい。
その際、既にバイナリ配布版のCapstanをインストールしている場合はPATHが異なることに注意して下さい(バイナリ配布版は~/bin)。
Rhinoを試す
まずは単一のjarで配布されているRhino Javascriptインタプリタを試します。
wget ftp://ftp.mozilla.org/pub/mozilla.org/js/rhino1_7R2.zip unzip -x rhino1_7R2.zip ~/go/bin/capstan run rhino1_7R2/js.jar
capstan run
実行が開始されると、OSvの起動メッセージの後にRhinoが起動してくるのでJavaScriptで遊んでみます。
Downloading cloudius/osv-openjdk/index.yaml... 160 B / 160 B [=====================================================] 100.00 % 0 Downloading cloudius/osv-openjdk/osv-openjdk.qemu.gz... 74.34 MB / 74.34 MB [===========================================] 100.00 % 3m16s Building js... Uploading files... 1 / 1 [=============================================================] 100.00 % 0Created instance: js OSv v0.16 eth0: 192.168.122.15 Rhino 1.7 release 2 2009 03 22 js> print("Hello World"); Hello World js> 1 + 2; 3 js> quit();
複数のjarファイルからなるプログラムを実行してみる
One-JARを使うと複数のjarファイルを一つにまとめることが出来るようなので、これを使ってApache FtpServerを一つのjarにまとめてOSvへデプロイしてみます。
まずFtpServerとOne-JARをダウンロードしてきて解凍します。
wget http://ftp.riken.jp/net/apache/mina/ftpserver/1.0.6/dist/ftpserver-1.0.6.zip unzip -x ftpserver-1.0.6.zip cd apache-ftpserver-1.0.6 wget http://jaist.dl.sourceforge.net/project/one-jar/one-jar/one-jar-0.97/one-jar-boot-0.97.jar
まとめたjarファイルを作るための一時ディレクトリを./rootに作成し、ここのjarファイルをコピーします。
mkdir -p root/main mkdir -p root/lib cp common/lib/*.jar root/lib mv root/lib/ftpserver-core-1.0.6.jar root/main/ cd root jar xvf ../one-jar-boot-0.97.jar
boot-manifest.mf
boot-manifest.mfにOne-Jar-Main-Classの行を足します。
Manifest-Version: 1.0 Main-Class: com.simontuffs.onejar.Boot One-Jar-Main-Class: org.apache.ftpserver.main.CommandLine
capstan runを呼んでディスクイメージを生成・実行します。
FTPサーバに接続可能にするため、ネットワークをブリッジ接続にします。
jar -cvfm ../ftpserver.jar boot-manifest.mf . cd .. ~/go/bin/capstan run -n bridge ftpserver.jar
capstan runが実行されると以下のような感じでFtpServerが起動します。
Building ftpserver... Uploading files... 1 / 1 [=============================================================] 100.00 % 0Created instance: ftpserver OSv v0.16 eth0: 192.168.122.77 Using default configuration log4j:WARN No appenders could be found for logger (org.apache.ftpserver.impl.DefaultFtpServerContext). log4j:WARN Please initialize the log4j system properly. FtpServer started
ftpクライアントで繋いでみます。
$ ftp 192.168.122.77 Connected to 192.168.122.77 (192.168.122.77). 220 Service ready for new user. Name (192.168.122.77:syuu): anonymous 331 Guest login okay, send your complete e-mail address as password. Password: 530 Authentication failed. Login failed. ftp>
…デフォルト設定の場合に有効なユーザ名・パスワードが分からなかったのでログイン失敗しましたが、FTPサーバが上がっているようです。