« ウェブサービスにおけるダメージコントロール (MySQL のスロークエリを自動的に kill する方法) | メイン | サイボウズの新卒採用説明会に参加します »

2008年11月19日

ウェブアプリケーションのインストーラジェネレータ

 CGI や PHP などの小さなウェブアプリケーションを配置(デプロイ)する際、アーカイブをインターネットからダウンロードして、適切な展開ツールで展開したのち、文字コードをあわせてディレクトリ丸ごとアップロード、というのは結構煩雑な手続きです。そこで、tar.gz から自己展開型の CGI を作成するインストーラジェネレータ tgz2cgi.pl を作ってみました。以下のような感じで使います。

% tgz2cgi.pl \
    --title='MyApp インストーラー' \
    --start='インストールを開始します' \
    --end='インストールが終了しました。<a href="setup.cgi">次へ進む</a>' \
    --delete --nph \
    < myapp.tar.gz > nph-myapp-installer.cgi

 このようにしてmyapp.tar.gz を展開するインストーラ nph-myapp-installer.cgi を作成することができます。上の例では、終了時のメッセージに「次へ」ボタンをつけて、展開されたパッケージの setup.cgi へユーザーを誘導しています。他のオプションは、以下のとおり。インストール終了後に自分自身を消去するモードもあります。特定のファイルが既に存在するかチェックして、見つかった場合はインストールを中止する --check-files オプションを使えば、誤って複数回実行してしまうこともありません。

$ ./tgz2cgi.pl --help
Usage: ./tgz2cgi.pl [options] < package.tar.gz > installer.cgi
Options:
  --title=title  title when run as a CGI
  --start=msg    start message
  --end=msg      end message
  --nph          create nph CGI
  --delete       delete installer cgi on success
  --help         show help

 また、生成されるインストーラは、コマンドラインから直接実行することも可能です。この場合は、tar xzvf と同じ動作になります。生成されるインストーラの依存先は、perl (たぶん4以上), uudecode, tar, gzcat という、あまり時代を感じさせない、環境依存の少ない構成にしたつもりです。ぜひ、自己責任でお楽しみください。

15:41追記: uu(en|de)code は最近のディストリビューションでは標準インストールではないようなので、MIME::Base64 に変更しましたorz

投稿者 kazuho : 2008年11月19日 11:05 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

トラックバック

このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/2070