「Package Once. Deploy Anyware」(IzPack Part1)

みなさまこんにちわ。プロダクト開発部のhirotoshi(@wi_hiro)です。
さて、今回はオープンソースの「クロスプラットフォームインストーラー作成ツール」である「IzPack」に関してをご紹介します。このIzPack、ちょっと使い方を覚えると、なんでもコレで納品してしまいたくなるので注意が必要です。お客様へのドキュメント&テストパッケージの納品なんかもコレで行けます。

今回はパート1として、IzPackの概要と、実際に簡単なインストーラーを作って見たいと思います。


■まずは「IzPack」概要

IzPack(http://izpack.org/)はインストーラーを作成するためのパッケージングツールです。IzPackで作成したインストーラーは、複数のOSで動作可能で、サイトには以下のように書かれてます。

「You can package once, and deploy the very same installer to many platforms!」

IzPack自体と、IzPackで作成したインストーラを動作させるにはJava(1.4以上)が必要ですが、配布するパッケージ自体に制限はなく、Javaのアプリでも、シェルスクリプトでも、Windows NativeなプログラムでもOKです。
ちなみに、Javaでの開発を業務にしている方なら、すでに使っているパッケージかもしれませんが、以下のパッケージはこのIzPackによりインストーラーが作成されています。

  • Glassfish
  • Spring
  • JBOSS
  • Scala

■ざっと特徴を以下に。

○パッケージング

・1回のパッケージングで複数OSで稼働可能なインストーラーの作成
・パッケージングはXMLで指定
・GUIモードとコンソールモードでのインストーラ・多言語対応
・Uninstallerも同時に作成される
・各OS毎の動作を指定可能
・Webベースのインストール(途中でダウンロードするタイプね)も作成可能
・「setup.exe」のようなexeファイル形式も作成可能

○カスタマイズ

・カスタマイズは結構簡単、目的に応じたパネルを指定するだけで大抵の事はできる
・インストール時にユーザーの指定した情報など、動的内部変数を扱える
・インストーラーのGUI(見た目)もXMLの指定で。
・さらに「自動インストールスクリプト」も作成され、複数台のインストールが楽になったりする
・Windowsのプログラムグループ/ショートカットや、X-Windowsのショートカットも作成可能
・WindowsのRegistryの操作も(一部だけど)
・ポストインストールも起動できます。

○その他

・Apache Antのタスクか、Maven pluginが用意されているので一度設定すれば後はビルドを流すのみ
・Apache License Version2.0
・etc…

結構いろんな事できるようになってます。


■IzPackの動き

だいたいこんな感じです。


■実行環境

○IzPack実行に必要なもの

・IzPack本体。現在の安定版は4.3.3:http://izpack.org/downloads/
・JDK1.5以上
・Apache AntかMaven

○インストーラー実行環境

・JRE1.4以上
・OS:Windows XP / Vista / 7 / 2003 / 2000, Mac OS X, Solaris, Linux and *BSD.
IzPackで作成したインストーラーは、JREの1.5以上が入っていればWindows、Linux、Macで動作可能です。


■インストーラー作成手順の概要

1.前準備

・JDK(1.5以上)は入っている前提
・IzPackをダウンロードしてくる
・IzPackのInstall
・JAVA_HOMEの設定と、PATHの設定

2.パッケージの仕様をきめる

・インストールするアプリ、ドキュメントを用意
・インストール時の挙動をきめる

3.インストーラーの作成

・インストーラー作成用のディレクトリを準備し、アプリその他をコピー
・パッケージ仕様に沿ったinstall.xmlを作成する
・install.xmlをIzPackのコンパイラーでコンパイルする。
・インストールテスト
以上で完成です!

さて、だいぶ前置きが長くなってしまいましたが、ここからは実際にインストーラーを作って見ましょう。


■前準備

JDK1.5以上はすでにインストールされているという前提で話しを進めます。
(Macの人、Linuxの人は適宜読み替えてください)

○IzPackインストール

IzPack ダウンロードはこちら http://izpack.org/downloads/
インストールは、ダウンロードしたパッケージを起動して先へ進めればインストール出来ます。
これから先の記事では、IzPackをc:\IzPackへインストールした前提で記載してますので、Windowsならc:\IzPackへインストールすると良いです。
(当然といえば当然ですが、IzPackのインストーラーもIzPackで作成されています)

○環境設定

IzPackを実行するには、JAVAのパスとIzPackのパスの設定だけで結構ですが、今回はApache antを利用しますので、antの設定もしておいたほうが良いでしょう

・JavaのPATH設定と、IzPack\binへのPATH設定

set JAVA_HOME="C:\j2sdk1.5"
set IZPACK_HOME="C:\IzPack"
set JRE_HOME=%JAVA_HOME%\jre
set CLASSPATH=%JAVA_HOME%\bin;%CLASSPATH%
set PATH=%IZPACK_HOME%\bin;%JAVA_HOME%\bin;%JRE_HOME%\bin;%PATH%

・Apache Antを使う人は以下の設定も入れておくといいでしょう

set ANT_HOME="C:\ant"
set PATH=%ANT_HOME%\bin;%PATH%

これで、IzPackを利用する準備が整いました。
・テスト
コマンドプロンプトを立ち上げて、適当なところで「compile」コマンドを打ってみましょう。以下のように表示されれば、必要な環境は構築出来ていると思います。

c:\> compile

.::  IzPack - Version 4.3.3 ::.

< compiler specifications version: 1.0 >

- Copyright (c) 2001-2008 Julien Ponge
- Visit http://izpack.org/ for the latest releases
- Released under the terms of the Apache Software License version 2.0.

> Fatal error :
no arguments given
java.lang.Exception: no arguments given
at com.izforge.izpack.compiler.CompilerConfig.main(Unknown Source)
at com.izforge.izpack.compiler.Compiler.main(Unknown Source)
(tip : use -? to get the commmand line parameters)
c:\>

 

○サンプルインストーラーパッケージの準備

これから先この記事で利用するインストーラーパッケージのサンプル「HelloAppInstaller」を作成しました。
このサンプルの解説はまた後ほどするとして、まずはダウンロードしてIzPackを使ってみましょう。こちらをダウンロードの上、適当な場所に解凍しておいてください。

サンプルパッケージ→HelloAppInstaller.zip

○サンプルパッケージの構成

■初めてのコンパイル

さて、環境とインストールすべきパッケージもそろったので、IzPackのコンパイラーでコンパイルをしてみます。IzPackのコンパイルは以下のコマンドで行います。

compile.bat <パッケージ定義.xml> -b <アプリのベース> -o <インストーラー保存先> -k <タイプ>

実際のコマンドは以下。ダウンロードしたサンプルパッケージのディレクトリ直下で、以下のようにcompileコマンドを実行してみてください。

c:\HelloAppInstaller>compile install.xml -b appsrc -o installer\install.jar -k standard

実際の実行結果はこちらです。

c:\HelloAppInstaller>compile install.xml -b appsrc -o installer\install.jar -k standard

.::  IzPack - Version 4.3.3 ::.

< compiler specifications version: 1.0 >

- Copyright (c) 2001-2008 Julien Ponge
- Visit http://izpack.org/ for the latest releases
- Released under the terms of the Apache Software License version 2.0.

-> Processing  : install.xml
-> Output      : installer\install.jar
-> Base path   : appsrc
-> Kind        : standard
-> Compression : default
-> Compr. level: -1
-> IzPack home : C:\IzPack

・・・たくさんのメッセージ

Adding content of jar: file:/C:/IzPack/lib/standalone-compiler.jar!/bin/panels/FinishPanel.jar
Building installer jar: c:\HelloAppInstaller\installer\install.jar
[ Begin ]

Copying the skeleton installer
Copying 4 files into installer
Merging 9 jars into installer
Writing 2 Packs into installer
Writing Pack 0: HelloApp
Writing Pack 1: HelloApp Sources

[ End ]
Build time: Tue Apr 26 21:59:45 JST 2011
c:\HelloAppInstaller>

antで起動した場合はこちら。

c:\HelloAppInstaller>ant
Buildfile: c:\HelloAppInstaller\build.xml

compile:
[echo] Makes the installer using IzPack
[IzPack] Building installer jar: c:\HelloAppInstaller\installer\install.jar
[IzPack] Copying 4 files into installer
[IzPack] Merging 9 jars into installer
[IzPack] Writing 2 Packs into installer

BUILD SUCCESSFUL
Total time: 1 second
c:\HelloAppInstaller>

上記のようにエラーや例外が発生しなければ、正常にインストーラーが作成されているはずです。
インストーラーは、「HelloAppInstaller\installer」以下に「install.jar」という名前で作成されているはずです。


■インストーラーの実行

○せっかく作ったインストーラー、早速起動してみます。インストーラーは「jar」ファイルで作成されていますので、javaコマンドで実行することができます。

c:\HelloAppInstaller> cd installer
c:\HelloAppInstaller\installer>  java -jar install.jar

これで、以下のようにインストーラーが立ち上がります。

 

 

 

 

 

 

 

できあがった、install.jarを、MacやLinuxにコピーして実行してみてください。以下のような画面が立ち上がるはずです。↓はMacで起動

 

 

 

 

 

 

 

うまく起動しましたでしょうか?
このように、一回のパッケージングで複数のOSで起動(とはいえjavaの恩恵ですが)できるインストーラーを作成できるのが、IzPackの魅力です。
と、今回はここで終了ですw。
次回は、インストールプロセス中の「ライセンスに同意」や、インストール先の選択、インストーラー自体を「JAR」ファイルでなく「exe」ファイルや、「app」ファイルに変更する方法などをお届けする予定です。
また、見てくださいね。

では、また。第二回をお楽しみに~