Windows 用ソフトウェアインストーラ作成ツール。 コンパクトなインストーラを生成する。
NSIS スクリプトを使うと、インストーラ以外にちょっとしたプログラムを作ることができる。
それぞれファイルに保存して makensis.exe を実行する。
Name "Hello" OutFile "hello-dialog.exe" SilentInstall silent Section Messagebox MB_OK|MB_ICONINFORMATION "Hello World!" SectionEnd
NSIS の 2.01 が9月24日にリリースされていた。 目玉はNSISコンパイラ(makensis)が、POSIX プラットフォームで動くようになったこと。 Linux 上で Windows 用インストーラが作成できるようになる。
インストールしたいプログラム/データが(Javaプログラムだったり、クロスコンパイルできるものだったり、コンパイル不要のスクリプトだったりで)用意できるならば、Linux 上でインストーラまで通して作れるのでこれは有り難い。
tar jxvf nsis201.tar.bz2 cd NSIS/Source make USE_PRECOMPILED_EXEHEADS=1 cd .. fromdos install.sh su ./install.sh /usr/local/NSIS-2.01
ソースツリーにMenu ディレクトリ無くてインストール時にエラー表示がでるが、それ以外はうまくコピーされている感じ。
Windows 上の NSIS 2.0 で使っていたNSISスクリプト(.nsi)をかけてみる。 間接的に WinMessages.MSH をインクルードしようとしてエラー。 ファイルの大文字小文字の問題だけのようで、lib/NSIS/Include/WinMessages.nsh を同ディレクトリ上に WinMessages.MSH としてシンボリックリンクを張ることで対処。
できあがったインストーラを Windows BOX で動かしてみた。 問題なくインストール完了。
素晴しい。
[ Linux 上で NSIS ]
Java で書いたプログラムを Windows ユーザに提供する時に、Java の実行環境の事とかを考えるのが面倒くさい。 頼まれて自分がセットアップする時も面倒くさい。
やっぱりJARファイル化したプログラムに JRE をバンドルしたインストーラを NSIS あたりで作れるようにしておいた方が、あとあと楽そうだ。
しかし JRE のバンドルの話を取り扱かっている記事ってあまりみかけない。 JRE 1.4.2_06 の README.txt などに再配布の事が書いてあるのだけれど、いまいちすっきりしないところもある。例えば
All files not in these lists of optional files must be included in redistributions of the runtime environment.
とあるんだけれど、All files ってどれよ。 Windows 用 JRE インストーラを実行して実際にインストールした後、インストール先にあるファイルって判断で良いのかな。多分。
それから、「それらをディレクトリごとコピーすれば他でも動くかどうか」という事に関する記述が見つけられないのがちょっと気持ち悪い。大丈夫っぽいんだけれど。
NSIS 側はディレクトリまるごとインストール(File /r jre)と、アンインストール時にまるごと削除 (RMDir /r "$INSTDIR\jre") で OK。 実行に関しては NSIS Archive の Examples にある記事「Java Launcher」を参考に起動のための exe を作るなどすれば良い。 これは NSISスクリプトを用いて「java.exe を探し出して指定したパラメータで呼び出す exe ファイル」を作るというもの。
NSIS はインストーラを作るためのソフトであるが、NSISコンパイラでちょっとしたプログラムも書けるよという事を示す面白い例でもある。 これぐらいの用途であれば結構コンパクトな実行可能ファイルを吐いてくれる。
最近、Java プログラムを Win32 上で簡単に起動できるようにする方法を調査中。
JSmooth 0.9.7 を試してみる。 JSmooth 自体も Java アプリケーションなので、Linux で動くかと昨日試してみた(ソースをとってきて ant jar; ant run)のだがうまく動かなかった。 ということで今日 Windows 上で。
GUIベースなので使い方を一度覚えれば比較的簡単に使える。
など。手軽であるが、生成したランチャ(JARファイル埋め込み無し)で、約400KB弱となった。でかい。
NSIS で同様のランチャ(こちらも簡単なJVM検索はあり。ページへの誘導はなし)を生成すると、30KB強。 NSIS なら Linux でも生成できる事を考えると、JARファイルの exe 埋め込み機能以外は NSIS の方がよさそうだ。
PEG-TJ25を購入し、Palm OS 生活復活。 最初はおもちゃのつもりで買ったのだが、プロジェクトマネジメントなどにシフトした仕事のスケジュール管理などで大活躍。
PDA 市場の明るい話はあまり聞かないが、末長く製品が出て続けて欲しい。
2.01 で POSIX プラットフォームで動くようになった NSIS であるが、2.02、2.03 は Linux上ではソースパッケージからのビルドでエラーになってしまっていた。
1月5日に 2.04 がリリースされたので、こちらも試してみる。お、ビルドできた。
tar jxvf nsis204.tar.bz2 cd NSIS/Source make USE_PRECOMPILED_EXEHEADS=1 cd .. su ./install.sh /usr/local/NSIS-2.04
インストール時に Menu ディレクトリが無くてエラーメッセージが出るのは前回と一緒。CVS リポジトリをみるとHTMLで書かれたドキュメントがあるだけのようなので、無くても問題なさそうである。 付属の install.sh も改行コードが CRLF から LF に修正されているためそのまま実行できるようになった。
[ Linux 上で NSIS ]
PARのチュートリアルで UPX (the Ultimate Packer for eXecutables)というツールが紹介されていたので使ってみる。 実行可能なファイルを、実行可能のまま圧縮するというもの。 MS-DOSの時代の伝説のプログラム DIET を思い出す。
PAR で実行可能形式に変換したPerlスクリプトを UPX 1.25 で圧縮したところサイズが小さくなった。 しかし PAR で作った実行可能バイナリは実行時に自身を展開するため、圧縮によってフォーマットが変わってしまっていることを検知して警告が出てしまう。 ちょっとよろしくない。
NSIS のサイトによるとビルドに「SCons」を使うようしたらしい。
と興味深いツールになっているようだ。
現在プロジェクトLaTeXベースのドキュメント生成には GNU Make を使っているのだが、UNIX、Windows の両方でビルドできるようにするには ComSpec 環境変数の有無で使用するコマンドを切り換えたり等いろいろ面倒なので、代替ツールとして使えないかなと。
基本的な機能は Make に対する改良がなされているようであるし、コピー等ファイル操作も SCons 自体がもっているのでクロスプラットフォームでビルドできるようにするのも楽そうだ。
一方 Autoconf 系の機能については、インストール済みのライブラリの検出や実装レベルのチェック等を実装しているようである。 make check や make dist、make install 等にあたるターゲットに関する機能(あるいは規約)のようなものは無い。これは非常に残念。 結局自分が Ant を使わなくなったのも GNU Autotools にあるこれらの機能に欠けているからであるし。
実は私がPerl が好きな理由の一つとして、これらサポートが充実しているという点がある。Perl では ExtUtils::MakeMaker (あるいは Module::Build)があり、ビルドからテスト、ソースパッケージのパッケージングまでフレームワークが整っている。
SCons は Python ベースで、Makefile にあたるファイルも Python スクリプトである。 SCons が影響を受けた Cons は Perl ベースであったのだが、既に2001年5月ごろから開発が止まってしまっている。残念。
ということで Make の代替には使えそうであるが、GNU Autotools と同じようなことをするにはいろいろ手をかけないといけないといった印象。
Windows 用のインストーラ作成ツール NSIS は、スクリプトベースでインストーラを作っていくのが1つの特徴である。 NSIS スクリプトは、さすがインスーラ作成用だけあって
その他システム関連のコマンドが充実している。 コンパイルするとかなりコンパクトな実行形式ファイル (EXE) を生成してくれるので、ちょっとした処理を自動化するには便利である。
今回 USB メモリに入れておいて、そのドライブ上のいくつかのディレクトリに PATH が通った状態でコマンドプロンプトを開くツールを NSIS で書いておこうかと思って試す。
NSIS は POSIX ベースシステムでビルドし実行でき、NSIS スクリプトをコンパイルできる。 ということで作業を Linux で作業をしていたのだが、どうやら System::Call が使えないようだ(スクリプトのコンパイルに失敗する)。
Debian パッケージが古いせい (2.19-1.1) かと思い、ソースパッケージをビルドしてみたらまさに System 関連らしいところでコンパイルがこけている (そういう背景で Debian パッケージがアップデートされていない?)。
ということでどうも最新の NSIS は Linux では駄目っぽい。
しょうがないので久しぶりに Wine。
Wine 上に NSIS 2.22 をインストールして makensis.exe を実行してみたところ試した範囲ではうまく動いている。 ついでにでき上がった実行可能ファイルも Wine 上で試せる。
しばらくは Wine 上で NSIS スクリプト書きを楽しむことにしよう (最終的には Windows 上でコンパイルしなおして動作確認するのだけれども)。
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
nDiki は1999年1月に始めたコンピュータ日誌を前身とする Naney の Web 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。
※内容は個人的見解であり所属組織とは関係ありません。