InstallJammer、Linux用自動実行型インストーラー
仕組み
InstallJammerはTcl/Tkで書かれており、ソフトウェアの自動実行型インストーラーを作成する際に必要となる機能を豊富に備えた本格的GUIを特徴としている。作成されるインストーラーには圧縮されたプログラム・ファイルだけでなく、ウィザード・ダイアログとTclインタプリターを含むバイナリー(必要なものをすべて備えた実行形式ファイル)1MB~2MBも組み込まれる。
Tclはクロスプラットフォームであるため、InstallJammerで作成したインストーラーはWindows、Linux、AIX、BSD、HP-UXで使え、インストール・ビルダーのビルド・ターゲットにはこれらすべてのシステムが並ぶ。Mac OS Xのサポートも予定されているが、現在作業中だ。
InstallJammerが作成するのはGUIまたはコマンドラインのインストーラーだが、これにアンインストール・ウィザードを含めることもできる。このアンインストーラーはプログラム・ファイルとともにインストールされ、利用者はインストールしたソフトウェアを簡単に削除することができる。また、ソフトウェアの無人インストールと削除にも対応している。
機能
InstallJammerを起動すると、初回だけ、空のプロジェクト・マネージャーが現れ、ウィザードがプロジェクトの設定を案内してくれる。ここで、会社名とバージョン情報を入力し、すべてのプログラム・ファイルを置くメイン・ディレクトリーを設定する。ソースをコンパイルするなら、./configure --prefix=/home/user/programdir
と設定するのがよいだろう。こうすればすべてのファイルが1個所に集約される。
プロジェクト・マネージャー・ウィザードの左側にはツリーがある。共通して表示されるこのツリーがInstallJammerの特徴だ。完璧なインストーラーを構築する際に必要となるすべてのステップが並んでおり、上から下まで順に実行していけば目的のインストーラーができあがるという寸法だ。
InstallJammerでインストーラーを作成しているところ。クリックすると大きな写真が見られます |
さまざまな設定の変更は、ウィザードの右側部分で行う。インストールのターゲット・ディレクトリー、プログラムのバージョンとビルドの情報、インストーラー・ウィザードが利用者に示す文字列などが変更可能。先にプロジェクト・ウィザードで設定したメイン・プログラム・ディレクトリーとその内容は、Components and Filesに反映されている。
だが、アプリケーションのほとんどは特定のディレクトリーにインストールするが、configファイルだけは/etcに置くという場合もある。そのため、プロジェクトのファイルやディレクトリーの一部について、ターゲット・インストール・ディレクトリーを変更できるようになっている。もちろん、ファイルの追加・削除も可能だ。
ファイルをプログラム・コンポーネントやドキュメンテーション・コンポーネントなどといったコンポーネントに類別し、それらのコンポーネントを組み合わせてセットアップ・タイプを定義することもできる。たとえば、ソース・コンポーネント、開発者向けドキュメンテーション・コンポーネント、メイン・プログラム・コンポーネントに類別し、それらを「開発者向けセットアップ・タイプ」としてグループ化することができる。
ビルド・ウィザード
ウィザードのダイアログ画面はペインと呼ばれ、その共通セットがあらかじめプロジェクトに用意される。ウィザードにはツリーがもう一つあるが、ここに表示されているのがそれだ。これらのペインは作成したいインストーラーに合わせて変更することができる。それには、Un/Install User Interfaceダイアログを使用する。ペインの追加はボタンで、削除はペインを右クリックする。あらかじめ用意されているGUIレイアウト(License Agreementペインなど)を適用することもできる。ペインをマークし、適用したいレイアウトを選択するだけ。設定したペインのプレビューもボタン一つだ。
各ペインは、右側部分で多言語に設定することができる。たとえば、GNU General Public License(GPL)の条文を多言語で表示することができる。また、ペインごとにアクションを追加することもできる。たとえば、ターゲット・システム上のカーネルに合わせてビルドする必要のある特殊なカーネル・モジュールがある場合、「Execute external program」アクションを利用すれば、必要なビルドを実行するBashスクリプトを作りインストーラーの内部からそのスクリプトを実行するようにできる。
外部スクリプトでその成否をウィザード上に表示したい場合は、結果をSTDOUTにechoすればよい。そうした変数を扱うために、InstallJammerにはVirtual Textという文字列変数があり、<%VariableName%を追加すればその文字がペインに表示される。また、条件の中で使うこともできる。
条件は各アクションまたはペインに課すことができる。文字列を比較すれば、文字列変数をブーリアンとして使うことも可能。利用者の入力に関する条件、たとえばyes/noダイアログなどもサポートされている。各ペイン、アクション、条件、外部(または組み込みTcl)スクリプトを組み合わせることで、ターゲット・シナリオに応じて動作するインストーラーを作成することができる。
その他の機能
バージョン1.1から、DebianとRPMパッケージ・データベースが組み込まれた。ただし、登録されているのは個々のファイルではなくパッケージだ。インストーラーは標準ツールを使ってターゲット・システム上にダミーのパッケージを構築し、インストールする。
この方法では依存性の解決はできない。RPMまたはdpkgでアンインストールしようとすると、InstallJammerのアンインストール・ウィザードが起動する。ツリーには、インストーラーをパッケージするためのステップが一つ用意されている。ここで、ビルド・ターゲットを選択し、ビルド・プロセスの出力をログに記録する。最後のステップは、さまざまなシナリオ下でのインストーラーのテストだ。たとえば、ファイルをインストールしない場合、無人の場合、コンソール・モードでインストールする場合など。コンソール・インストールではncursesウィザード・インタフェースが表示される。無人インストールではユーザーの操作なしで動作する。
InstallJammerで作成したSaxenOSインストーラー。クリックすると大きな写真が見られます |
InstallJammerのドキュメンテーションは完全かつ極めて有用だった。お陰で、我がLinuxディストリビューションSaxenOS用グラフィカル・インストーラーの完成に漕ぎ着けた。もっとも、InstallJammerのファイル・パッケージ機能を使ったのではなく、外部Bashスクリプトを呼び出すウィザードを作成するための汎用ツールとして「誤用」したのだが。私の場合、全ディストリビューションをインストールする実際の作業は、そのスクリプトが行う。インストールされたベース・システムから見れば、依然として、Slackwareパッケージ管理ツールとZenwalks Netpkgが動くわけだが、パッケージの追加にInstallJammerを使おうと目論んだのだ。
3日がかりの作業で、少々白髪が増え、何度もやり直す羽目になった。しかし、スクリプトのチェックはもちろん大変だったが、一介のユーザーであっても決してプログラマーではない私は、その結果に十分満足している。我がインストーラーのスクリーンショットをthe SaxenOS Webサイトに公開しているので、ご覧あれ。
まとめ
既存のLinuxパッケージ管理についてその是非を論じようとは思わない。しかし、dpkg、rpm、pkgtool、apt-get、slapt-get、yumと、これらが居並んでいるだけで大変だと思うのだ。それぞれのソリューションにはそれぞれのフロント・エンドがあり得手不得手がある。そのいずれでも、ソフトウェアのインストールと削除という目的は達せられる。しかし、Windows中心のソフトウェア企業がLinux向けにソフトウェアをパッケージするとき、そんなことを求めているだろうか。バージョンごとに異なるパッケージ形式を保守するには、余分な労力やコストがかかるのだ。
Slackware、RPM、Debianパッケージのための機能豊富なGUIビルド・ツールについても、私はよく知らない。だが、Windows向けにプログラムをパッケージするソフトウェア企業がビルドに利用してきたのはInstaller Wyseなどだ。もちろん、移植は簡単ではないしコストもかかる。しかし、利用者にとって、馴染みのインストーラーがほしいというのは切実な願いなのだ。
長年のWindows利用者がLinuxに乗り換えるとき、何を考えるだろうか。周知のとおり、普通のWindows利用者はこれまでと同じように使いたいと考えている。新しいものを試すとしても、これまでとよく似ていなければならない。だから、Linux向けの製品を提供しているソフトウェア企業にとって自動実行型インストーラーは福音であり、エンドユーザーにとってはウィザードが表示されることで安心できるだろう。既存のパッケージ管理ツールと連動して動くインストーラーがあれば歓迎されるだろうと、私は思う。
NewsForge.com 原文