JDK・JREっぽいインストーラをつくってみる(2)

の続きでインフラで使うインストーラの作り方について扱っています。既に階層構造とインストーラプログラム作成まで説明しました。今回はその続きです。

バイナリデータをプログラムに埋め込む

ここがキモとなる部分です。「最初にインストールする階層をつくる」で作った階層をまず zip 圧縮します。

$ zip -r dummy.zip aaa bbb ccc

この後この zip ファイルをプログラムに追加します。

$ cat dummy.zip >> installer.sh
$ rm -f dummy.zip aaa bbb ccc

ここでリダイレクトは ">" で行なってしまうとせっかく作ったプログラムが上書きされてしまいますので気をつけてください。

この状態で installer.sh は「プログラム+データファイル」の 2つのタイプを持ったファイルとなりました。
再度このプログラムを見てみると以下のようになっています。

バイナリデータ追加後のインストーラ

exit 以降にバイナリデータが追加されており、その次の行は "PK" で始まっています。"PK" で始まるのは zip フォーマットの特徴ですね。

このプログラムは "exit 0" で終了になる為、それより下の行(バイナリデータ)に処理が移ることはありません。その為、この "exit 0" の行は必須です(ないと何が起こるか分かりません)。

実行してみる

では最後に出来上がったインストーラを実行してみましょう。

$ mkdir -p work
$ ./test.sh
準備はいいですか?(N/y)
y
unziping …
Archive: temporary.zip
creating: aaa/
extracting: aaa/date.txt
creating: bbb/
creating: bbb/eee/
creating: bbb/eee/fff/
inflating: bbb/eee/top.txt
creating: ccc/
creating: ccc/ddd/
inflating: ccc/ddd/df_h.txt
exit …
`aaa' -> `work/aaa'
`aaa/date.txt' -> `work/aaa/date.txt'
`bbb' -> `work/bbb'
`bbb/eee' -> `work/bbb/eee'
`bbb/eee/fff' -> `work/bbb/eee/fff'
`bbb/eee/top.txt' -> `work/bbb/eee/top.txt'
`ccc' -> `work/ccc'
`ccc/ddd' -> `work/ccc/ddd'
`ccc/ddd/df_h.txt' -> `work/ccc/ddd/df_h.txt'

この後、work ディレクトリを覗いてみます。aaa bbb ccc というディレクトリが作成され aaa/date.txt も bbb/eee/top.txt 等もありました。これで完成です!

このような方法でプログラムとデータを一つにまとめてしまえばデプロイも非常に楽に行うことが可能です。機会があればつくってみてください。

【お勧め】インストール関連の記事

No Comments - Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *

*